Merge remote-tracking branch 'origin/dev' into dev

master
jun 6 months ago
commit 7dd491c468

@ -4,8 +4,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
/** /**
* @Description: * @Description:
* @Author: gsz * @Author: gsz
@ -14,12 +17,27 @@ import io.swagger.annotations.ApiOperation;
*/ */
public interface IMesProdShiftRecordService { public interface IMesProdShiftRecordService {
@ApiOperation(value = "查询开关班记录") @ApiOperation(value = "分页查询开关班记录")
public ListPager<MesProdShiftRecord> queryMesProdShiftRecordByPager(MesProdShiftRecord partInspection, Pager pager); ListPager<MesProdShiftRecord> queryMesProdShiftRecordByPager(MesProdShiftRecord partInspection, Pager pager);
void insertMesProdShiftRecord(MesProdShiftRecord item, String organizeCode); //缓存班次数据
@ApiOperation(value = "新增开关班记录")
void insertMesProdShiftRecord(MesProdShiftRecord item);
void saveMesProdShiftRecord(MesProdShiftRecord item, String organizeCode); //如果结班,会清除缓存中的班次数据
@ApiOperation(value = "保存开关班记录")
void saveMesProdShiftRecord(MesProdShiftRecord item);
@ApiOperation(value = "查询开关班记录")
MesProdShiftRecord queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord); MesProdShiftRecord queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord);
@ApiOperation(value = "查询最新的开班记录")
MesProdShiftRecord getProdShiftRecordOpenStatus(String organizeCode, String workCenterCode);
@ApiOperation(value = "封装展示组件班组班次内容")
List<StationKvBean> getProdShiftData(MesProdShiftRecord record);
@ApiOperation(value = "获取展示组件班组班次内容")
List<StationKvBean> getShiftRecordStationKvBeans(String organizeCode, String workCenterCode);
} }

@ -18,14 +18,14 @@ import java.util.Map;
*/ */
public interface IMesShiftService { public interface IMesShiftService {
@ApiOperation(value = "查询产线与班次的对应关系") @ApiOperation(value = "查询产线与班次的对应关系")
public ListPager<MesShift> queryMesShiftByPager(MesShift mesShift, Pager pager); ListPager<MesShift> queryMesShiftByPager(MesShift mesShift, Pager pager);
@ApiOperation(value = "查询产线与班次的对应关系") @ApiOperation(value = "查询产线与班次的对应关系")
public List<MesShift> queryMesShift(String organizeCode, String workCenterCode); List<MesShift> queryMesShift(String organizeCode, String workCenterCode);
@ApiOperation(value = "获取当前班次时间日期") @ApiOperation(value = "获取当前班次时间日期")
Map<String,String> getShiftTimeMap(MesProdShiftRecord record); Map<String,String> getShiftTimeMap(MesProdShiftRecord record);
} }

@ -0,0 +1,19 @@
package cn.estsh.i3plus.ext.mes.pcn.api.job;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
public interface IMesWorkOrderOfflineRestoreDispatchService {
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
void saveWorkOrderOffline(MesWorkOrderOffline workOrderOffline, Boolean result);
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now);
}

@ -5,7 +5,7 @@ import java.util.Map;
public interface IMesWorkOrderOfflineRestoreService { public interface IMesWorkOrderOfflineRestoreService {
/** /**
* 线JOB * 线JOB
* @param paramMap * @param paramMap
*/ */
void doRestoreWorkOrderOfflineData(Map<String, String> paramMap); void doRestoreWorkOrderOfflineData(Map<String, String> paramMap);

@ -1,31 +1,19 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean; import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.google.common.base.Objects;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/** /**
* @Description: * @Description:
* @Author: gsz * @Author: gsz
@ -35,20 +23,14 @@ import java.util.Map;
@RestController @RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProdShiftRecord") @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProdShiftRecord")
public class MesProdShiftRecordController { public class MesProdShiftRecordController {
@Autowired
private IMesProdShiftRecordService mesProdShiftRecordService;
@Autowired @Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService; private IMesProdShiftRecordService mesProdShiftRecordService;
@Autowired
private IMesShiftService mesShiftService;
@GetMapping("/query-pager") @GetMapping("/query-pager")
@ApiOperation(value = "查询开关班记录") @ApiOperation(value = "查询开关班记录")
public ResultBean queryMesProdShiftRecordByPager(MesProdShiftRecord mesProdShiftRecord, Pager pager) { public ResultBean queryMesProdShiftRecordByPager(MesProdShiftRecord mesProdShiftRecord, Pager pager) {
try { try {
mesProdShiftRecord.setOrganizeCode(AuthUtil.getOrganizeCode());
ListPager<MesProdShiftRecord> partInspectionListPager = mesProdShiftRecordService.queryMesProdShiftRecordByPager(mesProdShiftRecord, pager); ListPager<MesProdShiftRecord> partInspectionListPager = mesProdShiftRecordService.queryMesProdShiftRecordByPager(mesProdShiftRecord, pager);
return ResultBean.success("查询成功").setListPager(partInspectionListPager); return ResultBean.success("查询成功").setListPager(partInspectionListPager);
} catch (ImppBusiException imppException) { } catch (ImppBusiException imppException) {
@ -65,16 +47,12 @@ public class MesProdShiftRecordController {
try { try {
// 数据校验 // 数据校验
ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空");
ValidatorBean.checkNotNull(item.getUserInfo(), "操作人不能为空");
ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" ); ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" );
ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空"); ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空");
ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空");
mesProdShiftRecordService.insertMesProdShiftRecord(item);
mesProdShiftRecordService.insertMesProdShiftRecord(item, AuthUtil.getOrganizeCode());
List<StationKvBean> getProdShiftData = getProdShiftData(item);
productionCustomContextStepService.dispatchProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData);
return ResultBean.success("保存开关班记录成功"); return ResultBean.success("保存开关班记录成功");
} catch (ImppBusiException imppException) { } catch (ImppBusiException imppException) {
@ -91,15 +69,12 @@ public class MesProdShiftRecordController {
try { try {
// 数据校验 // 数据校验
ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空");
ValidatorBean.checkNotNull(item.getUserInfo(), "操作人不能为空");
ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" ); ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" );
ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空"); ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空");
ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空");
mesProdShiftRecordService.saveMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); mesProdShiftRecordService.saveMesProdShiftRecord(item);
if (Objects.equal(MesExtEnumUtil.WORK_STATUS.END.getValue(), item.getWorkStatus())) {
productionCustomContextStepService.removeProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode());
}
return ResultBean.success("保存开关班记录成功"); return ResultBean.success("保存开关班记录成功");
} catch (ImppBusiException imppException) { } catch (ImppBusiException imppException) {
@ -108,11 +83,11 @@ public class MesProdShiftRecordController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e); return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
} }
} }
@GetMapping(value = "/query-prod-shift-record") @GetMapping(value = "/query-prod-shift-record")
@ApiOperation(value = "查询零件生产组") @ApiOperation(value = "查询开关班记录")
public ResultBean queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord) { public ResultBean queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord) {
try { try {
mesProdShiftRecord.setOrganizeCode(mesProdShiftRecord.getOrganizeCode());
//查询汇总工单数量 //查询汇总工单数量
MesProdShiftRecord mesPartProdGroup= mesProdShiftRecordService.queryMesProdShiftRecord(mesProdShiftRecord); MesProdShiftRecord mesPartProdGroup= mesProdShiftRecordService.queryMesProdShiftRecord(mesProdShiftRecord);
return ResultBean.success("查询成功") return ResultBean.success("查询成功")
@ -124,20 +99,4 @@ public class MesProdShiftRecordController {
} }
} }
//封装展示组件班组班次内容
private List<StationKvBean> getProdShiftData(MesProdShiftRecord record) {
List<StationKvBean> stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean("shiftGroup", "班组", record.getShiftGroup()),
new StationKvBean("shiftGroupName", "班组名称", record.getShiftGroup()),
new StationKvBean("shiftCode", "班次", record.getShiftCode()),
new StationKvBean("shiftName", "班次名称", record.getShiftName()));
//班次开始时间 ,班次结束时间
Map<String, String> shiftTimeMap = mesShiftService.getShiftTimeMap(record);
if (!java.util.Objects.isNull(shiftTimeMap)) {
StationKvBeanUtil.addStationKvBeanList(stationKvBeans,
new StationKvBean(MesPcnExtConstWords.START_TIME,"开始时间",shiftTimeMap.get(MesPcnExtConstWords.START_TIME)),
new StationKvBean(MesPcnExtConstWords.END_TIME,"结束时间",shiftTimeMap.get(MesPcnExtConstWords.END_TIME)));
}
return stationKvBeans;
}
} }

@ -26,11 +26,11 @@ import java.util.Map;
@Slf4j @Slf4j
@DisallowConcurrentExecution @DisallowConcurrentExecution
@Component @Component
@ApiOperation("补录离线生产数据JOB") @ApiOperation("补录离线生产工单数据JOB")
public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob { public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
public MesWorkOrderOfflineRestoreJob() { public MesWorkOrderOfflineRestoreJob() {
super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产数据JOB"); super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产工单数据JOB");
} }
@Autowired @Autowired
@ -41,14 +41,14 @@ public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
String jobParam = this.getJobParam(); String jobParam = this.getJobParam();
if (StringUtils.isEmpty(jobParam)) { if (StringUtils.isEmpty(jobParam)) {
log.info("补录离线生产数据JOB --- 参数为空 ---"); log.info("--- 异常 --- 补录离线生产工单数据JOB --- 参数为空 ---");
return; return;
} }
Map<String, String> paramMap = JSONObject.parseObject(jobParam, Map.class); Map<String, String> paramMap = JSONObject.parseObject(jobParam, Map.class);
if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) { if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) {
log.info("补录离线生产数据JOB --- 参数未配置:工厂代码[organizeCode] ---"); log.info("--- 异常 --- 补录离线生产工单数据JOB --- 参数未配置:工厂代码[organizeCode] ---");
return; return;
} }
@ -62,13 +62,13 @@ public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
} catch (Exception e) { } catch (Exception e) {
log.info("补录离线生产数据JOB --- ERROR --- {} ---", e.toString()); log.info("--- 异常 --- 补录离线生产工单数据JOB --- ERROR --- {} ---", e.toString());
} finally { } finally {
stopWatch.stop(); stopWatch.stop();
log.info("补录离线生产数据JOB --- END --- 耗时: {} ms ---", stopWatch.getTotalTimeMillis()); log.info("补录离线生产工单数据JOB --- END --- 耗时: {} ms ---", stopWatch.getTotalTimeMillis());
} }

@ -0,0 +1,86 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.base.ButtonDynamicService;
import cn.estsh.i3plus.mes.pcn.util.PcnHttpUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkModule;
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkModuleRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description:
* @Author: wangjie
* @Date: 2020/3/17 3:53
* @Modify:
*/
@Slf4j
@Primary
@Service
public class ButtonDynamicExtService extends ButtonDynamicService {
@Autowired
private MesWorkModuleRepository workModuleRepository;
@Autowired
private IMesProdOrgExtService prodOrgExtService;
@Autowired
private IConfigService configService;
@Override
public List<ButtonDynamicModel> filterButtonDynamicModelList(String organizeCode, String workCenterCode, String workCellCode, String windowNo, List<ButtonDynamicModel> buttonDynamicModelList) {
if (CollectionUtils.isEmpty(buttonDynamicModelList)) {
MesWorkCell workCell = prodOrgExtService.getWorkCellDb(organizeCode, workCenterCode, workCellCode);
if (null != workCell && !StringUtils.isEmpty(workCell.getGrade()) && workCell.getGrade().compareTo(MesExtEnumUtil.WORK_CELL_GRADE.SCAN.getValue()) == 0) {
buttonDynamicModelList = findWorkModuleList(organizeCode, windowNo);
if (!CollectionUtils.isEmpty(buttonDynamicModelList)) doAutoInitWorkCellModuleData(organizeCode, workCell.getId());
}
}
return super.filterButtonDynamicModelList(organizeCode, workCenterCode, workCellCode, windowNo, buttonDynamicModelList);
}
private List<ButtonDynamicModel> findWorkModuleList(String organizeCode, String windowNo) {
List<MesWorkModule> workModuleList = getWorkModuleButtonList(organizeCode);
if (CollectionUtils.isEmpty(workModuleList)) return null;
List<ButtonDynamicModel> buttonDynamicModelList = new ArrayList<>();
workModuleList.forEach(o -> buttonDynamicModelList.add(new ButtonDynamicModel(o.getId(), o.getModuleCode(), o.getModuleName(), windowNo, null, o.getSeq(), o.getColor(), o.getMenuCode())));
return buttonDynamicModelList;
}
private List<MesWorkModule> getWorkModuleButtonList(String organizeCode) {
return workModuleRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.MODULE_TYPE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), MesEnumUtil.WORK_MODULE_TYPE.BUTTON_MODULE.getValue()});
}
private void doAutoInitWorkCellModuleData(String organizeCode, Long id) {
MesConfig configGateWay = configService.getMesConfigByCfgCode(MesPcnEnumUtil.CONFIG_TYPE.GATEWAY_IP.getCode(), organizeCode);
MesConfig apiCfg = configService.getMesConfigByCfgCode(MesPcnExtConstWords.AUTO_INIT_WORK_CELL_MODULE_URL, organizeCode);
if (null == configGateWay || StringUtils.isEmpty(configGateWay.getCfgValue())) return;
if (null == apiCfg || StringUtils.isEmpty(apiCfg.getCfgValue())) return;
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
paramsMap.put(MesPcnExtConstWords.ID, id.toString());
PcnHttpUtil.doPost(configGateWay.getCfgValue() + apiCfg.getCfgValue(), paramsMap);
}
}

@ -2,8 +2,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -14,11 +17,13 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository; import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesDowntimeRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesDowntimeRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdShiftRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProdShiftRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWcEquipmentRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWcEquipmentRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -26,7 +31,9 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -55,6 +62,12 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
@Autowired @Autowired
private IMesEquipmentExtService mesEquipmentExtService; private IMesEquipmentExtService mesEquipmentExtService;
@Autowired
private IMesShiftService mesShiftService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Override @Override
public ListPager<MesProdShiftRecord> queryMesProdShiftRecordByPager(MesProdShiftRecord bean, Pager pager) { public ListPager<MesProdShiftRecord> queryMesProdShiftRecordByPager(MesProdShiftRecord bean, Pager pager) {
@ -75,7 +88,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
} }
@Override @Override
public void insertMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) { public void insertMesProdShiftRecord(MesProdShiftRecord item) {
//唯一性校验 //唯一性校验
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean);
@ -91,12 +104,17 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
item.getWorkCenterCode(), item.getShiftGroup()) item.getWorkCenterCode(), item.getShiftGroup())
.build(); .build();
} }
ConvertBean.serviceModelInitialize(item, AuthUtil.getSessionUser().getUserName()); ConvertBean.serviceModelInitialize(item, item.getUserInfo());
mesProdShiftRecordRDao.insert(item); mesProdShiftRecordRDao.insert(item);
//缓存班次数据
productionCustomContextStepService.dispatchProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData(item));
} }
//如果结班,会清除缓存中的班次数据
@Override @Override
public void saveMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) { public void saveMesProdShiftRecord(MesProdShiftRecord item) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringEqualPack(item.getShiftGroup(), "shiftGroup", packBean); DdlPreparedPack.getStringEqualPack(item.getShiftGroup(), "shiftGroup", packBean);
@ -117,12 +135,12 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
mesProdShiftRecord.setShiftCode(item.getShiftCode()); mesProdShiftRecord.setShiftCode(item.getShiftCode());
mesProdShiftRecord.setEndTime(item.getEndTime()); mesProdShiftRecord.setEndTime(item.getEndTime());
mesProdShiftRecord.setWorkStatus(item.getWorkStatus()); mesProdShiftRecord.setWorkStatus(item.getWorkStatus());
ConvertBean.serviceModelUpdate(mesProdShiftRecord, AuthUtil.getSessionUser().getUserName()); ConvertBean.serviceModelUpdate(mesProdShiftRecord, item.getUserInfo());
mesProdShiftRecordRDao.update(mesProdShiftRecord); mesProdShiftRecordRDao.update(mesProdShiftRecord);
//结班后, 系统生产一条停机记录,原因:无订单停机 //结班后, 系统生产一条停机记录,原因:无订单停机
MesConfig reasonCfg = configRepository.getByProperty( MesConfig reasonCfg = configRepository.getByProperty(
new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"},
new Object[]{ "MES_DOWNTIME_RECORD_SHIFT_REASON", organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); new Object[]{ "MES_DOWNTIME_RECORD_SHIFT_REASON", item.getOrganizeCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()});
String reason = ""; String reason = "";
if (!Objects.isNull(reasonCfg) && StringUtils.isEmpty(reasonCfg.getCfgValue())) { if (!Objects.isNull(reasonCfg) && StringUtils.isEmpty(reasonCfg.getCfgValue())) {
@ -130,19 +148,19 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
} }
MesConfig typeCfg = configRepository.getByProperty( MesConfig typeCfg = configRepository.getByProperty(
new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"},
new Object[]{"MES_DOWNTIME_RECORD_SHIFT_TYPE", organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); new Object[]{"MES_DOWNTIME_RECORD_SHIFT_TYPE", item.getOrganizeCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()});
String type = ""; String type = "";
if (!Objects.isNull(typeCfg) && StringUtils.isEmpty(typeCfg.getCfgValue())) { if (!Objects.isNull(typeCfg) && StringUtils.isEmpty(typeCfg.getCfgValue())) {
type = typeCfg.getCfgValue(); type = typeCfg.getCfgValue();
} }
List<MesWcEquipment> wcEquipmentDbList = wcEquipmentRepository.findByProperty( List<MesWcEquipment> wcEquipmentDbList = wcEquipmentRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE}, new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()}); new Object[]{item.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()});
if (CollectionUtils.isEmpty(wcEquipmentDbList)) { if (CollectionUtils.isEmpty(wcEquipmentDbList)) {
MesPcnException.throwMesBusiException("产线【%s】工位设备信息不存在", item.getWorkCenterCode()); MesPcnException.throwMesBusiException("产线【%s】工位设备信息不存在", item.getWorkCenterCode());
} }
for (MesWcEquipment mesWcEquipment : wcEquipmentDbList) { for (MesWcEquipment mesWcEquipment : wcEquipmentDbList) {
DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWcEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanDowntime); DdlPreparedPack.getStringEqualPack(mesWcEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanDowntime);
if (!StringUtil.isEmpty(reason)) { if (!StringUtil.isEmpty(reason)) {
DdlPreparedPack.getStringEqualPack(reason, "reasonCode", ddlPackBeanDowntime); DdlPreparedPack.getStringEqualPack(reason, "reasonCode", ddlPackBeanDowntime);
@ -152,13 +170,13 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
} }
MesDowntimeRecord mesDowntimeRecordDao = mesDowntimeRecordRDao.getByProperty(ddlPackBeanDowntime); MesDowntimeRecord mesDowntimeRecordDao = mesDowntimeRecordRDao.getByProperty(ddlPackBeanDowntime);
if (Objects.isNull(mesDowntimeRecordDao)) { if (Objects.isNull(mesDowntimeRecordDao)) {
MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(organizeCode, mesWcEquipment.getEquipmentCode()); MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(item.getOrganizeCode(), mesWcEquipment.getEquipmentCode());
if (Objects.isNull(mesEquipment)) { if (Objects.isNull(mesEquipment)) {
MesPcnException.throwMesBusiException("设备【%s】信息不存在", mesWcEquipment.getEquipmentCode()); MesPcnException.throwMesBusiException("设备【%s】信息不存在", mesWcEquipment.getEquipmentCode());
} }
//新增设备停机记录 //新增设备停机记录
MesDowntimeRecord mesDowntimeRecord = new MesDowntimeRecord(); MesDowntimeRecord mesDowntimeRecord = new MesDowntimeRecord();
mesDowntimeRecord.setOrganizeCode(organizeCode); mesDowntimeRecord.setOrganizeCode(item.getOrganizeCode());
mesDowntimeRecord.setEquipId(mesEquipment.getEquipId()); mesDowntimeRecord.setEquipId(mesEquipment.getEquipId());
mesDowntimeRecord.setEquipmentCode(mesEquipment.getEquipmentCode()); mesDowntimeRecord.setEquipmentCode(mesEquipment.getEquipmentCode());
mesDowntimeRecord.setAreaCode(item.getAreaCode()); mesDowntimeRecord.setAreaCode(item.getAreaCode());
@ -166,7 +184,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
mesDowntimeRecord.setWorkCellCode(mesWcEquipment.getWorkCellCode()); mesDowntimeRecord.setWorkCellCode(mesWcEquipment.getWorkCellCode());
mesDowntimeRecord.setReasonCode(StringUtil.isEmpty(reason) ? "" : reason); mesDowntimeRecord.setReasonCode(StringUtil.isEmpty(reason) ? "" : reason);
mesDowntimeRecord.setReasonTypeCode(StringUtil.isEmpty(type) ? "" : type); mesDowntimeRecord.setReasonTypeCode(StringUtil.isEmpty(type) ? "" : type);
ConvertBean.serviceModelInitialize(mesDowntimeRecord, AuthUtil.getSessionUser().getUserName()); ConvertBean.serviceModelInitialize(mesDowntimeRecord, item.getUserInfo());
mesDowntimeRecordRDao.insert(mesDowntimeRecord); mesDowntimeRecordRDao.insert(mesDowntimeRecord);
// //将当前新增数据的create_date_time时间些到上一条记录的modify_date_time字段 // //将当前新增数据的create_date_time时间些到上一条记录的modify_date_time字段
@ -185,6 +203,10 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
} }
} }
//如果结班,会清除缓存中的班次数据
if (item.getWorkStatus().compareTo(MesExtEnumUtil.WORK_STATUS.END.getValue()) == 0) {
productionCustomContextStepService.removeProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode());
}
} }
@ -200,4 +222,51 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
return mesProdShiftRecordRDao.getByProperty(packBean); return mesProdShiftRecordRDao.getByProperty(packBean);
} }
@Override
public MesProdShiftRecord getProdShiftRecordOpenStatus(String organizeCode, String workCenterCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
MesProdShiftRecord prodShiftRecord = mesProdShiftRecordRDao.getByProperty(packBean);
if (prodShiftRecord != null && !StringUtils.isEmpty(prodShiftRecord.getWorkStatus()) && prodShiftRecord.getWorkStatus().compareTo(MesExtEnumUtil.WORK_STATUS.START.getValue()) == 0) return prodShiftRecord;
return null;
}
//封装展示组件班组班次内容
@Override
public List<StationKvBean> getProdShiftData(MesProdShiftRecord record) {
if (null == record) return null;
List<StationKvBean> stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()),
new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()),
new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()),
new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName()));
//班次开始时间 ,班次结束时间
Map<String, String> shiftTimeMap = mesShiftService.getShiftTimeMap(record);
if (!java.util.Objects.isNull(shiftTimeMap)) {
StationKvBeanUtil.addStationKvBeanList(stationKvBeans,
new StationKvBean(MesPcnExtConstWords.START_TIME,"开始时间", shiftTimeMap.get(MesPcnExtConstWords.START_TIME)),
new StationKvBean(MesPcnExtConstWords.END_TIME,"结束时间",shiftTimeMap.get(MesPcnExtConstWords.END_TIME)));
}
return stationKvBeans;
}
//获取展示组件班组班次内容
@Override
public List<StationKvBean> getShiftRecordStationKvBeans(String organizeCode, String workCenterCode) {
// 获取班次信息 redis
List<StationKvBean> prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(organizeCode, workCenterCode);
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
// 查询数据库
MesProdShiftRecord prodShiftRecord = getProdShiftRecordOpenStatus(organizeCode, workCenterCode);
if (prodShiftRecord != null) {
prodShiftDataContext = getProdShiftData(prodShiftRecord);
productionCustomContextStepService.dispatchProdShiftDataContext(organizeCode, workCenterCode, prodShiftDataContext);
}
}
return prodShiftDataContext;
}
} }

@ -86,4 +86,5 @@ public class MesShiftServiceImpl implements IMesShiftService {
shiftTimeMap.put(MesPcnExtConstWords.END_TIME, endTime); shiftTimeMap.put(MesPcnExtConstWords.END_TIME, endTime);
return shiftTimeMap; return shiftTimeMap;
} }
} }

@ -957,7 +957,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty());
mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); mesWorkOrderDb.setRemark(mesWorkOrder.getRemark());
String sn = getReportSn(mesWorkOrder.getOrganizeCode(),userName); String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName, mesPart);
//更新工单 //更新工单
updateMesWorkOrder(mesWorkOrderDb, userName,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT,mesWorkOrder.getNum()); updateMesWorkOrder(mesWorkOrderDb, userName,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT,mesWorkOrder.getNum());
//记录条码表&加工记录表 //记录条码表&加工记录表
@ -987,7 +987,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (mesWorkOrder.getAdjustQty() > mesWorkOrder.getReportedQty()) { if (mesWorkOrder.getAdjustQty() > mesWorkOrder.getReportedQty()) {
MesPcnException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销", mesWorkOrder.getAdjustQty(), mesWorkOrder.getReportedQty()); MesPcnException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销", mesWorkOrder.getAdjustQty(), mesWorkOrder.getReportedQty());
} }
String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName); String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName, mesPart);
//更新工单 //更新工单
updateMesWorkOrder(mesWorkOrder, userName, MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum()); updateMesWorkOrder(mesWorkOrder, userName, MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum());
//试制单不报工 //试制单不报工
@ -1245,8 +1245,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT); return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
} }
private String getReportSn(String organizeCode,String userName) { private String getReportSn(String organizeCode, String userName, MesPart part) {
return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString(); return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).partSnParam(part.getPartSnParam()).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString();
} }
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,

@ -0,0 +1,306 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProductionRecordOfflineModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderPartOffline;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderAssemblyOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderPartOfflineRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesWorkOrderOfflineRestoreDispatchService implements IMesWorkOrderOfflineRestoreDispatchService {
@Autowired
private MesWorkOrderAssemblyOfflineRepository workOrderAssemblyOfflineRepository;
@Autowired
private MesWorkOrderOfflineRepository workOrderOfflineRepository;
@Autowired
private MesWorkOrderPartOfflineRepository workOrderPartOfflineRepository;
@Autowired
private MesWorkOrderAssemblyRepository workOrderAssemblyRepository;
@Autowired
private MesProductionAssemblyRepository productionAssemblyRepository;
@Autowired
private MesWorkOrderRepository workOrderRepository;
@Autowired
private MesWorkOrderPartRepository workOrderPartRepository;
@Autowired
private MesProduceSnRepository produceSnRepository;
@Autowired
private MesProductionRecordRepository productionRecordRepository;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Override
public void saveWorkOrderOffline(MesWorkOrderOffline workOrderOffline, Boolean result) {
ConvertBean.serviceModelUpdate(workOrderOffline, MesPcnExtConstWords.JOB);
if (result) workOrderOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
workOrderOfflineRepository.updateNoSync(workOrderOffline);
}
@Override
public Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now) {
//写入工单; 写入条码
if (StringUtils.isEmpty(workOrderOffline.getWorkOrderId())) {
insertOrderAndPs(workOrderOffline, now);
}
//写入工单零件
if (StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) || workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) {
insertOrderPart(organizeCode, workOrderOffline, now);
}
insertAssemblyRecord(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now);
if (!StringUtils.isEmpty(workOrderOffline.getReportCellCode()) &&
!StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) && workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 &&
(StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) {
saveProductionRecordReportStatus(organizeCode, workOrderOffline);
}
return (StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) ? false : true;
}
private void insertOrderAndPs(MesWorkOrderOffline workOrderOffline, String now) {
//写入工单
MesWorkOrder workOrder = new MesWorkOrder();
BeanUtils.copyProperties(workOrderOffline, workOrder, MesPcnExtConstWords.ID);
workOrder.setScrapPartQty(new Double(0));
workOrder.setSuspiciousPartQty(new Double(0));
workOrder.setDisassemblyQty(new Double(0));
workOrder.setAdjustQty(new Double(0));
workOrder.setReportedQty(new Double(0));
workOrder.setUnCompleteQty(new Double(0));
workOrder.setCompleteQty(new Double(1));
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
workOrder.setCcscStatus(MesExtEnumUtil.OK_NOK.OK.getValue());
workOrder.setOnlineTime(workOrderOffline.getCreateDatetime());
workOrder.setOfflineTime(workOrderOffline.getCreateDatetime());
workOrder.setStartTime(workOrderOffline.getCreateDatetime());
workOrder.setEndTime(workOrderOffline.getCreateDatetime());
workOrder.setModifyDatetime(now);
workOrder.setModifyUser(MesPcnExtConstWords.JOB);
workOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
workOrder = workOrderRepository.insert(workOrder);
//写入条码
MesProduceSn produceSn = new MesProduceSn();
BeanUtils.copyProperties(workOrder, produceSn, MesPcnExtConstWords.ID);
produceSn.setSerialNumber(workOrder.getWorkOrderNo());
produceSn.setProductSn(workOrder.getWorkOrderNo());
produceSn.setCustSn(workOrder.getCustSn());
produceSn.setQty(new Double(1));
produceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue());
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
produceSn.setPrintCount(MesPcnExtConstWords.ONE);
produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
produceSn.setLotNo(workOrderOffline.getCreateDatetime().substring(0, 10));
produceSn.setInWorkCenterTime(workOrderOffline.getCreateDatetime());
produceSn.setOutWorkCenterTime(workOrderOffline.getCreateDatetime());
produceSn.setFid(UUID.randomUUID().toString());
produceSn = produceSnRepository.insert(produceSn);
//离线工单记录进行赋值
workOrderOffline.setWorkOrderId(workOrder.getId().toString());
workOrderOffline.setProduceSnId(produceSn.getId().toString());
}
private void insertOrderPart(String organizeCode, MesWorkOrderOffline workOrderOffline, String now) {
if (StringUtils.isEmpty(workOrderOffline.getOrderPartCount()) || workOrderOffline.getOrderPartCount().compareTo(MesPcnExtConstWords.ZERO) <= 0) {
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- 工单零件信息数据量[ORDER_PART_COUNT]值异常 ---", workOrderOffline.getWorkOrderNo());
return;
}
List<MesWorkOrderPartOffline> workOrderPartOfflineList = workOrderPartOfflineRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderOffline.getWorkOrderNo()});
if (CollectionUtils.isEmpty(workOrderPartOfflineList) || workOrderPartOfflineList.size() != workOrderOffline.getOrderPartCount()) {
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- 工单零件信息数据量[ORDER_PART_COUNT]值[{}]与当前查询到的生产工单零件离线信息数据量[{}]不相等 ---",
workOrderOffline.getWorkOrderNo(), workOrderOffline.getOrderPartCount(), CollectionUtils.isEmpty(workOrderPartOfflineList) ? MesPcnExtConstWords.ZERO : workOrderPartOfflineList.size());
return;
}
for (MesWorkOrderPartOffline workOrderPartOffline : workOrderPartOfflineList) {
MesWorkOrderPart workOrderPart = new MesWorkOrderPart();
BeanUtils.copyProperties(workOrderPartOffline, workOrderPart, MesPcnExtConstWords.ID);
workOrderPart.setModifyUser(MesPcnExtConstWords.JOB);
workOrderPart.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
workOrderPartRepository.insert(workOrderPart);
}
workOrderOffline.setOrderPartStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
private void insertAssemblyRecord(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now) {
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) {
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- 当前没有需要补录的工单装配件离线数据 ---", workOrderOffline.getWorkOrderNo());
return;
}
//工单装配件离线数据根据工位进行分组
Map<String, List<MesWorkOrderAssemblyOffline>> cellMap = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null :
workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkCellCode));
//解析加工记录工位字段信息 拼接新增过的工位加工记录 [{"id":"1","workCellCode":"100-10"},{"id":"2","workCellCode":"100-20"}....]
List<MesProductionRecordOfflineModel> productionRecordOfflineModelList = StringUtils.isEmpty(workOrderOffline.getProductionRecord()) ? new ArrayList<>() : JSONObject.parseArray(workOrderOffline.getProductionRecord(), MesProductionRecordOfflineModel.class);
Map<String, String> productionRecordOfflineMap = CollectionUtils.isEmpty(productionRecordOfflineModelList) ? null :
productionRecordOfflineModelList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionRecordOfflineModel::getWorkCellCode, MesProductionRecordOfflineModel::getId));
for (Map.Entry<String, List<MesWorkOrderAssemblyOffline>> entry : cellMap.entrySet()) {
if (null == entry) continue;
List<MesWorkOrderAssemblyOffline> assemblyOfflineList = entry.getValue();
Boolean isExistProductionRecord = (CollectionUtils.isEmpty(productionRecordOfflineMap) || !productionRecordOfflineMap.containsKey(entry.getKey())) ? false : true;
Long productionRecordId = isExistProductionRecord ? snowflakeIdMaker.nextId() : Long.valueOf(productionRecordOfflineMap.get(entry.getKey()));
//写入加工记录
MesProductionRecord productionRecord;
if (!isExistProductionRecord) {
productionRecord = new MesProductionRecord();
productionRecord.setId(productionRecordId);
productionRecord.setSerialNumber(workOrderOffline.getWorkOrderNo());
productionRecord.setProductSn(workOrderOffline.getWorkOrderNo());
productionRecord.setCustSn(workOrderOffline.getCustSn());
productionRecord.setWorkOrderNo(workOrderOffline.getWorkOrderNo());
productionRecord.setPartNo(workOrderOffline.getPartNo());
productionRecord.setPartName(workOrderOffline.getPartName());
productionRecord.setAreaCode(assemblyOfflineList.get(0).getAreaCode());
productionRecord.setWorkCenterCode(workOrderOffline.getWorkCenterCode());
productionRecord.setWorkCellCode(entry.getKey());
productionRecord.setQty(workOrderOffline.getQty());
productionRecord.setLotNo(workOrderOffline.getCreateDatetime().substring(0, 10));
productionRecord.setShiftCode(workOrderOffline.getShiftCode());
productionRecord.setProcessCode(assemblyOfflineList.get(0).getProcessCode());
productionRecord.setCraftCode(assemblyOfflineList.get(0).getCraftCode());
productionRecord.setEquipmentCode(assemblyOfflineList.get(0).getEquipmentCode());
productionRecord.setMouldRecordId(snowflakeIdMaker.nextId());
productionRecord.setIsComplete(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
productionRecord.setStartDateTime(workOrderOffline.getCreateDatetime());
productionRecord.setCompleteDateTime(workOrderOffline.getCreateDatetime());
productionRecord.setReportType(MesExtEnumUtil.MES_REPORT_TYPE.NO_REPORT.getValue());
productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue());
productionRecord.setModuleStatisticsStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
productionRecord.setFid(UUID.randomUUID().toString());
productionRecord.setOneMouldMoreId(UUID.randomUUID().toString());
productionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelInitialize(productionRecord, MesPcnExtConstWords.JOB);
} else {
productionRecord = productionRecordRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productionRecordId});
}
for (MesWorkOrderAssemblyOffline assemblyOffline : assemblyOfflineList) {
if (null == assemblyOffline) continue;
//写入工单装配件
MesWorkOrderAssembly workOrderAssembly = new MesWorkOrderAssembly();
BeanUtils.copyProperties(assemblyOffline, workOrderAssembly, MesPcnExtConstWords.ID);
workOrderAssembly.setModifyDatetime(now);
workOrderAssembly.setModifyUser(MesPcnExtConstWords.JOB);
workOrderAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
workOrderAssemblyRepository.insert(workOrderAssembly);
MesProductionAssembly productionAssembly = new MesProductionAssembly();
BeanUtils.copyProperties(workOrderAssembly, productionAssembly, MesPcnExtConstWords.ID);
productionAssembly.setCustSn(workOrderOffline.getCustSn());
productionAssembly.setModifyDatetime(now);
productionAssembly.setModifyUser(MesPcnExtConstWords.JOB);
productionAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
productionAssembly.setFid(UUID.randomUUID().toString());
productionAssembly.setMouldRecordId(productionRecord.getMouldRecordId());
productionAssembly.setProductionRecordId(productionRecord.getId());
productionAssemblyRepository.insert(productionAssembly);
//工单装配件离线数据改已同步
assemblyOffline.setSystemSyncDatetime(now);
assemblyOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
workOrderAssemblyOfflineRepository.updateNoSync(assemblyOffline);
if (StringUtils.isEmpty(workOrderOffline.getReportCellCode()) && !StringUtils.isEmpty(assemblyOffline.getReportType()) && assemblyOffline.getReportType().compareTo(MesExtEnumUtil.MES_REPORT_TYPE.NO_REPORT.getValue()) != 0) {
workOrderOffline.setReportCellCode(entry.getKey());
workOrderOffline.setReportType(assemblyOffline.getReportType());
workOrderOffline.setReportPartNo(!StringUtils.isEmpty(assemblyOffline.getReportPartNo()) ? assemblyOffline.getReportPartNo() : workOrderOffline.getPartNo());
}
}
//判断是否写入汇报状态
if (!StringUtils.isEmpty(workOrderOffline.getReportCellCode()) && workOrderOffline.getReportCellCode().equals(entry.getKey()) &&
!StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) && workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 &&
(StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) {
productionRecord.setReportType(workOrderOffline.getReportType());
productionRecord.setReportPartNo(workOrderOffline.getReportPartNo());
productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue());
if (isExistProductionRecord) {
productionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(productionRecord, MesPcnExtConstWords.JOB);
}
workOrderOffline.setReportCellStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
if (isExistProductionRecord) {
productionRecordRepository.updateNoSync(productionRecord);
} else {
productionRecordRepository.insert(productionRecord);
productionRecordOfflineModelList.add(new MesProductionRecordOfflineModel(entry.getKey(), productionRecord.getId().toString()));
workOrderOffline.setProductionRecord(JSONObject.toJSONString(productionRecordOfflineModelList));
}
}
}
private void saveProductionRecordReportStatus(String organizeCode, MesWorkOrderOffline workOrderOffline) {
List<MesProductionRecordOfflineModel> productionRecordOfflineModelList = JSONObject.parseArray(workOrderOffline.getProductionRecord(), MesProductionRecordOfflineModel.class);
String productionRecordId = productionRecordOfflineModelList.stream().filter(o -> (null != o && o.getWorkCellCode().equals(workOrderOffline.getReportCellCode()))).findFirst().get().getId();
MesProductionRecord productionRecord = productionRecordRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productionRecordId});
productionRecord.setReportType(workOrderOffline.getReportType());
productionRecord.setReportPartNo(workOrderOffline.getReportPartNo());
productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue());
productionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(productionRecord, MesPcnExtConstWords.JOB);
productionRecordRepository.updateNoSync(productionRecord);
workOrderOffline.setReportCellStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
}
}

@ -1,31 +1,25 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService; import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline; import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline; import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOfflineRestoreRecord;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderAssemblyOfflineRepository; import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderAssemblyOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRepository; import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRestoreRecordRepository; import com.alibaba.fastjson.JSONObject;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.*; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -39,133 +33,97 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
private MesWorkOrderOfflineRepository workOrderOfflineRepository; private MesWorkOrderOfflineRepository workOrderOfflineRepository;
@Autowired @Autowired
private MesWorkOrderOfflineRestoreRecordRepository workOrderOfflineRestoreRecordRepository; private IMesWorkOrderOfflineRestoreDispatchService workOrderOfflineRestoreDispatchService;
@Autowired
private MesWorkOrderAssemblyRepository workOrderAssemblyRepository;
@Autowired
private MesWorkOrderRepository workOrderRepository;
@Override @Override
public void doRestoreWorkOrderOfflineData(Map<String, String> paramMap) { public void doRestoreWorkOrderOfflineData(Map<String, String> paramMap) {
//参数 工厂
String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE); String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE);
//参数 处理数据量
Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED; Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED;
Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, qty); //查询工单离线数据
List<MesWorkOrderOffline> workOrderOfflineList = getWorkOrderOfflineList(organizeCode, qty);
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineMap)) return; List<String> workOrderNoList = CollectionUtils.isEmpty(workOrderOfflineList) ? null :
workOrderOfflineList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesWorkOrderOffline::getWorkOrderNo).collect(Collectors.toList());
List<String> workOrderNoList = new ArrayList<>(workOrderAssemblyOfflineMap.keySet()); log.info("补录离线生产工单数据JOB --- 查询到未补录完成的生产工单包含: {} ---", CollectionUtils.isEmpty(workOrderNoList) ? "[]" : workOrderNoList.toString());
Map<String, MesWorkOrderOfflineRestoreRecord> workOrderOfflineRestoreRecordMap = getWorkOrderOfflineRestoreRecordMap(organizeCode, workOrderNoList); //查询工单装配件离线数据
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = getWorkOrderAssemblyOfflineList(organizeCode, qty);
Map<String, MesWorkOrderOffline> workOrderOfflineMap = getWorkOrderOfflineMap(organizeCode, workOrderNoList); if (CollectionUtils.isEmpty(workOrderNoList) && CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return;
String now = TimeTool.getNowTime(true); String now = TimeTool.getNowTime(true);
for (Map.Entry<String, List<MesWorkOrderAssemblyOffline>> entry : workOrderAssemblyOfflineMap.entrySet()) { if (CollectionUtils.isEmpty(workOrderNoList)) {
//查询排序工单装配件离线数据[未同步的数据] 根据工单号分组
if (null == entry) continue; Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, workOrderNoList);
MesWorkOrderOfflineRestoreRecord workOrderOfflineRestoreRecord = CollectionUtils.isEmpty(workOrderOfflineRestoreRecordMap) ? null : workOrderOfflineRestoreRecordMap.get(entry.getKey());
for (MesWorkOrderAssemblyOffline workOrderAssemblyOffline : entry.getValue()) {
if (null == workOrderAssemblyOffline) continue;
MesWorkOrderAssembly workOrderAssembly = new MesWorkOrderAssembly();
BeanUtils.copyProperties(workOrderAssemblyOffline, workOrderAssembly, MesPcnExtConstWords.ID);
workOrderAssembly.setModifyDatetime(now);
workOrderAssembly.setModifyUser(MesPcnExtConstWords.JOB);
workOrderAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
workOrderAssemblyRepository.insert(workOrderAssembly);
workOrderAssemblyOffline.setSystemSyncDatetime(now); //补录生产数据
workOrderAssemblyOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); workOrderOfflineList.forEach(o -> doRestoreWorkOrderOfflineData(organizeCode, o, getWorkOrderAssemblyOfflineList(workOrderAssemblyOfflineMap, o.getWorkOrderNo()), now));
workOrderAssemblyOfflineRepository.updateNoSync(workOrderAssemblyOffline); }
if (null == workOrderOfflineRestoreRecord) {
workOrderOfflineRestoreRecord = new MesWorkOrderOfflineRestoreRecord();
workOrderOfflineRestoreRecord.setOrganizeCode(organizeCode);
workOrderOfflineRestoreRecord.setWorkOrderNo(workOrderAssemblyOffline.getWorkOrderNo());
workOrderOfflineRestoreRecord.setCustPartNo(workOrderAssemblyOffline.getCustPartNo());
workOrderOfflineRestoreRecord.setWorkCenterCode(workOrderAssemblyOffline.getWorkCenterCode());
}
}
if (StringUtils.isEmpty(workOrderOfflineRestoreRecord.getWorkOrderId()) && !CollectionUtils.isEmpty(workOrderOfflineMap) && workOrderOfflineMap.containsKey(entry.getKey())) {
MesWorkOrderOffline workOrderOffline = workOrderOfflineMap.get(entry.getKey());
MesWorkOrder workOrder = new MesWorkOrder(); workOrderAssemblyOfflineList = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null :
BeanUtils.copyProperties(workOrderOffline, workOrder, MesPcnExtConstWords.ID); workOrderAssemblyOfflineList.stream().filter(o -> (null != o && !workOrderNoList.contains(o.getWorkOrderNo()))).collect(Collectors.toList());
workOrder.setUnCompleteQty(new Double(0));
workOrder.setScrapPartQty(new Double(0));
workOrder.setSuspiciousPartQty(new Double(0));
workOrder.setDisassemblyQty(new Double(0));
workOrder.setReportedQty(new Double(0));
workOrder.setCompleteQty(new Double(1));
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
workOrder.setModifyDatetime(now);
workOrder.setModifyUser(MesPcnExtConstWords.JOB);
workOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
workOrder = workOrderRepository.insert(workOrder);
workOrderOffline.setSystemSyncDatetime(now); if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return;
workOrderOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
workOrderOfflineRepository.updateNoSync(workOrderOffline);
workOrderOfflineRestoreRecord.setWorkOrderId(workOrder.getId().toString());
workOrderOfflineRestoreRecord.setCustSn(workOrder.getCustSn());
workOrderOfflineRestoreRecord.setPartNo(workOrder.getPartNo());
}
}
}
//查询工单离线数据
private List<MesWorkOrderOffline> getWorkOrderOfflineList(String organizeCode, Integer qty) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.MODIFY_DATE_TIME}, packBean);
List<MesWorkOrderOffline> workOrderOfflineList = workOrderOfflineRepository.findByHqlTopWhere(packBean, qty);
return workOrderOfflineList;
} }
//查询排序工单装配件离线数据[未同步的数据] //查询工单装配件离线数据
private Map<String, List<MesWorkOrderAssemblyOffline>> getWorkOrderAssemblyOfflineMap(String organizeCode, Integer qty) { private List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(String organizeCode, Integer qty) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean); DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.MODIFY_DATE_TIME}, packBean);
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlTopWhere(packBean, qty); List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlTopWhere(packBean, qty);
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("补录离线生产数据JOB --- 当前没有需要补录的工单装配件离线数据 ---"); return workOrderAssemblyOfflineList;
return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
} }
//查询离线工单补录记录 //查询排序工单装配件离线数据[未同步的数据]
private Map<String, MesWorkOrderOfflineRestoreRecord> getWorkOrderOfflineRestoreRecordMap(String organizeCode, List<String> workOrderNoList) { private Map<String, List<MesWorkOrderAssemblyOffline>> getWorkOrderAssemblyOfflineMap(String organizeCode, List<String> workOrderNoList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
List<MesWorkOrderOfflineRestoreRecord> workOrderOfflineRestoreRecordList = workOrderOfflineRestoreRecordRepository.findByHqlWhere(packBean); List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(workOrderOfflineRestoreRecordList)) return null; if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("--- 异常 --- 补录离线生产工单数据JOB --- 当前没有需要补录的工单装配件离线数据 ---");
workOrderOfflineRestoreRecordList = workOrderOfflineRestoreRecordList.stream().filter(o -> null != o). return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkOrderOfflineRestoreRecord::getWorkOrderNo))), ArrayList::new));
Map<String, MesWorkOrderOfflineRestoreRecord> workOrderOfflineRestoreRecordMap = workOrderOfflineRestoreRecordList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrderOfflineRestoreRecord::getWorkOrderNo, o -> o));
log.info("补录离线生产数据JOB --- 查询到已补录过的生产工单包含: {} ---", workOrderOfflineRestoreRecordMap.keySet().toString());
return workOrderOfflineRestoreRecordMap;
} }
//查询离线工单 private List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap, String workOrderNo) {
private Map<String, MesWorkOrderOffline> getWorkOrderOfflineMap(String organizeCode, List<String> workOrderNoList) { return CollectionUtils.isEmpty(workOrderAssemblyOfflineMap) ? null : workOrderAssemblyOfflineMap.get(workOrderNo);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); }
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
List<MesWorkOrderOffline> workOrderOfflineList = workOrderOfflineRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(workOrderOfflineList)) return null;
workOrderOfflineList = workOrderOfflineList.stream().filter(o -> null != o).
collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkOrderOffline::getWorkOrderNo))), ArrayList::new));
Map<String, MesWorkOrderOffline> workOrderOfflineMap = workOrderOfflineList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrderOffline::getWorkOrderNo, o -> o));
log.info("补录离线生产数据JOB --- 查询到未补录过的生产工单包含: {} ---", workOrderOfflineMap.keySet().toString());
return workOrderOfflineMap;
//补录生产数据
private void doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now) {
log.info("补录离线生产工单数据JOB --- 工单:{} --- START ---", workOrderOffline.getWorkOrderNo());
Boolean result = false;
try {
result = workOrderOfflineRestoreDispatchService.doRestoreWorkOrderOfflineData(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now);
} catch (Exception e) {
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- ERROR --- {}", workOrderOffline.getWorkOrderNo(), e.toString());
} finally {
workOrderOfflineRestoreDispatchService.saveWorkOrderOffline(workOrderOffline, result);
log.info("补录离线生产工单数据JOB --- 工单:{} --- END --- result={} --- MesWorkOrderOffline={}", workOrderOffline.getWorkOrderNo(), result, JSONObject.toJSONString(workOrderOffline));
}
} }
} }

@ -83,7 +83,7 @@ public class AionPrintStrategy implements IPrintTemplateStrategyService {
MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode); MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode);
if (!isStep){ if (!isStep){
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1);
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息 //封装打印信息

@ -74,7 +74,7 @@ public class CustCodeWhqrPrintStrategy implements IPrintTemplateStrategyService
} }
if (!isStep) { if (!isStep) {
genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(), customerPart); genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(), customerPart);
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo()); genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(customerPart.getCustPartNo());
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());

@ -81,7 +81,7 @@ public class GqaaPrintStrategy implements IPrintTemplateStrategyService {
MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode); MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode);
if (!isStep){ if (!isStep){
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1);
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息 //封装打印信息

@ -95,7 +95,7 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService {
* + * +
*/ */
//String custPartNoFormat = stringFormat(custPartNo, 17); //String custPartNoFormat = stringFormat(custPartNo, 17);
genSerialNoModel.setCustPartNo(custPartNo); genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(custPartNo);
//拓展位 2位 00 包含0~9,A~Z 不使用时补“0”填充 {SPILTRULE} //拓展位 2位 00 包含0~9,A~Z 不使用时补“0”填充 {SPILTRULE}
//供应商代码 7位 供应商代码 0~9,A~Z;不足7位 右测补* //供应商代码 7位 供应商代码 0~9,A~Z;不足7位 右测补*
MesConfig supplierConfig = configService.getMesConfigByCfgCodeKeyOrg(MesPcnExtConstWords.SUPPLIER_CODE, MesExtEnumUtil.MES_PRINT_TEMPLATE.GQXNY.getValue(), organizeCode); MesConfig supplierConfig = configService.getMesConfigByCfgCodeKeyOrg(MesPcnExtConstWords.SUPPLIER_CODE, MesExtEnumUtil.MES_PRINT_TEMPLATE.GQXNY.getValue(), organizeCode);

@ -69,7 +69,7 @@ public class InternalBarcodePrintStrategy implements IPrintTemplateStrategyServi
} }
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息 //封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart); MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);

@ -64,7 +64,7 @@ public class MesCommonPrintStrategy implements IPrintTemplateStrategyService {
} }
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息 //封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart); MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);

@ -65,7 +65,7 @@ public class MesDPBarcodeWhPrintStrategy implements IPrintTemplateStrategyServic
if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || Objects.isNull(customerPart)) { if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || Objects.isNull(customerPart)) {
MesPcnException.throwMesBusiException("班次代码或客户零件号未维护"); MesPcnException.throwMesBusiException("班次代码或客户零件号未维护");
} }
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo()); genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(customerPart.getCustPartNo());
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());

@ -74,6 +74,7 @@ public class NoSortBarCodeGzStrategy implements IPrintTemplateStrategyService {
String organizeName = mesConfig.getCfgValue(); String organizeName = mesConfig.getCfgValue();
genSerialNoModel.setRuleCode(numberRule.getRuleCode()); genSerialNoModel.setRuleCode(numberRule.getRuleCode());
genSerialNoModel.setPartNo(partNo); genSerialNoModel.setPartNo(partNo);
genSerialNoModel.setPartSnParam(mesPart.getPartSnParam());
//年月日 yyyyMMdd //年月日 yyyyMMdd
//流水号 4位 每天从1开始 //流水号 4位 每天从1开始
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {

@ -65,7 +65,7 @@ public class WuHanLengDaoPrintStrategy implements IPrintTemplateStrategyService
} }
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty());
//封装打印信息 //封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart); MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);

@ -80,7 +80,7 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
// 返回的结果集合 // 返回的结果集合
List<Map<String, Object>> printDataMapList = new ArrayList<>(); List<Map<String, Object>> printDataMapList = new ArrayList<>();
if (!isStep) { if (!isStep) {
genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(),customerPart); genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(),customerPart).partSnParam(mesPart.getPartSnParam());
for (int i = 0; i < model.getPrintQty(); i++) { for (int i = 0; i < model.getPrintQty(); i++) {
//保存条码信息 //保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, model.getUserName(), model.getOrganizeCode(), 1).getResultList().get(0).toString(), model.getUserName(), model.getQty()); MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, model.getUserName(), model.getOrganizeCode(), 1).getResultList().get(0).toString(), model.getUserName(), model.getQty());

@ -81,6 +81,7 @@ public class XiaoPengNewPrintStrategy implements IPrintTemplateStrategyService {
genSerialNoModel.setMonth(getMonthShort(date)); genSerialNoModel.setMonth(getMonthShort(date));
genSerialNoModel.setDay(getDayShort(date)); genSerialNoModel.setDay(getDayShort(date));
genSerialNoModel.setRuleCode(numberRule.getRuleCode()); genSerialNoModel.setRuleCode(numberRule.getRuleCode());
genSerialNoModel.setPartSnParam(mesPart.getPartSnParam());
//流水号 5位 每天从1开始 //流水号 5位 每天从1开始
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1);

@ -82,6 +82,7 @@ public class XiaoPengPrintStrategy implements IPrintTemplateStrategyService {
genSerialNoModel.setDay(getDayShort(date)); genSerialNoModel.setDay(getDayShort(date));
genSerialNoModel.setRuleCode(numberRule.getRuleCode()); genSerialNoModel.setRuleCode(numberRule.getRuleCode());
genSerialNoModel.setCustPartNo(custPartNo); genSerialNoModel.setCustPartNo(custPartNo);
genSerialNoModel.setPartSnParam(mesPart.getPartSnParam());
//流水号 5位 每天从1开始 //流水号 5位 每天从1开始
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
@ -18,7 +17,10 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.MesFile;
import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -33,7 +35,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
/** /**
* @Description : * @Description :
@ -53,7 +58,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
private IMesProductionCustomContextStepService productionCustomContextStepService; private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired @Autowired
private IMesProdShiftRecordService mesProdShiftRecordService; private IMesProdShiftRecordService prodShiftRecordService;
@Autowired @Autowired
private IMesWorkOrderExtService workOrderExtService; private IMesWorkOrderExtService workOrderExtService;
@ -61,13 +66,8 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
@Autowired @Autowired
private MesFileRepository mesFileRepository; private MesFileRepository mesFileRepository;
@Autowired
private IMesShiftService mesShiftService;
@Override @Override
public void init(StationRequestBean reqBean) { public void init(StationRequestBean reqBean) {
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//获取上下文信息 //获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
@ -77,8 +77,11 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
MesPcnException.throwBusiException(productionProcessContext.getMessage()); MesPcnException.throwBusiException(productionProcessContext.getMessage());
} }
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//获取班次信息,先查询缓存,缓存没有在查询数据库 //获取班次信息,先查询缓存,缓存没有在查询数据库
List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); List<StationKvBean> prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) { if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班!"); MesPcnException.throwBusiException("请先开班!");
@ -108,22 +111,6 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).executeInState(reqBean); ((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).executeInState(reqBean);
} }
private List<StationKvBean> getShiftRecordStationKvBeans(StationRequestBean reqBean) {
// 获取班次信息 redis
List<StationKvBean> prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
MesProdShiftRecord shiftRecord = new MesProdShiftRecord();
shiftRecord.setWorkCenterCode(reqBean.getWorkCenterCode());
shiftRecord.setWorkStatus(MesExtEnumUtil.WORK_STATUS.START.getValue());
// 查询数据库
MesProdShiftRecord prodShiftRecord = mesProdShiftRecordService.queryMesProdShiftRecord(shiftRecord);
if (prodShiftRecord != null) {
prodShiftDataContext = getProdShiftData(prodShiftRecord);
productionCustomContextStepService.dispatchProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(),prodShiftDataContext);
}
}
return prodShiftDataContext;
}
private StationResultBean getStationResultBean(StationRequestBean reqBean, List<List<StationKvBean>> moduleContentContext, List<StationKvBean> prodShiftDataContext) { private StationResultBean getStationResultBean(StationRequestBean reqBean, List<List<StationKvBean>> moduleContentContext, List<StationKvBean> prodShiftDataContext) {
StationResultBean resultBean = new StationResultBean(); StationResultBean resultBean = new StationResultBean();
@ -132,7 +119,6 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT);
resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); resultBean.setSpecialDisplayData(getStepColIndent(reqBean));
resultBean.setResultObj(prodShiftDataContext); resultBean.setResultObj(prodShiftDataContext);
resultBean.setResultList(moduleContentContext); resultBean.setResultList(moduleContentContext);
return resultBean; return resultBean;
@ -205,20 +191,4 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
return true; return true;
} }
//封装展示组件班组班次内容
private List<StationKvBean> getProdShiftData(MesProdShiftRecord record) {
List<StationKvBean> stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()),
new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()),
new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()),
new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName()));
//班次开始时间 ,班次结束时间
Map<String, String> shiftTimeMap = mesShiftService.getShiftTimeMap(record);
if (!java.util.Objects.isNull(shiftTimeMap)) {
StationKvBeanUtil.addStationKvBeanList(stationKvBeans,
new StationKvBean(MesPcnExtConstWords.START_TIME,"开始时间",shiftTimeMap.get(MesPcnExtConstWords.START_TIME)),
new StationKvBean(MesPcnExtConstWords.END_TIME,"结束时间",shiftTimeMap.get(MesPcnExtConstWords.END_TIME)));
}
return stationKvBeans;
}
} }

@ -1,24 +1,22 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesQueueOrderModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesQueueOrderModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.tool.CheckTool; import cn.estsh.i3plus.platform.common.tool.CheckTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
@ -54,16 +52,22 @@ public class MesProductionSortModuleService extends BaseModuleService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService; private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired @Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService; private IMesProdShiftRecordService prodShiftRecordService;
@Autowired
private IMesProdShiftRecordService mesProdShiftRecordService;
@Autowired @Autowired
private MesQueueOrderRepository queueOrderRepository; private MesQueueOrderRepository queueOrderRepository;
@Override @Override
public void init(StationRequestBean reqBean) { public void init(StationRequestBean reqBean) {
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
MesPcnException.throwBusiException(productionProcessContext.getMessage());
}
// 获取工单信息 // 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
@ -73,7 +77,7 @@ public class MesProductionSortModuleService extends BaseModuleService {
productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> o.getForeignKey() != null).collect(Collectors.toList()); productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> o.getForeignKey() != null).collect(Collectors.toList());
//获取班次信息,先查询缓存,缓存没有在查询数据库 //获取班次信息,先查询缓存,缓存没有在查询数据库
List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); List<StationKvBean> prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) { if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班!"); MesPcnException.throwBusiException("请先开班!");
@ -174,23 +178,6 @@ public class MesProductionSortModuleService extends BaseModuleService {
return queueOrderRepository.getByProperty(packBean); return queueOrderRepository.getByProperty(packBean);
} }
private List<StationKvBean> getShiftRecordStationKvBeans(StationRequestBean reqBean) {
// 获取班次信息 redis
List<StationKvBean> prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
MesProdShiftRecord shiftRecord = new MesProdShiftRecord();
shiftRecord.setWorkCenterCode(reqBean.getWorkCenterCode());
shiftRecord.setWorkStatus(MesExtEnumUtil.WORK_STATUS.START.getValue());
// 查询数据库
MesProdShiftRecord prodShiftRecord = mesProdShiftRecordService.queryMesProdShiftRecord(shiftRecord);
if (prodShiftRecord != null) {
prodShiftDataContext = getProdShiftData(prodShiftRecord);
productionCustomContextStepService.dispatchProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(),prodShiftDataContext);
}
}
return prodShiftDataContext;
}
private StationResultBean getStationResultBean(StationRequestBean reqBean, List<List<StationKvBean>> moduleContentContext, List<StationKvBean> prodShiftDataContext) { private StationResultBean getStationResultBean(StationRequestBean reqBean, List<List<StationKvBean>> moduleContentContext, List<StationKvBean> prodShiftDataContext) {
StationResultBean resultBean = new StationResultBean(); StationResultBean resultBean = new StationResultBean();
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue());
@ -198,19 +185,9 @@ public class MesProductionSortModuleService extends BaseModuleService {
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT);
resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); resultBean.setSpecialDisplayData(getStepColIndent(reqBean));
resultBean.setResultObj(prodShiftDataContext); resultBean.setResultObj(prodShiftDataContext);
resultBean.setResultList(moduleContentContext); resultBean.setResultList(moduleContentContext);
return resultBean; return resultBean;
} }
//封装展示组件班组班次内容
private List<StationKvBean> getProdShiftData(MesProdShiftRecord record) {
return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()),
new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()),
new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()),
new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName()));
}
} }

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
@ -8,6 +9,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
@ -21,9 +23,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -36,6 +36,9 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
private IMesProductionProcessContextStepService productionProcessContextStepService; private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired @Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Autowired
private IShippingDispatchService shippingDispatchService; private IShippingDispatchService shippingDispatchService;
@Override @Override
@ -112,16 +115,35 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
@Override @Override
public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
Map<String, Object> resultMap = new HashMap<>();
//获取生产过程上下文对象 //获取生产过程上下文对象
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
if (!productionProcessContext.getSuccess()) return MesPcnExtConstWords.ONE; //获取班次信息
List<StationKvBean> prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); if (!productionProcessContext.getSuccess()) resultMap.put(MesPcnExtConstWords.CAVITY, MesPcnExtConstWords.ONE);
else {
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
if (null == cellEquipContext) resultMap.put(MesPcnExtConstWords.CAVITY, MesPcnExtConstWords.ONE);
else resultMap.put(MesPcnExtConstWords.CAVITY, cellEquipContext.getCavity());
}
Optional<StationKvBean> startTime = CollectionUtils.isEmpty(prodShiftDataContext) ? null :
prodShiftDataContext.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.START_TIME))).findFirst();
Optional<StationKvBean> endTime = CollectionUtils.isEmpty(prodShiftDataContext) ? null :
prodShiftDataContext.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.END_TIME))).findFirst();
if (null == startTime || !startTime.isPresent() || null == endTime || !endTime.isPresent()) {
resultMap.put(MesPcnExtConstWords.START_TIME, TimeTool.getToday() + MesPcnExtConstWords.DATE_FORMAT_APPEND_0);
resultMap.put(MesPcnExtConstWords.END_TIME, TimeTool.getToday() + MesPcnExtConstWords.DATE_FORMAT_APPEND_24);
} else {
resultMap.put(MesPcnExtConstWords.START_TIME, startTime.get().getValue());
resultMap.put(MesPcnExtConstWords.END_TIME, endTime.get().getValue());
}
if (null == cellEquipContext) return MesPcnExtConstWords.ONE; return resultMap;
return cellEquipContext.getCavity();
} }
} }

@ -233,7 +233,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
} }
private GenSerialNoModel generateGenSerialNoModel(StationRequestBean reqBean, StationResultBean resultBean, String ruleCode, MesPart part) { private GenSerialNoModel generateGenSerialNoModel(StationRequestBean reqBean, StationResultBean resultBean, String ruleCode, MesPart part) {
return new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()) return new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()).partSnParam(part.getPartSnParam())
.putDataMap(MesPart.class.getSimpleName(), part).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); .putDataMap(MesPart.class.getSimpleName(), part).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
} }

@ -0,0 +1,25 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.io.Serializable;
@Data
public class MesProductionRecordOfflineModel implements Serializable {
private static final long serialVersionUID = 5839349920749583082L;
@ApiParam("工位代码")
private String workCellCode;
@ApiParam("加工记录ID")
private String id;
public MesProductionRecordOfflineModel() {}
public MesProductionRecordOfflineModel(String workCellCode, String id) {
this.workCellCode = workCellCode;
this.id = id;
}
}

@ -269,6 +269,8 @@ public class MesPcnExtConstWords {
public static final String OBJECT_CODE = "objectCode"; public static final String OBJECT_CODE = "objectCode";
//影响数量 //影响数量
public static final String EFFECT_NUM = "effectNum"; public static final String EFFECT_NUM = "effectNum";
//组件类型
public static final String MODULE_TYPE = "moduleType";
//BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
@ -301,6 +303,8 @@ public class MesPcnExtConstWords {
public static final String DATE_FORMAT_POINT = "yyyy.MM.dd"; public static final String DATE_FORMAT_POINT = "yyyy.MM.dd";
public static final String DATE_FORMAT_SLASH = "yyyy/MM/dd"; public static final String DATE_FORMAT_SLASH = "yyyy/MM/dd";
public static final String DATE_FORMAT_YY = "yy"; public static final String DATE_FORMAT_YY = "yy";
public static final String DATE_FORMAT_APPEND_0 = " 00:00:00";
public static final String DATE_FORMAT_APPEND_24 = " 23:59:59";
//设备数据变量读写访问配置 //设备数据变量读写访问配置
@ -449,6 +453,9 @@ public class MesPcnExtConstWords {
//. //.
public static final String DECIMAL_POINT = "."; public static final String DECIMAL_POINT = ".";
// 自动初始化工位按钮URL
public static final String AUTO_INIT_WORK_CELL_MODULE_URL = "AUTO_INIT_WORK_CELL_MODULE_URL";
// 分表配置 // 分表配置
public static final String MES_SHARDING_TABLES_OBJECT_CFG = "MES_SHARDING_TABLES_OBJECT_CFG"; public static final String MES_SHARDING_TABLES_OBJECT_CFG = "MES_SHARDING_TABLES_OBJECT_CFG";

Loading…
Cancel
Save