|
@@ -0,0 +1,146 @@
|
|
|
+package org.springblade.control.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
+import org.springblade.control.dto.ControlProjectInfoDTO;
|
|
|
+import org.springblade.control.dto.ProjectCostBudgetDTO;
|
|
|
+import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
|
|
|
+import org.springblade.control.entity.ControlProjectInfo;
|
|
|
+import org.springblade.control.entity.DictInfo;
|
|
|
+import org.springblade.control.entity.ProjectCostBudget;
|
|
|
+import org.springblade.control.entity.ProjectCostBudgetStats;
|
|
|
+import org.springblade.control.mapper.ProjectCostBudgetMapper;
|
|
|
+import org.springblade.control.mapper.ProjectInfoMapper;
|
|
|
+import org.springblade.control.service.IProjectCostBudgetService;
|
|
|
+import org.springblade.control.service.IProjectInfoService;
|
|
|
+import org.springblade.control.service.IProjectProcessService;
|
|
|
+import org.springblade.control.vo.ControlProjectInfoVO;
|
|
|
+import org.springblade.control.vo.ProjectCostBudgetVO;
|
|
|
+import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
+import org.springblade.core.mp.support.Query;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Param
|
|
|
+ * @Author wangwl
|
|
|
+ * @Date 2023/5/12 9:43
|
|
|
+ **/
|
|
|
+@Service
|
|
|
+@AllArgsConstructor
|
|
|
+public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBudgetMapper, ProjectCostBudget> implements IProjectCostBudgetService {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量新增或修改预算
|
|
|
+ * @param dto
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public ProjectCostBudgetStats batchAddOrUpdate(ProjectCostBudgetStatsDTO dto) {
|
|
|
+ List<ProjectCostBudget> allBudget = new ArrayList<>();
|
|
|
+ //施工单位
|
|
|
+ if (dto.getBuildUnit() != null && dto.getBuildUnit().size() > 0){
|
|
|
+ dto.getBuildUnit().stream().forEach(l->{
|
|
|
+ l.setProjectId(dto.getProjectId());
|
|
|
+ l.setUnitType(1);
|
|
|
+ countMoney(l);
|
|
|
+ });
|
|
|
+ allBudget.addAll(dto.getBuildUnit());
|
|
|
+ }
|
|
|
+ //监理单位
|
|
|
+ if (dto.getSupervisorUnit() != null && dto.getSupervisorUnit().size() > 0){
|
|
|
+ dto.getSupervisorUnit().stream().forEach(l->{
|
|
|
+ l.setProjectId(dto.getProjectId());
|
|
|
+ l.setUnitType(2);
|
|
|
+ countMoney(l);
|
|
|
+ });
|
|
|
+ allBudget.addAll(dto.getSupervisorUnit());
|
|
|
+ }
|
|
|
+ //建设单位
|
|
|
+ if (dto.getConstructUnit() != null && dto.getConstructUnit().size() > 0){
|
|
|
+ dto.getConstructUnit().stream().forEach(l->{
|
|
|
+ l.setProjectId(dto.getProjectId());
|
|
|
+ l.setUnitType(3);
|
|
|
+ countMoney(l);
|
|
|
+ });
|
|
|
+ allBudget.addAll(dto.getConstructUnit());
|
|
|
+ }
|
|
|
+ baseMapper.removeOldBudget(dto.getProjectId());
|
|
|
+ this.saveOrUpdateBatch(allBudget);
|
|
|
+ //计算保存完,统计总和,修改统计表
|
|
|
+ ProjectCostBudgetStats budgetStats = baseMapper.getBudgetTotalByProjectId(dto.getProjectId());
|
|
|
+ return budgetStats;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目预算列表,默认所有
|
|
|
+ * @param costBudget
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ProjectCostBudgetVO> budgetList(ProjectCostBudget costBudget) {
|
|
|
+ return baseMapper.budgetList(costBudget);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询项目下所有预算明细
|
|
|
+ * @param projectId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ProjectCostBudget> budgetListByProjectId(Long projectId) {
|
|
|
+ return this.list(new LambdaQueryWrapper<ProjectCostBudget>().eq(ProjectCostBudget::getProjectId,projectId));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据项目id删除项目
|
|
|
+ * @param projectId
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void deleteByProjectId(Long projectId) {
|
|
|
+ baseMapper.removeOldBudget(projectId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统计一行的几个总金额
|
|
|
+ */
|
|
|
+ public static void countMoney(ProjectCostBudget budget){
|
|
|
+ BigDecimal postMoney = new BigDecimal("100");
|
|
|
+ //人工成本 = 人员数量 * 单价 * 天数
|
|
|
+ if (budget.getStaffCount() != null && budget.getBudgetDays() != null) {
|
|
|
+ budget.setBudgetStaffCost(budget.getStaffCount().multiply(postMoney).multiply(budget.getBudgetDays()));
|
|
|
+ }else {
|
|
|
+ budget.setBudgetStaffCost(new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ //外包金额 = 外包单价 * 外包数量
|
|
|
+ if (budget.getOutsourcePeopleCount() != null && budget.getOutsourceUnitPrice() != null) {
|
|
|
+ budget.setOutsourceCountMoney(budget.getOutsourceUnitPrice().multiply(budget.getOutsourcePeopleCount()));
|
|
|
+ }else {
|
|
|
+ budget.setOutsourceCountMoney(new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ //判断差旅费
|
|
|
+ if (budget.getBudgetTravelExpense() == null){
|
|
|
+ budget.setBudgetTravelExpense(new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ //判断其他预算金额
|
|
|
+ if (budget.getOtherBudgetMoney() == null){
|
|
|
+ budget.setOtherBudgetMoney(new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ //总预算 = 人工成本 + 外包金额 + 差旅费 + 其他费用
|
|
|
+ budget.setBudgetCountMoney(budget.getBudgetStaffCost().add(budget.getBudgetTravelExpense())
|
|
|
+ .add(budget.getOutsourceCountMoney()).add(budget.getOtherBudgetMoney()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|