|
@@ -1,24 +1,26 @@
|
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.rongwei.bscommon.sys.dao.ApsProcessOperationDao;
|
|
|
import com.rongwei.bscommon.sys.service.*;
|
|
|
-import com.rongwei.bsentity.domain.ApsCraftRouteOutMaterRequestDo;
|
|
|
-import com.rongwei.bsentity.domain.ApsCraftRouteStepDo;
|
|
|
-import com.rongwei.bsentity.domain.ApsProcessOperationDo;
|
|
|
-import com.rongwei.bsentity.domain.ApsProcessOperationOutMaterDo;
|
|
|
+import com.rongwei.bsentity.domain.*;
|
|
|
import com.rongwei.bsentity.vo.PreviousProcessVo;
|
|
|
import com.rongwei.bsentity.vo.ProcessIdRelationVo;
|
|
|
+import com.rongwei.commonservice.service.SysMindMappingService;
|
|
|
import com.rongwei.rwcommon.base.R;
|
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
import com.rongwei.rwcommon.utils.StringUtils;
|
|
|
+import com.rongwei.rwcommonentity.commonservers.domain.SysMindMappingDo;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -50,12 +52,19 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
|
|
|
@Autowired
|
|
|
ApsProcessOperationOutMaterService apsProcessOperationOutMaterService;
|
|
|
+ @Autowired
|
|
|
+ ApsProcessOperationEquService apsProcessOperationEquService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SysMindMappingService sysMindMappingService;
|
|
|
|
|
|
private final static Map<String, String> UNIT_MAP = new HashMap<String, String>() {{
|
|
|
put("kg", "公斤");
|
|
|
put("ton", "吨");
|
|
|
}};
|
|
|
|
|
|
+ DecimalFormat df = new DecimalFormat("0.####");
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 更新工序的待加工批次号信息
|
|
@@ -111,11 +120,28 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
map.put("CRAFTROUTEID", craftrouteid);
|
|
|
List<ApsCraftRouteStepDo> apsCraftRouteStepDoList = apsCraftRouteStepService.listByMap(map).stream().collect(Collectors.toList());
|
|
|
Collections.sort(apsCraftRouteStepDoList, Comparator.comparingInt(ApsCraftRouteStepDo::getLevel));
|
|
|
+ Collections.sort(apsCraftRouteStepDoList, Comparator.comparing(ApsCraftRouteStepDo::getCreatedate));
|
|
|
+
|
|
|
+ //工艺路线对应的思维导图
|
|
|
+ List<SysMindMappingDo> sysMindMappingDos = new ArrayList<>();
|
|
|
+ Map<String, Object> mindMap = new HashMap<>();
|
|
|
+ mindMap.put("BSID", craftrouteid);
|
|
|
+ List<SysMindMappingDo> sysMindMappingDoList = sysMindMappingService.listByMap(mindMap).stream().collect(Collectors.toList());
|
|
|
+ Collections.sort(sysMindMappingDoList, Comparator.comparing(SysMindMappingDo::getTreecode, Comparator.nullsFirst(Comparator.naturalOrder())));
|
|
|
+ Collections.sort(sysMindMappingDoList, Comparator.comparing(SysMindMappingDo::getCreatedate));
|
|
|
+ SysMindMappingDo sysMindMappingDo = BeanUtil.toBean(sysMindMappingDoList.get(0), SysMindMappingDo.class);
|
|
|
+ String mindStrId = SecurityUtil.getUUID();
|
|
|
+ sysMindMappingDo.setId(mindStrId);
|
|
|
+ sysMindMappingDo.setBsid(blanckdata.getStr("ID"));
|
|
|
+ sysMindMappingDo.setBstable("aps_process_operation");
|
|
|
+ sysMindMappingDos.add(sysMindMappingDo);
|
|
|
+
|
|
|
|
|
|
List<String> overRouteStepIds = new ArrayList<>();
|
|
|
List<PreviousProcessVo> newProcessIds = new ArrayList<>();//前道工序信息
|
|
|
List<ApsProcessOperationDo> apsProcessOperationDoList = new ArrayList<>();
|
|
|
List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDoList = new ArrayList<>();
|
|
|
+ List<ApsProcessOperationEquDo> apsProcessOperationEquDoList = new ArrayList<>();
|
|
|
for (ApsCraftRouteStepDo apsCraftRouteStepDo : apsCraftRouteStepDoList) {
|
|
|
if (overRouteStepIds.contains(apsCraftRouteStepDo.getId())) {
|
|
|
continue;
|
|
@@ -136,10 +162,21 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
//前道工序输出
|
|
|
List<PreviousProcessVo> processVo = newProcessIds.stream().filter(pro -> pro.getPreviousstepid().equals(apsCraftRouteStepDo1.getPreviousstepid())).collect(Collectors.toList());
|
|
|
ApsProcessOperationOutMaterDo outMaterDo = processVo.get(0).getApsProcessOperationOutMaterDo();
|
|
|
+
|
|
|
+ //更新前道工序的后道工序
|
|
|
+ ApsProcessOperationDo aDo = apsProcessOperationDoList.stream().filter(qtr -> processVo.get(0).getProcessId().equals(qtr.getId())).findAny().orElse(null);
|
|
|
+ if (StringUtils.isBlank(aDo.getNextprocessid())) {
|
|
|
+ aDo.setNextprocessid(processId);
|
|
|
+ aDo.setNextprocess(apsProcessOperationDo.getProcessname());
|
|
|
+ } else {
|
|
|
+ aDo.setNextprocessid(aDo.getNextprocessid() + "," + processId);
|
|
|
+ aDo.setNextprocess(aDo.getNextprocess() + "," + apsProcessOperationDo.getProcessname());
|
|
|
+ }
|
|
|
+
|
|
|
apsProcessOperationDo.setPreviousprocessid(processVo.get(0).getProcessId());
|
|
|
apsProcessOperationDo.setPreviousprocess(processVo.get(0).getProcessName());
|
|
|
apsProcessOperationDo.setPlaninputid(outMaterDo.getId());
|
|
|
- String meterInput = getMeterInfo(outMaterDo.getProducttype(), outMaterDo.getMetal(), outMaterDo.getMetalstate(), outMaterDo.getThickness(), outMaterDo.getProwidth(), outMaterDo.getProlength());
|
|
|
+ String meterInput = getInMeterInfo(outMaterDo.getProducttype(), outMaterDo.getMetal(), outMaterDo.getMetalstate(), outMaterDo.getThickness(), outMaterDo.getProwidth(), outMaterDo.getProlength());
|
|
|
// apsProcessOperationDo.setPlaninput(meterInput + outMaterDo.getSinglerollweight() + cxAdminFeginClient.getDictNameByValue("MATERIAL_UNIT", outMaterDo.getNumunit()));
|
|
|
apsProcessOperationDo.setPlaninput(meterInput + outMaterDo.getSinglerollweight() + UNIT_MAP.getOrDefault(outMaterDo.getNumunit(), ""));
|
|
|
apsProcessOperationDo.setProducttypeid(outMaterDo.getProducttypeid());
|
|
@@ -151,8 +188,9 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
apsProcessOperationDo.setProlength(outMaterDo.getProlength());
|
|
|
apsProcessOperationDo.setSinglerollweight(outMaterDo.getSinglerollweight());
|
|
|
apsProcessOperationDo.setPlaninrall(outMaterDo.getPlanrollnum() - outMaterDo.getPlanstockrollnum() - outMaterDo.getPlanprodrollnum());
|
|
|
- apsProcessOperationDo.setPlanprocessrall(outMaterDo.getPlanrollnum() - outMaterDo.getPlanstockrollnum() - outMaterDo.getPlanprodrollnum());
|
|
|
+// apsProcessOperationDo.setPlanprocessrall(outMaterDo.getPlanrollnum() - outMaterDo.getPlanstockrollnum() - outMaterDo.getPlanprodrollnum());
|
|
|
apsProcessOperationDo.setBlankid(blanckdata.getStr("ID"));
|
|
|
+ apsProcessOperationDo.setCraftstepid(apsCraftRouteStepDo1.getId());
|
|
|
if (outMaterDo.getThickrule().equals("自定义") || outMaterDo.getWidthrule().equals("自定义") || outMaterDo.getLengthrule().equals("自定义")) {
|
|
|
apsProcessOperationDo.setChangeinmeter("1");//输入物料是否可编辑
|
|
|
}
|
|
@@ -167,32 +205,93 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo = BeanUtil.toBean(apsCraftRouteOutMaterRequestDo.get(0), ApsProcessOperationOutMaterDo.class);
|
|
|
apsProcessOperationOutMaterDo.setId(SecurityUtil.getUUID());
|
|
|
if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getProducttypeid())) {
|
|
|
- apsProcessOperationOutMaterDo.setProducttypeid(blanckdata.getStr("PRODUCTTYPEID"));
|
|
|
+ apsProcessOperationOutMaterDo.setProducttypeid(outMaterDo.getProducttypeid());
|
|
|
}
|
|
|
- if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getProducttype())) {
|
|
|
- apsProcessOperationOutMaterDo.setProducttype(blanckdata.getStr("PRODUCTTYPE"));
|
|
|
+ String outProducttype = apsProcessOperationOutMaterDo.getProducttype();
|
|
|
+ if (StringUtils.isBlank(outProducttype)) {
|
|
|
+ outProducttype = outMaterDo.getProducttype();
|
|
|
+ apsProcessOperationOutMaterDo.setProducttype(outMaterDo.getProducttype());
|
|
|
}
|
|
|
- if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getMetal())) {
|
|
|
- apsProcessOperationOutMaterDo.setMetal(blanckdata.getStr("ALLOY"));
|
|
|
+ String outMeter = apsProcessOperationOutMaterDo.getMetal();
|
|
|
+ if (StringUtils.isBlank(outMeter)) {
|
|
|
+ outMeter = outMaterDo.getMetal();
|
|
|
+ apsProcessOperationOutMaterDo.setMetal(outMaterDo.getMetal());
|
|
|
}
|
|
|
- if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getMetalstate())) {
|
|
|
- apsProcessOperationOutMaterDo.setMetalstate(blanckdata.getStr("ALLOYSTATUS"));
|
|
|
+ String outMetalstate = apsProcessOperationOutMaterDo.getMetalstate();
|
|
|
+ if (StringUtils.isBlank(outMetalstate)) {
|
|
|
+ outMetalstate = outMaterDo.getMetalstate();
|
|
|
+ apsProcessOperationOutMaterDo.setMetalstate(outMaterDo.getMetalstate());
|
|
|
}
|
|
|
- apsProcessOperationOutMaterDo.setThickness(changeSize(outMaterDo.getThickness(), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange()));
|
|
|
- apsProcessOperationOutMaterDo.setProwidth(changeSize(outMaterDo.getProwidth(), apsProcessOperationOutMaterDo.getWidthrule(), apsProcessOperationOutMaterDo.getWidthchange()));
|
|
|
- apsProcessOperationOutMaterDo.setProlength(changeSize(outMaterDo.getProlength(), apsProcessOperationOutMaterDo.getLengthrule(), apsProcessOperationOutMaterDo.getLengthchange()));
|
|
|
+ BigDecimal tval = changeSize(outMaterDo.getThickness(), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange());
|
|
|
+ apsProcessOperationOutMaterDo.setThickness(tval);
|
|
|
+ BigDecimal wval = changeSize(outMaterDo.getProwidth(), apsProcessOperationOutMaterDo.getWidthrule(), apsProcessOperationOutMaterDo.getWidthchange());
|
|
|
+ apsProcessOperationOutMaterDo.setProwidth(wval);
|
|
|
+ BigDecimal lval = changeSize(outMaterDo.getProlength(), apsProcessOperationOutMaterDo.getLengthrule(), apsProcessOperationOutMaterDo.getLengthchange());
|
|
|
+ apsProcessOperationOutMaterDo.setProlength(lval);
|
|
|
apsProcessOperationOutMaterDo.setRipcutnum(1);
|
|
|
apsProcessOperationOutMaterDo.setCrosscutnum(1);
|
|
|
apsProcessOperationOutMaterDo.setOutval(1);
|
|
|
apsProcessOperationOutMaterDo.setPlanrollnum(blanckdata.getInt("ROLLNUM"));
|
|
|
- apsProcessOperationOutMaterDo.setSinglerollweight(blanckdata.getBigDecimal("SINGLEROLLWEIGHT"));
|
|
|
+ //输入物料的输入单卷重*该输出物料的宽度/输入物料的宽度/该输出物料的单卷输出数量
|
|
|
+ String singlerollweight = df.format(outMaterDo.getSinglerollweight().multiply(wval == null ? BigDecimal.valueOf(1) : wval).divide(outMaterDo.getProwidth() == null ? BigDecimal.valueOf(1) : outMaterDo.getProwidth(), 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ apsProcessOperationOutMaterDo.setSinglerollweight(new BigDecimal(singlerollweight));
|
|
|
apsProcessOperationOutMaterDo.setNumunit(blanckdata.getStr("NUMBERUNIT"));
|
|
|
apsProcessOperationOutMaterDo.setPlanstockrollnum(0);
|
|
|
apsProcessOperationOutMaterDo.setPlanprodrollnum(0);
|
|
|
apsProcessOperationOutMaterDo.setMainid(processId);
|
|
|
apsProcessOperationOutMaterDo.setBlankid(blanckdata.getStr("ID"));
|
|
|
+ //输出物料
|
|
|
+ String outputMeter = getOutMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval, apsProcessOperationOutMaterDo.getThickoffset(), apsProcessOperationOutMaterDo.getWidthoffset(), apsProcessOperationOutMaterDo.getLengthoffset()) + singlerollweight + UNIT_MAP.getOrDefault(blanckdata.getStr("NUMBERUNIT"), "") + "*" + blanckdata.getInt("ROLLNUM") + "卷";
|
|
|
+ apsProcessOperationOutMaterDo.setOutputmaterial(outputMeter);
|
|
|
+ apsProcessOperationDo.setPlanoutput("[1]" + outputMeter);
|
|
|
+ //输出成品 没有后道工序作业,则自动填入=“{输出物料的输入物料描述} * {计划成品卷数}卷”
|
|
|
+ String outputfinishproduct = "";
|
|
|
+ if (StringUtils.isBlank(apsCraftRouteStepDo1.getNextstepid())) {
|
|
|
+ outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + "*" + blanckdata.getInt("ROLLNUM") + "卷";
|
|
|
+ }
|
|
|
+ apsProcessOperationOutMaterDo.setOutputfinishproduct(outputfinishproduct);
|
|
|
previousProcessVo.setApsProcessOperationOutMaterDo(apsProcessOperationOutMaterDo);
|
|
|
|
|
|
+
|
|
|
+ //本道工序的可选设备
|
|
|
+ List<ApsCraftRouteStepEquDo> apsCraftRouteStepEquDos = apsCraftRouteStepEquService.listByMap(map).stream().collect(Collectors.toList());
|
|
|
+ List<String> equIdList = new ArrayList<>();//设备
|
|
|
+ List<String> equGroupIdList = new ArrayList<>();//资源组
|
|
|
+ for (ApsCraftRouteStepEquDo apsCraftRouteStepEquDo : apsCraftRouteStepEquDos) {
|
|
|
+ ApsProcessOperationEquDo apsProcessOperationEquDo;
|
|
|
+ apsProcessOperationEquDo = BeanUtil.toBean(apsCraftRouteStepEquDo, ApsProcessOperationEquDo.class);
|
|
|
+ apsProcessOperationEquDo.setId(SecurityUtil.getUUID());
|
|
|
+ apsProcessOperationEquDo.setBlankid(blanckdata.getStr("ID"));
|
|
|
+ apsProcessOperationEquDo.setMainid(processId);
|
|
|
+ if (apsProcessOperationEquDo.getResourcetype().equals("资源组")) {
|
|
|
+ if (!equGroupIdList.contains(apsProcessOperationEquDo.getResourceid())) {
|
|
|
+ equGroupIdList.add(apsProcessOperationEquDo.getResourceid());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!equIdList.contains(apsProcessOperationEquDo.getResourceid())) {
|
|
|
+ equIdList.add(apsProcessOperationEquDo.getResourceid());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ apsProcessOperationEquDoList.add(apsProcessOperationEquDo);
|
|
|
+ }
|
|
|
+ //可选设备IDS
|
|
|
+ if (equIdList.size() > 0 || equGroupIdList.size() > 0) {
|
|
|
+ apsProcessOperationDo.setCanchoosedeviceid(getChooseequids(equIdList, equGroupIdList));
|
|
|
+ }
|
|
|
+
|
|
|
+ //本道工序思维导图
|
|
|
+ List<SysMindMappingDo> sysMindMappingDoList1 = sysMindMappingDoList.stream().filter(mind -> mind.getId().equals(apsCraftRouteStepDo1.getId())).collect(Collectors.toList());
|
|
|
+ SysMindMappingDo sysMindMappingDo1 = BeanUtil.toBean(sysMindMappingDoList1.get(0), SysMindMappingDo.class);
|
|
|
+ sysMindMappingDo1.setId(processId);
|
|
|
+ sysMindMappingDo1.setParentid(processVo.get(0).getProcessId());
|
|
|
+ sysMindMappingDo1.setBsid(blanckdata.getStr("ID"));
|
|
|
+ sysMindMappingDo1.setBstable("aps_process_operation");
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.putOpt("craftStepId", apsCraftRouteStepDo1.getId());
|
|
|
+ sysMindMappingDo1.setRoption(jsonObject.toString());//存工艺路线的工艺步骤ID
|
|
|
+ sysMindMappingDos.add(sysMindMappingDo1);
|
|
|
+
|
|
|
newProcessIds.add(previousProcessVo);
|
|
|
apsProcessOperationDoList.add(apsProcessOperationDo);
|
|
|
apsProcessOperationOutMaterDoList.add(apsProcessOperationOutMaterDo);
|
|
@@ -203,7 +302,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
previousProcessVo = new PreviousProcessVo();
|
|
|
//首道工序
|
|
|
processId = SecurityUtil.getUUID();
|
|
|
- String meterInput = getMeterInfo(blanckdata.getStr("PRODUCTTYPE"), blanckdata.getStr("ALLOY"), blanckdata.getStr("ALLOYSTATUS"), blanckdata.getBigDecimal("THICKNESS"), blanckdata.getBigDecimal("PROWIDTH"), blanckdata.getBigDecimal("PROLENGTH"));
|
|
|
+ String meterInput = getInMeterInfo(blanckdata.getStr("PRODUCTTYPE"), blanckdata.getStr("ALLOY"), blanckdata.getStr("ALLOYSTATUS"), blanckdata.getBigDecimal("THICKNESS"), blanckdata.getBigDecimal("PROWIDTH"), blanckdata.getBigDecimal("PROLENGTH"));
|
|
|
apsProcessOperationDo = BeanUtil.toBean(apsCraftRouteStepDo, ApsProcessOperationDo.class);
|
|
|
apsProcessOperationDo.setId(processId);
|
|
|
apsProcessOperationDo.setPlaninput(meterInput + blanckdata.getStr("SINGLEROLLWEIGHT") + UNIT_MAP.getOrDefault(blanckdata.getStr("NUMBERUNIT"), ""));
|
|
@@ -218,11 +317,13 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
apsProcessOperationDo.setPlaninrall(blanckdata.getInt("ROLLNUM"));
|
|
|
apsProcessOperationDo.setPlanprocessrall(blanckdata.getInt("ROLLNUM"));
|
|
|
apsProcessOperationDo.setBlankid(blanckdata.getStr("ID"));
|
|
|
+ apsProcessOperationDo.setCraftstepid(apsCraftRouteStepDo.getId());
|
|
|
|
|
|
//本道工序信息
|
|
|
previousProcessVo.setProcessId(processId);
|
|
|
previousProcessVo.setProcessName(apsProcessOperationDo.getProcessname());
|
|
|
previousProcessVo.setPreviousstepid(apsCraftRouteStepDo.getId());
|
|
|
+
|
|
|
//本道工序的输出
|
|
|
map.put("CRAFTSTEPID", apsCraftRouteStepDo.getId());
|
|
|
List<ApsCraftRouteOutMaterRequestDo> apsCraftRouteOutMaterRequestDo = apsCraftRouteOutMaterRequestService.listByMap(map).stream().collect(Collectors.toList());
|
|
@@ -231,30 +332,91 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getProducttypeid())) {
|
|
|
apsProcessOperationOutMaterDo.setProducttypeid(blanckdata.getStr("PRODUCTTYPEID"));
|
|
|
}
|
|
|
- if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getProducttype())) {
|
|
|
+ String outProducttype = apsProcessOperationOutMaterDo.getProducttype();
|
|
|
+ if (StringUtils.isBlank(outProducttype)) {
|
|
|
+ outProducttype = blanckdata.getStr("PRODUCTTYPE");
|
|
|
apsProcessOperationOutMaterDo.setProducttype(blanckdata.getStr("PRODUCTTYPE"));
|
|
|
}
|
|
|
- if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getMetal())) {
|
|
|
+ String outMeter = apsProcessOperationOutMaterDo.getMetal();
|
|
|
+ if (StringUtils.isBlank(outMeter)) {
|
|
|
+ outMeter = blanckdata.getStr("ALLOY");
|
|
|
apsProcessOperationOutMaterDo.setMetal(blanckdata.getStr("ALLOY"));
|
|
|
}
|
|
|
- if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getMetalstate())) {
|
|
|
+ String outMetalstate = apsProcessOperationOutMaterDo.getMetalstate();
|
|
|
+ if (StringUtils.isBlank(outMetalstate)) {
|
|
|
+ outMetalstate = blanckdata.getStr("ALLOYSTATUS");
|
|
|
apsProcessOperationOutMaterDo.setMetalstate(blanckdata.getStr("ALLOYSTATUS"));
|
|
|
}
|
|
|
- apsProcessOperationOutMaterDo.setThickness(changeSize(blanckdata.getBigDecimal("THICKNESS"), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange()));
|
|
|
- apsProcessOperationOutMaterDo.setProwidth(changeSize(blanckdata.getBigDecimal("PROWIDTH"), apsProcessOperationOutMaterDo.getWidthrule(), apsProcessOperationOutMaterDo.getWidthchange()));
|
|
|
- apsProcessOperationOutMaterDo.setProlength(changeSize(blanckdata.getBigDecimal("PROLENGTH"), apsProcessOperationOutMaterDo.getLengthrule(), apsProcessOperationOutMaterDo.getLengthchange()));
|
|
|
+ BigDecimal tval = changeSize(blanckdata.getBigDecimal("THICKNESS"), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange());
|
|
|
+ apsProcessOperationOutMaterDo.setThickness(tval);
|
|
|
+ BigDecimal wval = changeSize(blanckdata.getBigDecimal("PROWIDTH"), apsProcessOperationOutMaterDo.getWidthrule(), apsProcessOperationOutMaterDo.getWidthchange());
|
|
|
+ apsProcessOperationOutMaterDo.setProwidth(wval);
|
|
|
+ BigDecimal lval = changeSize(blanckdata.getBigDecimal("PROLENGTH"), apsProcessOperationOutMaterDo.getLengthrule(), apsProcessOperationOutMaterDo.getLengthchange());
|
|
|
+ apsProcessOperationOutMaterDo.setProlength(lval);
|
|
|
apsProcessOperationOutMaterDo.setRipcutnum(1);
|
|
|
apsProcessOperationOutMaterDo.setCrosscutnum(1);
|
|
|
apsProcessOperationOutMaterDo.setOutval(1);
|
|
|
apsProcessOperationOutMaterDo.setPlanrollnum(blanckdata.getInt("ROLLNUM"));
|
|
|
- apsProcessOperationOutMaterDo.setSinglerollweight(blanckdata.getBigDecimal("SINGLEROLLWEIGHT"));
|
|
|
+ //输入物料的输入单卷重*该输出物料的宽度/输入物料的宽度/该输出物料的单卷输出数量
|
|
|
+ String singlerollweight = df.format(blanckdata.getBigDecimal("SINGLEROLLWEIGHT").multiply(wval == null ? BigDecimal.valueOf(1) : wval).divide(blanckdata.getBigDecimal("PROWIDTH") == null ? BigDecimal.valueOf(1) : blanckdata.getBigDecimal("PROWIDTH"), 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ apsProcessOperationOutMaterDo.setSinglerollweight(new BigDecimal(singlerollweight));
|
|
|
apsProcessOperationOutMaterDo.setNumunit(blanckdata.getStr("NUMBERUNIT"));
|
|
|
apsProcessOperationOutMaterDo.setPlanstockrollnum(0);
|
|
|
apsProcessOperationOutMaterDo.setPlanprodrollnum(0);
|
|
|
apsProcessOperationOutMaterDo.setMainid(processId);
|
|
|
apsProcessOperationOutMaterDo.setBlankid(blanckdata.getStr("ID"));
|
|
|
+ //输出物料
|
|
|
+ String outputMeter = getOutMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval, apsProcessOperationOutMaterDo.getThickoffset(), apsProcessOperationOutMaterDo.getWidthoffset(), apsProcessOperationOutMaterDo.getLengthoffset()) + singlerollweight + UNIT_MAP.getOrDefault(blanckdata.getStr("NUMBERUNIT"), "") + "*" + blanckdata.getInt("ROLLNUM") + "卷";
|
|
|
+ apsProcessOperationOutMaterDo.setOutputmaterial(outputMeter);
|
|
|
+ apsProcessOperationDo.setPlanoutput("[1]" + outputMeter);
|
|
|
+ //输出成品 没有后道工序作业,则自动填入=“{输出物料的输入物料描述} * {计划成品卷数}卷”
|
|
|
+ String outputfinishproduct = "";
|
|
|
+ if (StringUtils.isBlank(apsCraftRouteStepDo.getNextstepid())) {
|
|
|
+ outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + "*" + blanckdata.getInt("ROLLNUM") + "卷";
|
|
|
+ }
|
|
|
+ apsProcessOperationOutMaterDo.setOutputfinishproduct(outputfinishproduct);
|
|
|
+
|
|
|
previousProcessVo.setApsProcessOperationOutMaterDo(apsProcessOperationOutMaterDo);
|
|
|
|
|
|
+ //本道工序的可选设备
|
|
|
+ List<ApsCraftRouteStepEquDo> apsCraftRouteStepEquDos = apsCraftRouteStepEquService.listByMap(map).stream().collect(Collectors.toList());
|
|
|
+ List<String> equIdList = new ArrayList<>();//设备
|
|
|
+ List<String> equGroupIdList = new ArrayList<>();//资源组
|
|
|
+ for (ApsCraftRouteStepEquDo apsCraftRouteStepEquDo : apsCraftRouteStepEquDos) {
|
|
|
+ ApsProcessOperationEquDo apsProcessOperationEquDo;
|
|
|
+ apsProcessOperationEquDo = BeanUtil.toBean(apsCraftRouteStepEquDo, ApsProcessOperationEquDo.class);
|
|
|
+ apsProcessOperationEquDo.setId(SecurityUtil.getUUID());
|
|
|
+ apsProcessOperationEquDo.setBlankid(blanckdata.getStr("ID"));
|
|
|
+ apsProcessOperationEquDo.setMainid(processId);
|
|
|
+ if (apsProcessOperationEquDo.getResourcetype().equals("资源组")) {
|
|
|
+ if (!equGroupIdList.contains(apsProcessOperationEquDo.getResourceid())) {
|
|
|
+ equGroupIdList.add(apsProcessOperationEquDo.getResourceid());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!equIdList.contains(apsProcessOperationEquDo.getResourceid())) {
|
|
|
+ equIdList.add(apsProcessOperationEquDo.getResourceid());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ apsProcessOperationEquDoList.add(apsProcessOperationEquDo);
|
|
|
+ }
|
|
|
+ //可选设备IDS
|
|
|
+ if (equIdList.size() > 0 || equGroupIdList.size() > 0) {
|
|
|
+ apsProcessOperationDo.setCanchoosedeviceid(getChooseequids(equIdList, equGroupIdList));
|
|
|
+ }
|
|
|
+
|
|
|
+ //本道工序思维导图
|
|
|
+ List<SysMindMappingDo> sysMindMappingDoList1 = sysMindMappingDoList.stream().filter(mind -> mind.getId().equals(apsCraftRouteStepDo.getId())).collect(Collectors.toList());
|
|
|
+ SysMindMappingDo sysMindMappingDo1 = BeanUtil.toBean(sysMindMappingDoList1.get(0), SysMindMappingDo.class);
|
|
|
+ sysMindMappingDo1.setId(processId);
|
|
|
+ sysMindMappingDo1.setParentid(mindStrId);
|
|
|
+ sysMindMappingDo1.setBsid(blanckdata.getStr("ID"));
|
|
|
+ sysMindMappingDo1.setBstable("aps_process_operation");
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.putOpt("craftStepId", apsCraftRouteStepDo.getId());
|
|
|
+ sysMindMappingDo1.setRoption(jsonObject.toString());//存工艺路线的工艺步骤ID
|
|
|
+ sysMindMappingDos.add(sysMindMappingDo1);
|
|
|
+
|
|
|
newProcessIds.add(previousProcessVo);
|
|
|
apsProcessOperationDoList.add(apsProcessOperationDo);
|
|
|
apsProcessOperationOutMaterDoList.add(apsProcessOperationOutMaterDo);
|
|
@@ -262,10 +424,17 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// return R.ok();
|
|
|
+
|
|
|
boolean bool1 = apsProcessOperationService.saveOrUpdateBatch(apsProcessOperationDoList);
|
|
|
boolean bool2 = apsProcessOperationOutMaterService.saveOrUpdateBatch(apsProcessOperationOutMaterDoList);
|
|
|
+ boolean bool3 = true;
|
|
|
+ if (apsProcessOperationEquDoList.size() > 0) {
|
|
|
+ bool3 = apsProcessOperationEquService.saveOrUpdateBatch(apsProcessOperationEquDoList);
|
|
|
+ }
|
|
|
+ boolean bool4 = sysMindMappingService.saveOrUpdateBatch(sysMindMappingDos);
|
|
|
|
|
|
- if (bool1 && bool2) {
|
|
|
+ if (bool1 && bool2 && bool3 && bool4) {
|
|
|
// r.setCode("200");
|
|
|
// r.putData(apsCraftRouteStepDoList);
|
|
|
return R.ok();
|
|
@@ -289,10 +458,72 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
apsProcessOperationDao.updateProcessOperation(blankid);
|
|
|
//工序作业输出物料
|
|
|
apsProcessOperationDao.updateProcessOperationOutMeter(blankid);
|
|
|
+ //工序作业可选设备
|
|
|
+ apsProcessOperationDao.updateProcessOperationOEqu(blankid);
|
|
|
+ //工序作业思维导图
|
|
|
+ apsProcessOperationDao.updateSysMindMapping(blankid);
|
|
|
}
|
|
|
|
|
|
- //工艺步骤管理/物料输出规则
|
|
|
- private String getMeterInfo(String producttype, String metal, String metalstate, BigDecimal thickness, BigDecimal prowidth, BigDecimal prolength) {
|
|
|
+ @Override
|
|
|
+ public R checkOperation(Map<String, Object> params) {
|
|
|
+ String blankId;
|
|
|
+ try {
|
|
|
+ blankId = params.get("BLANKID").toString();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return R.error("请输入正确的坯料计划ID");
|
|
|
+ }
|
|
|
+ //查询坯料计划对应的工序作业
|
|
|
+ List<ApsProcessOperationDo> apsProcessOperationList = this.baseMapper.selectList(new QueryWrapper<ApsProcessOperationDo>().lambda().eq(ApsProcessOperationDo::getBlankid, blankId));
|
|
|
+ //查询坯料计划对应的输出物料
|
|
|
+ List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterList = apsProcessOperationOutMaterService.getBaseMapper().selectList(new QueryWrapper<ApsProcessOperationOutMaterDo>().lambda().eq(ApsProcessOperationOutMaterDo::getBlankid, blankId));
|
|
|
+
|
|
|
+ //如果有前道工序作业,并且该工序输入物料ID不是前道工序作业的输出物料ID,错误提示:{工序}{工序显示名}的输入物料不存在,请重新选择
|
|
|
+
|
|
|
+ //遍历工序作业
|
|
|
+ for (ApsProcessOperationDo apsProcessOperationDo : apsProcessOperationList) {
|
|
|
+ //如果有前道工序
|
|
|
+ if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getPreviousprocessid())) {
|
|
|
+ //获取当前工序的输入物料ID
|
|
|
+ String planInputId = apsProcessOperationDo.getPlaninputid();
|
|
|
+
|
|
|
+ //获取前道工序的输出物料的ID list
|
|
|
+ List<String> previousProcessOutMaterialIdList = apsProcessOperationOutMaterList.stream().filter(item -> item.getMainid().equals(apsProcessOperationDo.getPreviousprocessid())).map(ApsProcessOperationOutMaterDo::getId).collect(Collectors.toList());
|
|
|
+ //该工序输入物料ID不是前道工序作业的输出物料ID
|
|
|
+ if (!previousProcessOutMaterialIdList.contains(planInputId)) {
|
|
|
+ return R.error(apsProcessOperationDo.getProcess() + apsProcessOperationDo.getProcessname() + "的输入物料不存在,请重新选择");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //检查该工序作业所有输出物料,如果(计划输出卷数-计划备料卷数-计划成品卷数)不等于所有后道工序作业计划加工卷数合计;错误提示:{工序}{工序显示名}的{输出物料} 计划输出卷数-计划备料卷数-计划成品卷数必须等于所有后道工序作业计划加工卷数合计
|
|
|
+ //遍历输出物料
|
|
|
+ for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : apsProcessOperationOutMaterList) {
|
|
|
+ //查询使用此输出物料的工序作业
|
|
|
+ List<ApsProcessOperationDo> processList = apsProcessOperationList.stream().filter(item -> ObjectUtil.isNotEmpty(item.getPlaninputid()) && item.getPlaninputid().equals(apsProcessOperationOutMaterDo.getId())).collect(Collectors.toList());
|
|
|
+ if (processList.size() > 0) {
|
|
|
+ //遍历工序作业,计算 计划加工卷数合计
|
|
|
+ int planProcessRollAll = 0;
|
|
|
+ for (ApsProcessOperationDo apsProcessOperationDo : processList) {
|
|
|
+ planProcessRollAll += apsProcessOperationDo.getPlanprocessrall();
|
|
|
+ }
|
|
|
+ //计算输出物料的 (计划输出卷数-计划备料卷数-计划成品卷数)值
|
|
|
+ int outputRollAll = apsProcessOperationOutMaterDo.getPlanrollnum() - apsProcessOperationOutMaterDo.getPlanstockrollnum() - apsProcessOperationOutMaterDo.getPlanprodrollnum();
|
|
|
+ if (planProcessRollAll != outputRollAll) {
|
|
|
+ //根据输出物料查询其工序信息
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationList.stream().filter(item -> item.getId().equals(apsProcessOperationOutMaterDo.getMainid())).findFirst().get();
|
|
|
+ return R.error(apsProcessOperationDo.getProcess() + apsProcessOperationDo.getProcessname() + "的" + apsProcessOperationOutMaterDo.getOutputmaterial() + " 计划输出卷数-计划备料卷数-计划成品卷数必须等于所有后道工序作业计划加工卷数合计");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.ok();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 工艺步骤管理/输入物料描述
|
|
|
+ */
|
|
|
+ private String getInMeterInfo(String producttype, String metal, String metalstate, BigDecimal thickness, BigDecimal prowidth, BigDecimal prolength) {
|
|
|
String res = "";
|
|
|
StringBuilder resStr = new StringBuilder();
|
|
|
StringBuilder resSizeStr = new StringBuilder();
|
|
@@ -306,13 +537,13 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
resStr.append(producttype);
|
|
|
}
|
|
|
if (thickness != null) {
|
|
|
- resSizeStr.append("厚" + thickness + "*");
|
|
|
+ resSizeStr.append("厚" + df.format(thickness) + "*");
|
|
|
}
|
|
|
if (prowidth != null) {
|
|
|
- resSizeStr.append("宽" + prowidth + "*");
|
|
|
+ resSizeStr.append("宽" + df.format(prowidth) + "*");
|
|
|
}
|
|
|
if (prolength != null) {
|
|
|
- resSizeStr.append("长" + prolength + "*");
|
|
|
+ resSizeStr.append("长" + df.format(prolength) + "*");
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isBlank(resSizeStr.toString())) {
|
|
@@ -321,10 +552,47 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
res = (StringUtils.isBlank(resStr.toString()) ? "" : (resStr.toString() + " ")) + resSizeStr.toString().substring(0, resSizeStr.toString().length() - 1) + "mm";
|
|
|
}
|
|
|
|
|
|
- return res;
|
|
|
+ return res + " ";
|
|
|
}
|
|
|
|
|
|
- //长宽高的计算规则
|
|
|
+ /*
|
|
|
+ 工艺步骤管理/输出物料描述
|
|
|
+ */
|
|
|
+ private String getOutMeterInfo(String producttype, String metal, String metalstate, BigDecimal thickness, BigDecimal prowidth, BigDecimal prolength, String thickoffset, String widthoffset, String lengthoffset) {
|
|
|
+ String res = "";
|
|
|
+ StringBuilder resStr = new StringBuilder();
|
|
|
+ StringBuilder resSizeStr = new StringBuilder();
|
|
|
+ if (StringUtils.isNotBlank(metal)) {
|
|
|
+ resStr.append(metal);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(metalstate)) {
|
|
|
+ resStr.append(metalstate);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(producttype)) {
|
|
|
+ resStr.append(producttype);
|
|
|
+ }
|
|
|
+ if (thickness != null) {
|
|
|
+ resSizeStr.append("厚" + df.format(thickness) + (thickoffset == null ? "" : thickoffset) + "*");
|
|
|
+ }
|
|
|
+ if (prowidth != null) {
|
|
|
+ resSizeStr.append("宽" + df.format(prowidth) + (widthoffset == null ? "" : widthoffset) + "*");
|
|
|
+ }
|
|
|
+ if (prolength != null) {
|
|
|
+ resSizeStr.append("长" + df.format(prolength) + (lengthoffset == null ? "" : lengthoffset) + "*");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isBlank(resSizeStr.toString())) {
|
|
|
+ res = resStr.toString();
|
|
|
+ } else {
|
|
|
+ res = (StringUtils.isBlank(resStr.toString()) ? "" : (resStr.toString() + " ")) + resSizeStr.toString().substring(0, resSizeStr.toString().length() - 1) + "mm";
|
|
|
+ }
|
|
|
+
|
|
|
+ return res + " ";
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 长宽高的计算规则
|
|
|
+ */
|
|
|
private BigDecimal changeSize(BigDecimal oldVal, String countRule, BigDecimal changeVal) {
|
|
|
BigDecimal newVal = null;
|
|
|
if (!countRule.equals("自定义") && oldVal != null) {
|
|
@@ -340,4 +608,26 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
|
|
|
}
|
|
|
return newVal;
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ 获取可选设备IDS
|
|
|
+ */
|
|
|
+ private String getChooseequids(List<String> equIds, List<String> equGroupIds) {
|
|
|
+ //资源组下所有的设备IDS
|
|
|
+ if (equGroupIds.size() > 0) {
|
|
|
+ List<Map<String, Object>> equGroupIdList = apsProcessOperationDao.getEquGroupIds();
|
|
|
+ for (String groupid : equGroupIds) {
|
|
|
+ List<Map<String, Object>> equGroupIds1 = equGroupIdList.stream().filter(equgroup -> equgroup.get("MAINID").toString().equals(groupid)).collect(Collectors.toList());
|
|
|
+ if (equGroupIds1.size() > 0) {
|
|
|
+ String equIdStr = equGroupIds1.get(0).get("EQUIDS").toString();
|
|
|
+ for (String equid : Arrays.asList(equIdStr.split(","))) {
|
|
|
+ if (!equIds.contains(equid)) {
|
|
|
+ equIds.add(equid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return String.join(",", equIds);
|
|
|
+ }
|
|
|
}
|