|
@@ -1,5 +1,6 @@
|
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
@@ -8,12 +9,19 @@ import com.rongwei.bscommon.sys.service.*;
|
|
|
import com.rongwei.bsentity.domain.*;
|
|
|
|
|
|
import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
|
|
|
+import com.rongwei.bsentity.vo.InsertMyReportOutputReq;
|
|
|
+import com.rongwei.bsentity.vo.OrganizationCodeAndDeviceCodeVo;
|
|
|
+import com.rongwei.bsentity.vo.StartRePortReq;
|
|
|
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
import com.rongwei.rwcommon.base.R;
|
|
|
+import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
+import com.rongwei.safecommon.utils.CXCommonUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -23,7 +31,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Service
|
|
|
public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao, ApsReportRecordsDo>
|
|
|
-implements ApsReportRecordsService {
|
|
|
+ implements ApsReportRecordsService {
|
|
|
@Autowired
|
|
|
private ApsReportOutputService apsReportOutputService;
|
|
|
@Autowired
|
|
@@ -40,6 +48,18 @@ implements ApsReportRecordsService {
|
|
|
private ApsProcessOperationDao apsProcessOperationDao;
|
|
|
@Autowired
|
|
|
private ApsProcessOperationService apsProcessOperationService;
|
|
|
+ @Autowired
|
|
|
+ private ApsProductionOrderService apsProductionOrderService;
|
|
|
+ @Autowired
|
|
|
+ private ApsBlankOrderService apsBlankOrderService;
|
|
|
+ @Autowired
|
|
|
+ private ApsProcessOperationOutMaterService apsProcessOperationOutMaterService;
|
|
|
+ @Autowired
|
|
|
+ private ApsAlloyService apsAlloyService;
|
|
|
+ @Autowired
|
|
|
+ private ApsAlloyCompositionService apsAlloyCompositionService;
|
|
|
+ @Autowired
|
|
|
+ private ApsReportBlankCompentService apsReportBlankCompentService;
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -53,23 +73,23 @@ implements ApsReportRecordsService {
|
|
|
}
|
|
|
//查询报工详情
|
|
|
ApsReportRecordsDo recordsDo = this.getById(recordId);
|
|
|
- if(ObjectUtil.isEmpty(recordsDo)){
|
|
|
+ if (ObjectUtil.isEmpty(recordsDo)) {
|
|
|
return R.error("报工记录未找到");
|
|
|
}
|
|
|
//删除报工记录
|
|
|
this.removeById(recordId);
|
|
|
//删除报工输出物料
|
|
|
- apsReportOutputService.remove(new QueryWrapper<ApsReportOutputDo>().lambda().eq(ApsReportOutputDo::getMainid,recordId));
|
|
|
+ apsReportOutputService.remove(new QueryWrapper<ApsReportOutputDo>().lambda().eq(ApsReportOutputDo::getMainid, recordId));
|
|
|
//删除报工加工参数
|
|
|
- apsReportMachiningService.remove(new QueryWrapper<ApsReportMachiningDo>().lambda().eq(ApsReportMachiningDo::getMainid,recordId));
|
|
|
+ apsReportMachiningService.remove(new QueryWrapper<ApsReportMachiningDo>().lambda().eq(ApsReportMachiningDo::getMainid, recordId));
|
|
|
//删除报工检查项
|
|
|
- apsReportCheckoutService.remove(new QueryWrapper<ApsReportCheckoutDo>().lambda().eq(ApsReportCheckoutDo::getMainid,recordId));
|
|
|
+ apsReportCheckoutService.remove(new QueryWrapper<ApsReportCheckoutDo>().lambda().eq(ApsReportCheckoutDo::getMainid, recordId));
|
|
|
|
|
|
//更新输入物料在制品:如果输入物料有批次号,并且在制品库存中有输入物料批次号的在制品,则更新该在制品的在制品状态=待加工
|
|
|
- if(ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())){
|
|
|
+ if (ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())) {
|
|
|
ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo = new ApsWorkInProgressInventoryDo();
|
|
|
apsWorkInProgressInventoryDo.setWorkinprocessstatus("待加工");
|
|
|
- apsWorkInProgressInventoryService.update(apsWorkInProgressInventoryDo,new QueryWrapper<ApsWorkInProgressInventoryDo>().lambda().eq(ApsWorkInProgressInventoryDo::getBatchnumber,recordsDo.getBatchnumber()));
|
|
|
+ apsWorkInProgressInventoryService.update(apsWorkInProgressInventoryDo, new QueryWrapper<ApsWorkInProgressInventoryDo>().lambda().eq(ApsWorkInProgressInventoryDo::getBatchnumber, recordsDo.getBatchnumber()));
|
|
|
}
|
|
|
|
|
|
//更新工序作业和作业明细
|
|
@@ -100,14 +120,14 @@ implements ApsReportRecordsService {
|
|
|
*/
|
|
|
ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = new ApsProcessOperationProcessEquDo();
|
|
|
apsProcessOperationProcessEquDo.setId(equDo.getId());
|
|
|
- if(equDo.getStartingroll() == 0){
|
|
|
+ if (equDo.getStartingroll() == 0) {
|
|
|
apsProcessOperationProcessEquDo.setWorkstatus("待开工");
|
|
|
apsProcessOperationProcessEquDo.setActualstartdate(null);
|
|
|
}
|
|
|
- if(equDo.getStartingroll() > 0 && equDo.getClosestatus().equals("未完工")){
|
|
|
+ if (equDo.getStartingroll() > 0 && equDo.getClosestatus().equals("未完工")) {
|
|
|
apsProcessOperationProcessEquDo.setWorkstatus("加工中");
|
|
|
}
|
|
|
- if(ObjectUtil.isNotEmpty(equDo.getUnfinishroll()) && equDo.getUnfinishroll() == 0){
|
|
|
+ if (ObjectUtil.isNotEmpty(equDo.getUnfinishroll()) && equDo.getUnfinishroll() == 0) {
|
|
|
apsProcessOperationProcessEquDo.setWorkstatus("已完工");
|
|
|
}
|
|
|
|
|
@@ -116,20 +136,20 @@ implements ApsReportRecordsService {
|
|
|
* 如果该工序作业没有前道工序作业,则该工序作业所有作业明细的待加工料卷批次号加上“{批次号},”
|
|
|
* 如果该工序作业有前道工序作业,则输入物料对应前道工序作业的输出物料的所有后道工序作业的所有作业明细的待加工料卷批次号加上“{批次号},”
|
|
|
*/
|
|
|
- if(ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())){
|
|
|
+ if (ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())) {
|
|
|
//查询工序作业
|
|
|
ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processoperationid);
|
|
|
//没有前道工序
|
|
|
- if(ObjectUtil.isEmpty(apsProcessOperationDo.getPreviousprocessid())){
|
|
|
- apsProcessOperationDao.updateBatchNumberByProcessId(recordsDo.getBatchnumber(),processoperationid);
|
|
|
+ if (ObjectUtil.isEmpty(apsProcessOperationDo.getPreviousprocessid())) {
|
|
|
+ apsProcessOperationDao.updateBatchNumberByProcessId(recordsDo.getBatchnumber(), processoperationid);
|
|
|
}
|
|
|
//有前道工序
|
|
|
- if(ObjectUtil.isNotEmpty(apsProcessOperationDo.getPreviousprocessid())){
|
|
|
+ if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getPreviousprocessid())) {
|
|
|
//查询所有同级工序
|
|
|
List<ApsProcessOperationDo> list = apsProcessOperationService.list(new QueryWrapper<ApsProcessOperationDo>().lambda().eq(ApsProcessOperationDo::getPreviousprocessid, apsProcessOperationDo.getPreviousprocessid()));
|
|
|
List<String> processIdList = list.stream().map(ApsProcessOperationDo::getId).collect(Collectors.toList());
|
|
|
//更新所有同级工序作业的明细,增加批次号
|
|
|
- apsProcessOperationDao.updateBatchNumberByProcessList(recordsDo.getBatchnumber(),processIdList);
|
|
|
+ apsProcessOperationDao.updateBatchNumberByProcessList(recordsDo.getBatchnumber(), processIdList);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -142,6 +162,192 @@ implements ApsReportRecordsService {
|
|
|
|
|
|
return R.ok();
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R startReport(StartRePortReq req) {
|
|
|
+
|
|
|
+// //根据设备ID查询对应车间代号和设备代号
|
|
|
+// OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(req.getProcessdeviceid());
|
|
|
+// if(ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo)){
|
|
|
+// return R.error("未找到对应的车间代号和设备代号");
|
|
|
+// }
|
|
|
+ //根据作业明细ID查询作业明细详情
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(req.getUseDeviceId());
|
|
|
+ //查询工序作业的详情
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
|
|
|
+ //查询坯料计划的详情
|
|
|
+ ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationDo.getBlankid());
|
|
|
+ //查询订单的详情
|
|
|
+ ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(apsBlankOrderDo.getProductionorderid());
|
|
|
+
|
|
|
+
|
|
|
+ //获取当前用户相关信息
|
|
|
+ SysUserVo currentUser = CXCommonUtils.getCurrentUser();
|
|
|
+ String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
|
|
|
+
|
|
|
+ //新增主表报工记录信息
|
|
|
+ ApsReportRecordsDo apsReportRecordsDo = new ApsReportRecordsDo();
|
|
|
+ apsReportRecordsDo.setId(SecurityUtil.getUUID());
|
|
|
+ apsReportRecordsDo.setTenantid(tenantId);
|
|
|
+ //工序作业ID
|
|
|
+ apsReportRecordsDo.setProcessoperationid(apsProcessOperationDo.getId());
|
|
|
+ //作业明细ID
|
|
|
+ apsReportRecordsDo.setProcessequid(apsProcessOperationProcessEquDo.getId());
|
|
|
+ //输入物料的批次号
|
|
|
+ apsReportRecordsDo.setBatchnumber(req.getInputBatchNumber());
|
|
|
+ //实际输入物料
|
|
|
+ apsReportRecordsDo.setActualinputmaterial(apsProcessOperationDo.getPlaninput());
|
|
|
+ //主操作员
|
|
|
+ apsReportRecordsDo.setChiefoperatorid(currentUser.getId());
|
|
|
+ apsReportRecordsDo.setChiefoperatorname(currentUser.getName());
|
|
|
+ //开工时间
|
|
|
+ apsReportRecordsDo.setStartworktime(DateUtil.date());
|
|
|
+ //报工时间
|
|
|
+ apsReportRecordsDo.setReportworktime(DateUtil.date());
|
|
|
+ //报工状态
|
|
|
+ apsReportRecordsDo.setReportworkstatus("已开工");
|
|
|
+
|
|
|
+ //保存主表
|
|
|
+ this.save(apsReportRecordsDo);
|
|
|
+
|
|
|
+ //=================更新工序作业明细的报工ID、已开工卷数============
|
|
|
+ //将报工记录ID存入工序作业的设备子表中
|
|
|
+ ApsProcessOperationProcessEquDo needUpdateProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
+ needUpdateProcessOperationProcessEqu.setId(apsProcessOperationProcessEquDo.getId());
|
|
|
+
|
|
|
+ //更新待报工记录ID
|
|
|
+ needUpdateProcessOperationProcessEqu.setWaitreportid(apsReportRecordsDo.getId());
|
|
|
+ //获取作业明细的已开工卷数
|
|
|
+ Integer startingroll = apsProcessOperationProcessEquDo.getStartingroll();
|
|
|
+ Integer newStartingRoll = startingroll + 1;
|
|
|
+ //更新已开工卷数
|
|
|
+ needUpdateProcessOperationProcessEqu.setStartingroll(newStartingRoll);
|
|
|
+ if (newStartingRoll.equals(1)) {
|
|
|
+ //更新实际开工时间
|
|
|
+ needUpdateProcessOperationProcessEqu.setActualstartdate(DateUtil.date());
|
|
|
+ }
|
|
|
+ apsProcessOperationProcessEquService.updateById(needUpdateProcessOperationProcessEqu);
|
|
|
+
|
|
|
+ //===============更新工序作业==================
|
|
|
+ this.baseMapper.updateProcessActualStartDate(apsProcessOperationDo.getId());
|
|
|
+
|
|
|
+ //=============更新设备的报工记录ID=============
|
|
|
+ this.baseMapper.updateDeviceWaitReportId(apsReportRecordsDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
|
|
|
+
|
|
|
+ //==========输入物料有批次号==============
|
|
|
+ if (ObjectUtil.isNotEmpty(req.getInputBatchNumber())) {
|
|
|
+ //如果该工序作业没有前道工序作业
|
|
|
+ if (ObjectUtil.isEmpty(apsProcessOperationDo.getPreviousprocessid())) {
|
|
|
+ //该工序作业的待加工料卷批次号去掉“{批次号},”或者“,{批次号}”
|
|
|
+ this.baseMapper.updateBatchMaterialProcess(req.getInputBatchNumber(), apsProcessOperationProcessEquDo.getId());
|
|
|
+ } else {//如果该工序作业有前道工序作业
|
|
|
+ //前道工序作业 的 所有后道工序作业(包含本工序作业【即所有与本工序同级的工序作业】) 的待加工料卷批次号去掉“{批次号},”或者“,{批次号}”
|
|
|
+ //查询前道工序作业的所有后道工序作业
|
|
|
+ List<ApsProcessOperationDo> nextProcessList = apsProcessOperationService.list(new QueryWrapper<ApsProcessOperationDo>().lambda().eq(ApsProcessOperationDo::getPreviousprocessid, apsProcessOperationDo.getPreviousprocessid()));
|
|
|
+ String collect = nextProcessList.stream().map(ApsProcessOperationDo::getId).collect(Collectors.joining("','"));
|
|
|
+ String processIds = "'" + collect + "'";
|
|
|
+ this.baseMapper.updateBatchMaterialProcessBatch(req.getInputBatchNumber(), processIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //==========输出物料子表信息============
|
|
|
+ InsertMyReportOutputReq req2 = new InsertMyReportOutputReq();
|
|
|
+ req2.setProcessId(apsProcessOperationDo.getId());
|
|
|
+ req2.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
|
|
|
+ req2.setBlankType(apsBlankOrderDo.getBlanktype());
|
|
|
+ req2.setMainId(apsReportRecordsDo.getId());
|
|
|
+ R r = apsReportOutputService.insertMyReportOutputWithOutBatchNumber(req2);
|
|
|
+ if (!r.getCode().equals("200")) {
|
|
|
+ return R.error(r.getMsg());
|
|
|
+ }
|
|
|
+
|
|
|
+ //=============加工参数子表信息、检查项目子表信息================
|
|
|
+ if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getProcess())) {
|
|
|
+ //根据工序查询其工序的加工参数
|
|
|
+ List<ApsParameterDo> parameterDoList = this.baseMapper.selectApsParameterByProcess(apsProcessOperationDo.getProcess());
|
|
|
+ List<ApsReportMachiningDo> needInsertApsReportMachingList = new LinkedList<>();
|
|
|
+ for (ApsParameterDo apsParameterDo : parameterDoList) {
|
|
|
+ ApsReportMachiningDo apsReportMachiningDo = new ApsReportMachiningDo();
|
|
|
+ apsReportMachiningDo.setId(SecurityUtil.getUUID());
|
|
|
+ apsReportMachiningDo.setTenantid(tenantId);
|
|
|
+ apsReportMachiningDo.setMainid(apsReportRecordsDo.getId());
|
|
|
+ apsReportMachiningDo.setMatching(apsParameterDo.getParameter());
|
|
|
+ needInsertApsReportMachingList.add(apsReportMachiningDo);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(needInsertApsReportMachingList)) {
|
|
|
+ apsReportMachiningService.saveBatch(needInsertApsReportMachingList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //根据工序查询其工序的检查项目
|
|
|
+ List<ApsCheckParameterDo> checkParameterDoList = this.baseMapper.selectApsCheckParameterByProcess(apsProcessOperationDo.getProcess());
|
|
|
+ List<ApsReportCheckoutDo> needInsertApsReportCheckList = new LinkedList<>();
|
|
|
+ for (ApsCheckParameterDo apsCheckParameterDo : checkParameterDoList) {
|
|
|
+ ApsReportCheckoutDo apsReportCheckoutDo = new ApsReportCheckoutDo();
|
|
|
+ apsReportCheckoutDo.setId(SecurityUtil.getUUID());
|
|
|
+ apsReportCheckoutDo.setTenantid(tenantId);
|
|
|
+ apsReportCheckoutDo.setMainid(apsReportRecordsDo.getId());
|
|
|
+ apsReportCheckoutDo.setCheckitem(apsCheckParameterDo.getCkeckparameter());
|
|
|
+ needInsertApsReportCheckList.add(apsReportCheckoutDo);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(needInsertApsReportCheckList)) {
|
|
|
+ apsReportCheckoutService.saveBatch(needInsertApsReportCheckList);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //=============坯料成分子表信息=============
|
|
|
+ //工序作业的合金
|
|
|
+ String metal = apsProcessOperationDo.getMetal();
|
|
|
+ //订单的客户ID
|
|
|
+ String customid = apsProductionOrderDo.getCustomid();
|
|
|
+ String alloyId = "";
|
|
|
+ //查询合金对应的所有主表信息
|
|
|
+ List<ApsAlloyDo> apsAlloyDoList = apsAlloyService.list(new QueryWrapper<ApsAlloyDo>().lambda().eq(ApsAlloyDo::getAlloy, metal));
|
|
|
+ if (ObjectUtil.isNotEmpty(apsAlloyDoList)) {
|
|
|
+ //查询客户标准
|
|
|
+ List<ApsAlloyDo> collect = apsAlloyDoList.stream().filter(item -> ObjectUtil.isNotEmpty(item.getCustomerid()) && item.getCustomerid().contains(customid)).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(collect)) {
|
|
|
+ alloyId = collect.get(0).getId();
|
|
|
+ } else {//查询国标
|
|
|
+ List<ApsAlloyDo> collect1 = apsAlloyDoList.stream().filter(item -> ObjectUtil.isEmpty(item.getCustomerid())).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(collect1)) {
|
|
|
+ alloyId = collect.get(0).getId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询合金成分要求
|
|
|
+ if (ObjectUtil.isNotEmpty(alloyId)) {
|
|
|
+ List<ApsAlloyCompositionDo> apsAlloyCompositionDoList = apsAlloyCompositionService.list(new QueryWrapper<ApsAlloyCompositionDo>().lambda().eq(ApsAlloyCompositionDo::getAlloyid, alloyId));
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotEmpty(apsAlloyCompositionDoList)) {
|
|
|
+ List<ApsReportBlankCompentDo> needInsertApsReportBlankCompentList = new LinkedList<>();
|
|
|
+ for (ApsAlloyCompositionDo apsAlloyCompositionDo : apsAlloyCompositionDoList) {
|
|
|
+ ApsReportBlankCompentDo apsReportBlankCompentDo = new ApsReportBlankCompentDo();
|
|
|
+ apsReportBlankCompentDo.setId(SecurityUtil.getUUID());
|
|
|
+ apsReportBlankCompentDo.setTenantid(tenantId);
|
|
|
+ apsReportBlankCompentDo.setMainid(apsReportRecordsDo.getId());
|
|
|
+ apsReportBlankCompentDo.setCompent(apsAlloyCompositionDo.getIngredient());
|
|
|
+ apsReportBlankCompentDo.setStartproportion(apsAlloyCompositionDo.getLeftproportion());
|
|
|
+ apsReportBlankCompentDo.setEndproportion(apsAlloyCompositionDo.getRightproportion());
|
|
|
+ needInsertApsReportBlankCompentList.add(apsReportBlankCompentDo);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(needInsertApsReportBlankCompentList)) {
|
|
|
+ apsReportBlankCompentService.saveBatch(needInsertApsReportBlankCompentList);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //更新生产状态
|
|
|
+ CommonUpdateProductionStatusReq req3 = new CommonUpdateProductionStatusReq();
|
|
|
+ req3.setProcessOperationEquId(apsProcessOperationProcessEquDo.getId());
|
|
|
+ R r2 = apsProcessOperationProcessEquService.updateProductionStatus(req3);
|
|
|
+ if (!r2.getCode().equals("200")) {
|
|
|
+ return R.error(r2.getMsg());
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.ok(apsReportRecordsDo);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|