|
@@ -129,6 +129,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
report.setCompanyId(companyId);
|
|
|
|
|
|
Plan plan = planMapper.selectById(report.getPlanId());
|
|
|
+ if (plan.getNum() == 0) {
|
|
|
+ httpRespMsg.setError("该计划件数为0,无法报工");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
if (plan.getPlanType() == 0) {
|
|
|
//普通计划检查产品是否存在
|
|
|
Product product = productMapper.selectById(plan.getProductId());
|
|
@@ -142,47 +146,34 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", today));
|
|
|
//计算工作时长
|
|
|
ProdProcedureTeam prodProcedureTeam = prodProcedureTeamMapper.selectById(report.getUserProcedureTeamId());
|
|
|
+ //总计划任务的工序中有总工时和总工价
|
|
|
+ PlanProcedureTotal planProcedureTotal = planProcedureTotalMapper.selectOne(new QueryWrapper<PlanProcedureTotal>().eq("plan_id", report.getPlanId()).eq("prod_procedure_id", report.getProdProcedureId()));
|
|
|
double curReportTime = 0.0;
|
|
|
- //查找上一次该工序的报工
|
|
|
- Integer lastProgress = 0;
|
|
|
- Report beforeTodayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).lt("create_date", today).orderByDesc("create_date").last("limit 1"));
|
|
|
- //查找今天之前是否有报工,有的话取上次报工进度,没有的话取分配下来时的报工进度
|
|
|
- if (beforeTodayReport != null) {
|
|
|
- if (report.getProgress() <= beforeTodayReport.getProgress()) {
|
|
|
- httpRespMsg.setError("进度必须大于上次报工进度("+beforeTodayReport.getProgress()+"%)");
|
|
|
- return httpRespMsg;
|
|
|
- }
|
|
|
- //去上次报工的进度
|
|
|
- lastProgress = beforeTodayReport.getProgress();
|
|
|
- } else {
|
|
|
- //今天之前没有报过工
|
|
|
- if (todayReport == null) {
|
|
|
- lastProgress = prodProcedureTeam.getProgress();
|
|
|
- if (report.getProgress() <= lastProgress) {
|
|
|
- httpRespMsg.setError("进度必须大于上次报工进度("+lastProgress+"%)");
|
|
|
- return httpRespMsg;
|
|
|
- }
|
|
|
- } else {
|
|
|
- //今天报过工了,prodProcedureTeam中的是报过的工时,应该从0开始算才对
|
|
|
- lastProgress = 0;
|
|
|
- }
|
|
|
- if (report.getProgress() <= lastProgress) {
|
|
|
- httpRespMsg.setError("进度必须大于上次报工进度("+lastProgress+"%)");
|
|
|
- return httpRespMsg;
|
|
|
- }
|
|
|
+
|
|
|
+ //核算本次填报的件数是否合法
|
|
|
+ List<Report> allFileProcReportList = reportMapper.selectList(new QueryWrapper<Report>().eq("plan_id", report.getPlanId()).eq("prod_procedure_id", report.getProdProcedureId()));
|
|
|
+ double allFileProcNum = allFileProcReportList.stream().filter(item->!(item.getCreatorId().equals(token) && item.getCreateDate().isEqual(today))).mapToDouble(Report::getFinishNum).sum();
|
|
|
+ if (allFileProcNum + report.getFinishNum() > plan.getNum()) {
|
|
|
+ httpRespMsg.setError("填报的件数超过了剩余可填报件数:"+(plan.getNum() - allFileProcNum)+", 请联系班组长协调解决");
|
|
|
+ return httpRespMsg;
|
|
|
}
|
|
|
- int addProgress = report.getProgress() - lastProgress;
|
|
|
- curReportTime = (prodProcedureTeam.getWorkTime() * (addProgress)/100);
|
|
|
+// double addNum = report.getFinishNum() - lastFinishNum;
|
|
|
+ Integer num = plan.getNum();//总件数
|
|
|
+ double addPercent = report.getFinishNum() / num;
|
|
|
+// curReportTime = (prodProcedureTeam.getWorkTime() * (addProgress)/100);
|
|
|
//按比例获取本次进度的工钱
|
|
|
- BigDecimal earnMoney = prodProcedureTeam.getJobOfMoney().multiply(new BigDecimal(addProgress)).divide(new BigDecimal(100));
|
|
|
+// BigDecimal earnMoney = prodProcedureTeam.getJobOfMoney().multiply(new BigDecimal(addProgress)).divide(new BigDecimal(100));
|
|
|
+ //新版计算报工的工时和价钱;根据填报件数的占比计算工时和价钱
|
|
|
+ double earnMoney = planProcedureTotal.getTotalWages() * addPercent;
|
|
|
+ curReportTime = planProcedureTotal.getTotalWorkingHours() * addPercent;
|
|
|
report.setWorkingTime(curReportTime);//本次报工的工时数
|
|
|
- report.setCost(earnMoney);//本次报工的成本
|
|
|
+ report.setCost(new BigDecimal(earnMoney));//本次报工的成本
|
|
|
report.setDeptId(plan.getStationId());
|
|
|
if (plan.getPlanType() == 0) {
|
|
|
report.setProductId(plan.getProductId());
|
|
|
}
|
|
|
|
|
|
- if (report.getProgress() == 100) {
|
|
|
+ if (report.getIsFinish() != null && report.getIsFinish().booleanValue()) {
|
|
|
//设置质检人
|
|
|
if (report.getCheckType() == 0) {
|
|
|
report.setCheckerId(user.getId());
|
|
@@ -190,10 +181,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
prodProcedureTeam.setCheckerId(report.getCheckerId());
|
|
|
}
|
|
|
prodProcedureTeam.setUpdateTime(LocalDateTime.now());
|
|
|
- prodProcedureTeam.setProgress(report.getProgress());
|
|
|
+// prodProcedureTeam.setProgress(report.getProgress());
|
|
|
//更新填写的钢印号
|
|
|
prodProcedureTeam.setSteelNumArray(report.getSteelNumArray());
|
|
|
- if (report.getProgress() == 100) {
|
|
|
+ if (report.getIsFinish() != null && report.getIsFinish().booleanValue()) {
|
|
|
//完工了
|
|
|
prodProcedureTeam.setStatus(2);//顺利完工
|
|
|
} else if (report.getIsTerminated() != null && report.getIsTerminated().booleanValue()) {
|