|
@@ -4,16 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.mapper.*;
|
|
import com.management.platform.mapper.*;
|
|
-import com.management.platform.service.PlanProcedureTotalService;
|
|
|
|
-import com.management.platform.service.ProdProcedureService;
|
|
|
|
|
|
+import com.management.platform.service.*;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
-import com.management.platform.service.ReportService;
|
|
|
|
import com.management.platform.util.HttpRespMsg;
|
|
import com.management.platform.util.HttpRespMsg;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -42,9 +43,13 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
|
|
private PlanProcedureTotalService planProcedureTotalService;
|
|
private PlanProcedureTotalService planProcedureTotalService;
|
|
@Resource
|
|
@Resource
|
|
private ReportService reportService;
|
|
private ReportService reportService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ProdProcedureTeamService prodProcedureTeamService;
|
|
|
|
+ @Resource
|
|
|
|
+ private PlanService planService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> prodProcedureList, Integer productId, String productName, String version) {
|
|
|
|
|
|
+ public HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> prodProcedureList, Integer productId, String productName, String version){
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
String token = request.getHeader("TOKEN");
|
|
String token = request.getHeader("TOKEN");
|
|
User user = userMapper.selectById(token);
|
|
User user = userMapper.selectById(token);
|
|
@@ -104,6 +109,88 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
|
|
if (updateList != null&&updateList.size()>0) {
|
|
if (updateList != null&&updateList.size()>0) {
|
|
System.out.println("updateList"+updateList);
|
|
System.out.println("updateList"+updateList);
|
|
this.updateBatchById(updateList);
|
|
this.updateBatchById(updateList);
|
|
|
|
+ //todo:更新产品工序单价
|
|
|
|
+ List<Integer> procedureIds = updateList.stream().map(ProdProcedure::getId).distinct().collect(Collectors.toList());
|
|
|
|
+ //todo:找到用到当前工序的plan_procedure_total(计划指定工序总进度表) 更新 单价相关数据
|
|
|
|
+ List<PlanProcedureTotal> planProcedureTotals = planProcedureTotalService.list(new LambdaQueryWrapper<PlanProcedureTotal>().in(PlanProcedureTotal::getProdProcedureId, procedureIds));
|
|
|
|
+ if(planProcedureTotals.size()>0){
|
|
|
|
+ List<Integer> planIds = planProcedureTotals.stream().map(PlanProcedureTotal::getPlanId).distinct().collect(Collectors.toList());
|
|
|
|
+ List<Plan> planList = planService.list(new LambdaQueryWrapper<Plan>().in(Plan::getId, planIds));
|
|
|
|
+ List<Integer> totalIds = planProcedureTotals.stream().map(PlanProcedureTotal::getId).distinct().collect(Collectors.toList());
|
|
|
|
+ List<ProdProcedureTeam> allProdProcedureTeams = prodProcedureTeamService.list(new LambdaQueryWrapper<ProdProcedureTeam>().in(ProdProcedureTeam::getPlanProcedureId,totalIds));
|
|
|
|
+ List<Integer> teamIdList = allProdProcedureTeams.stream().map(ProdProcedureTeam::getId).distinct().collect(Collectors.toList());
|
|
|
|
+ List<Report> allReports = reportService.list(new LambdaQueryWrapper<Report>().select(Report::getId,Report::getUserProcedureTeamId, Report::getProdProcedureId,Report::getFinishNum).in(Report::getUserProcedureTeamId, teamIdList));
|
|
|
|
+ List<ProdProcedureTeam> needUpdateTeamList=new ArrayList<>();
|
|
|
|
+ List<Report> needUpdateReportList=new ArrayList<>();
|
|
|
|
+ for (PlanProcedureTotal planProcedureTotal : planProcedureTotals) {
|
|
|
|
+ Optional<ProdProcedure> first = updateList.stream().filter(u -> u.getId().equals(planProcedureTotal.getId())).findFirst();
|
|
|
|
+ if(first.isPresent()){
|
|
|
|
+ Optional<Plan> plan = planList.stream().filter(p -> p.getId().equals(planProcedureTotal.getPlanId())).findFirst();
|
|
|
|
+ if(plan.isPresent()){
|
|
|
|
+ BigDecimal totalWages=new BigDecimal(String.valueOf(first.get().getUnitPrice()));
|
|
|
|
+ totalWages=totalWages.multiply(new BigDecimal(plan.get().getNum()));
|
|
|
|
+ planProcedureTotal.setTotalWages(totalWages.doubleValue());
|
|
|
|
+ BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(first.get().getWorkingTime()));
|
|
|
|
+ totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.get().getNum()));
|
|
|
|
+ planProcedureTotal.setTotalWorkingHours(totalWorkingHours.doubleValue());
|
|
|
|
+ //todo:找到用到当前工序的prod_procedure_team (计划分配表) 更新 单价相关数据
|
|
|
|
+ List<ProdProcedureTeam> prodProcedureTeams =allProdProcedureTeams.stream().filter(a->a.getPlanProcedureId().equals(planProcedureTotal.getId())).collect(Collectors.toList());
|
|
|
|
+ prodProcedureTeams = prodProcedureTeams.stream().sorted(Comparator.comparing(ProdProcedureTeam::getId)).collect(Collectors.toList());
|
|
|
|
+ String teamIds = prodProcedureTeams.stream().map(ProdProcedureTeam::getUserId).collect(Collectors.joining(","));
|
|
|
|
+ BigDecimal overCountWages = new BigDecimal(0);
|
|
|
|
+ BigDecimal overWorkingHours = new BigDecimal(0);
|
|
|
|
+ if(!org.springframework.util.StringUtils.isEmpty(teamIds)){
|
|
|
|
+ String[] team = teamIds.split(",");
|
|
|
|
+ totalWages=totalWages.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
|
|
|
|
+ totalWorkingHours=totalWorkingHours.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
|
|
|
|
+ overCountWages=totalWages.multiply(new BigDecimal(team.length));
|
|
|
|
+ overWorkingHours=totalWorkingHours.multiply(new BigDecimal(team.length));
|
|
|
|
+ for (int i = 0; i < team.length; i++) {
|
|
|
|
+ int finalI = i;
|
|
|
|
+ //已存在的人员更新处理
|
|
|
|
+ Optional<ProdProcedureTeam> teamOptional = prodProcedureTeams.stream().filter(pl -> pl.getUserId().equals(team[finalI])).findFirst();
|
|
|
|
+ if(teamOptional.isPresent()){
|
|
|
|
+ ProdProcedureTeam prodProcedureTeam = teamOptional.get();
|
|
|
|
+ if(i==team.length-1){
|
|
|
|
+ double wagesAbs =new BigDecimal(planProcedureTotal.getTotalWages()).subtract(overCountWages).doubleValue();
|
|
|
|
+ double workTimesAbs =new BigDecimal(planProcedureTotal.getTotalWorkingHours()).subtract(overWorkingHours).doubleValue();
|
|
|
|
+ prodProcedureTeam.setWorkTime(totalWorkingHours.add(new BigDecimal(workTimesAbs)).doubleValue());
|
|
|
|
+ prodProcedureTeam.setJobOfMoney(totalWages.add(new BigDecimal(wagesAbs)));
|
|
|
|
+ }else {
|
|
|
|
+ prodProcedureTeam.setWorkTime(totalWorkingHours.doubleValue());
|
|
|
|
+ prodProcedureTeam.setJobOfMoney(totalWages);
|
|
|
|
+ }
|
|
|
|
+ if(plan.get().getPlanType()==1){
|
|
|
|
+ prodProcedureTeam.setStatus(1);
|
|
|
|
+ }
|
|
|
|
+ needUpdateTeamList.add(prodProcedureTeam);
|
|
|
|
+ //todo:找到用到当前工序的report (报工表) 更新 单价相关数据
|
|
|
|
+ List<Report> reports = allReports.stream().filter(a -> a.getUserProcedureTeamId().equals(prodProcedureTeam.getId())).collect(Collectors.toList());
|
|
|
|
+ for (Report report : reports) {
|
|
|
|
+ double curReportTime = 0.0;
|
|
|
|
+ Integer num = plan.get().getNum();//总件数
|
|
|
|
+ double addPercent = report.getFinishNum() / num;
|
|
|
|
+ //新版计算报工的工时和价钱;根据填报件数的占比计算工时和价钱
|
|
|
|
+ double earnMoney = planProcedureTotal.getTotalWages() * addPercent;
|
|
|
|
+ curReportTime = planProcedureTotal.getTotalWorkingHours() * addPercent;
|
|
|
|
+ report.setWorkingTime(curReportTime);//本次报工的工时数
|
|
|
|
+ report.setCost(new BigDecimal(earnMoney));//本次报工的成本
|
|
|
|
+ needUpdateReportList.add(report);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ planProcedureTotalService.updateBatchById(planProcedureTotals);
|
|
|
|
+ if(needUpdateTeamList.size()>0){
|
|
|
|
+ prodProcedureTeamService.updateBatchById(needUpdateTeamList);
|
|
|
|
+ }
|
|
|
|
+ if(needUpdateReportList.size()>0){
|
|
|
|
+ reportService.updateBatchById(needUpdateReportList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
//4.新增的id
|
|
//4.新增的id
|
|
List<ProdProcedure> insertList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() == null).collect(Collectors.toList());
|
|
List<ProdProcedure> insertList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() == null).collect(Collectors.toList());
|