|
@@ -36,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.validation.constraints.NotNull;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -1406,6 +1407,59 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
|
|
|
return R.ok(res);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R checkMergeProcess2(ApsReportRecordsDo req) {
|
|
|
+ //作业明细的ID
|
|
|
+ String processequid = req.getProcessequid();
|
|
|
+ //当前报工的作业明细的详情
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processequid);
|
|
|
+ //当前报工的作业详情
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
|
|
|
+ //是否需要软提示
|
|
|
+ boolean needWarning = false;
|
|
|
+ //软提示信息
|
|
|
+ String warningMessage = "";
|
|
|
+ //•如果报工记录的报工时间<=开工时间,则错误提示:报工时间必须大于开工时间
|
|
|
+ Date startworktime = req.getStartworktime();
|
|
|
+ Date reportworktime = req.getReportworktime();
|
|
|
+ if (ObjectUtil.isEmpty(startworktime)) {
|
|
|
+ return R.error("开工时间不能为空");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(reportworktime)) {
|
|
|
+ return R.error("报工时间不能为空");
|
|
|
+ }
|
|
|
+ if (reportworktime.compareTo(startworktime) <= 0) {
|
|
|
+ return R.error("报工时间必须大于开工时间");
|
|
|
+ }
|
|
|
+ //•如果(报工记录的报工时间-开工时间)/(计划完工时间-计划开工时间)大于1.5或小于0.5,则添加警告确认信息:实际加工时长与计划加工时长相差超出50%
|
|
|
+ Date planstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
|
|
|
+ Date planenddate = apsProcessOperationProcessEquDo.getPlanenddate();
|
|
|
+ long planSub = DateUtil.between(planstartdate, planenddate, DateUnit.SECOND);
|
|
|
+ long workSub = DateUtil.between(startworktime, reportworktime, DateUnit.SECOND);
|
|
|
+ BigDecimal divide = new BigDecimal(workSub).divide(new BigDecimal(planSub), 2, RoundingMode.HALF_UP);
|
|
|
+ if (divide.compareTo(new BigDecimal("1.5")) > 0
|
|
|
+ || divide.compareTo(new BigDecimal("0.5")) < 0) {
|
|
|
+ needWarning = true;
|
|
|
+ warningMessage += "<b>实际加工时长与计划加工时长相差超出50%;</b><br>";
|
|
|
+ }
|
|
|
+
|
|
|
+ //该作业的加工方式是合并加工,
|
|
|
+ if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
|
|
|
+ // 并且有其他未开工的计划开工时间=该报工作业明细原计划开工时间的作业明细
|
|
|
+ List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectOtherMergeProcessEqu(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getOldplanstartdate());
|
|
|
+ if (!list.isEmpty()) {
|
|
|
+ needWarning = true;
|
|
|
+ warningMessage += "<b>该合并作业" + apsProcessOperationDo.getProcess() + "还有其他作业没有一起开工;</b><br>";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ CheckMergeProcessResopnse res = new CheckMergeProcessResopnse();
|
|
|
+ res.setNeedWarning(needWarning);
|
|
|
+ res.setWarningMessage(warningMessage);
|
|
|
+ return R.ok(res);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public R smallRollStartReport(SmallRollStartReportReq req) {
|
|
@@ -1843,6 +1897,29 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R haveEarlyStartWorkTime(ApsReportRecordsDo req) {
|
|
|
+ if (ObjectUtil.isEmpty(req.getId())){
|
|
|
+ return R.error("报工记录ID不可为空");
|
|
|
+ }
|
|
|
+ ApsReportRecordsDo apsReportRecordsDo = this.getById(req.getId());
|
|
|
+ String processequid = apsReportRecordsDo.getProcessequid();
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processequid);
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
|
|
|
+ String res = "";
|
|
|
+
|
|
|
+ //如果该作业的加工方式是合并加工,并且其他同炉次的作业已报工,则
|
|
|
+ //报工记录的开工时间=其他同炉次的作业的最早开工时间
|
|
|
+ //设置报工记录的开工时间不可编辑
|
|
|
+ if (apsProcessOperationDo.getProcessway().equals("合并加工")){
|
|
|
+ String earlyTime = this.baseMapper.selectEarlyMergeByHeat(processequid,apsProcessOperationProcessEquDo.getProcessdeviceid(),apsReportRecordsDo.getHeatnumber());
|
|
|
+ if (ObjectUtil.isNotEmpty(earlyTime)){
|
|
|
+ res = earlyTime;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.ok(res);
|
|
|
+ }
|
|
|
+
|
|
|
private int sortAsc(List<String> parts1, List<String> parts2) {
|
|
|
int length1 = parts1.size();
|
|
|
int length2 = parts2.size();
|