打印 增加零件条码参数属性;离线部分代码提交;选择工单按钮 开始结束查询条件默认值接口返回;

master
王杰 6 months ago
parent a3d92f9372
commit 16d03491d3

@ -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.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description:
* @Author: gsz
@ -14,12 +17,27 @@ import io.swagger.annotations.ApiOperation;
*/
public interface IMesProdShiftRecordService {
@ApiOperation(value = "查询开关班记录")
public ListPager<MesProdShiftRecord> queryMesProdShiftRecordByPager(MesProdShiftRecord partInspection, Pager pager);
@ApiOperation(value = "分页查询开关班记录")
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);
@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 {
@ApiOperation(value = "查询产线与班次的对应关系")
public ListPager<MesShift> queryMesShiftByPager(MesShift mesShift, Pager pager);
ListPager<MesShift> queryMesShiftByPager(MesShift mesShift, Pager pager);
@ApiOperation(value = "查询产线与班次的对应关系")
public List<MesShift> queryMesShift(String organizeCode, String workCenterCode);
List<MesShift> queryMesShift(String organizeCode, String workCenterCode);
@ApiOperation(value = "获取当前班次时间日期")
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 {
/**
* 线JOB
* 线JOB
* @param paramMap
*/
void doRestoreWorkOrderOfflineData(Map<String, String> paramMap);

@ -1,31 +1,19 @@
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.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.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
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.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.google.common.base.Objects;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description:
* @Author: gsz
@ -35,20 +23,14 @@ import java.util.Map;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProdShiftRecord")
public class MesProdShiftRecordController {
@Autowired
private IMesProdShiftRecordService mesProdShiftRecordService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesShiftService mesShiftService;
private IMesProdShiftRecordService mesProdShiftRecordService;
@GetMapping("/query-pager")
@ApiOperation(value = "查询开关班记录")
public ResultBean queryMesProdShiftRecordByPager(MesProdShiftRecord mesProdShiftRecord, Pager pager) {
try {
mesProdShiftRecord.setOrganizeCode(AuthUtil.getOrganizeCode());
ListPager<MesProdShiftRecord> partInspectionListPager = mesProdShiftRecordService.queryMesProdShiftRecordByPager(mesProdShiftRecord, pager);
return ResultBean.success("查询成功").setListPager(partInspectionListPager);
} catch (ImppBusiException imppException) {
@ -65,16 +47,12 @@ public class MesProdShiftRecordController {
try {
// 数据校验
ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空");
ValidatorBean.checkNotNull(item.getUserInfo(), "操作人不能为空");
ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" );
ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空");
ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空");
mesProdShiftRecordService.insertMesProdShiftRecord(item, AuthUtil.getOrganizeCode());
List<StationKvBean> getProdShiftData = getProdShiftData(item);
productionCustomContextStepService.dispatchProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData);
mesProdShiftRecordService.insertMesProdShiftRecord(item);
return ResultBean.success("保存开关班记录成功");
} catch (ImppBusiException imppException) {
@ -91,15 +69,12 @@ public class MesProdShiftRecordController {
try {
// 数据校验
ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空");
ValidatorBean.checkNotNull(item.getUserInfo(), "操作人不能为空");
ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" );
ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空");
ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空");
mesProdShiftRecordService.saveMesProdShiftRecord(item, AuthUtil.getOrganizeCode());
if (Objects.equal(MesExtEnumUtil.WORK_STATUS.END.getValue(), item.getWorkStatus())) {
productionCustomContextStepService.removeProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode());
}
mesProdShiftRecordService.saveMesProdShiftRecord(item);
return ResultBean.success("保存开关班记录成功");
} catch (ImppBusiException imppException) {
@ -108,11 +83,11 @@ public class MesProdShiftRecordController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping(value = "/query-prod-shift-record")
@ApiOperation(value = "查询零件生产组")
@ApiOperation(value = "查询开关班记录")
public ResultBean queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord) {
try {
mesProdShiftRecord.setOrganizeCode(mesProdShiftRecord.getOrganizeCode());
//查询汇总工单数量
MesProdShiftRecord mesPartProdGroup= mesProdShiftRecordService.queryMesProdShiftRecord(mesProdShiftRecord);
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
@DisallowConcurrentExecution
@Component
@ApiOperation("补录离线生产数据JOB")
@ApiOperation("补录离线生产工单数据JOB")
public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
public MesWorkOrderOfflineRestoreJob() {
super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产数据JOB");
super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产工单数据JOB");
}
@Autowired
@ -41,14 +41,14 @@ public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
String jobParam = this.getJobParam();
if (StringUtils.isEmpty(jobParam)) {
log.info("补录离线生产数据JOB --- 参数为空 ---");
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 参数为空 ---");
return;
}
Map<String, String> paramMap = JSONObject.parseObject(jobParam, Map.class);
if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) {
log.info("补录离线生产数据JOB --- 参数未配置:工厂代码[organizeCode] ---");
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 参数未配置:工厂代码[organizeCode] ---");
return;
}
@ -62,13 +62,13 @@ public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
} catch (Exception e) {
log.info("补录离线生产数据JOB --- ERROR --- {} ---", e.toString());
log.info("--- 异常 --- 补录离线生产工单数据JOB --- ERROR --- {} ---", e.toString());
} finally {
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.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.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.exception.ImppExceptionEnum;
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.util.StringUtil;
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.MesDowntimeRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdShiftRecordRepository;
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 lombok.extern.slf4j.Slf4j;
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.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -55,6 +62,12 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
@Autowired
private IMesEquipmentExtService mesEquipmentExtService;
@Autowired
private IMesShiftService mesShiftService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Override
public ListPager<MesProdShiftRecord> queryMesProdShiftRecordByPager(MesProdShiftRecord bean, Pager pager) {
@ -75,7 +88,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
}
@Override
public void insertMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) {
public void insertMesProdShiftRecord(MesProdShiftRecord item) {
//唯一性校验
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean);
@ -91,12 +104,17 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
item.getWorkCenterCode(), item.getShiftGroup())
.build();
}
ConvertBean.serviceModelInitialize(item, AuthUtil.getSessionUser().getUserName());
ConvertBean.serviceModelInitialize(item, item.getUserInfo());
mesProdShiftRecordRDao.insert(item);
//缓存班次数据
productionCustomContextStepService.dispatchProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData(item));
}
//如果结班,会清除缓存中的班次数据
@Override
public void saveMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) {
public void saveMesProdShiftRecord(MesProdShiftRecord item) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringEqualPack(item.getShiftGroup(), "shiftGroup", packBean);
@ -117,12 +135,12 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
mesProdShiftRecord.setShiftCode(item.getShiftCode());
mesProdShiftRecord.setEndTime(item.getEndTime());
mesProdShiftRecord.setWorkStatus(item.getWorkStatus());
ConvertBean.serviceModelUpdate(mesProdShiftRecord, AuthUtil.getSessionUser().getUserName());
ConvertBean.serviceModelUpdate(mesProdShiftRecord, item.getUserInfo());
mesProdShiftRecordRDao.update(mesProdShiftRecord);
//结班后, 系统生产一条停机记录,原因:无订单停机
MesConfig reasonCfg = configRepository.getByProperty(
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 = "";
if (!Objects.isNull(reasonCfg) && StringUtils.isEmpty(reasonCfg.getCfgValue())) {
@ -130,19 +148,19 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
}
MesConfig typeCfg = configRepository.getByProperty(
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 = "";
if (!Objects.isNull(typeCfg) && StringUtils.isEmpty(typeCfg.getCfgValue())) {
type = typeCfg.getCfgValue();
}
List<MesWcEquipment> wcEquipmentDbList = wcEquipmentRepository.findByProperty(
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)) {
MesPcnException.throwMesBusiException("产线【%s】工位设备信息不存在", item.getWorkCenterCode());
}
for (MesWcEquipment mesWcEquipment : wcEquipmentDbList) {
DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(organizeCode);
DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWcEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanDowntime);
if (!StringUtil.isEmpty(reason)) {
DdlPreparedPack.getStringEqualPack(reason, "reasonCode", ddlPackBeanDowntime);
@ -152,13 +170,13 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
}
MesDowntimeRecord mesDowntimeRecordDao = mesDowntimeRecordRDao.getByProperty(ddlPackBeanDowntime);
if (Objects.isNull(mesDowntimeRecordDao)) {
MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(organizeCode, mesWcEquipment.getEquipmentCode());
MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(item.getOrganizeCode(), mesWcEquipment.getEquipmentCode());
if (Objects.isNull(mesEquipment)) {
MesPcnException.throwMesBusiException("设备【%s】信息不存在", mesWcEquipment.getEquipmentCode());
}
//新增设备停机记录
MesDowntimeRecord mesDowntimeRecord = new MesDowntimeRecord();
mesDowntimeRecord.setOrganizeCode(organizeCode);
mesDowntimeRecord.setOrganizeCode(item.getOrganizeCode());
mesDowntimeRecord.setEquipId(mesEquipment.getEquipId());
mesDowntimeRecord.setEquipmentCode(mesEquipment.getEquipmentCode());
mesDowntimeRecord.setAreaCode(item.getAreaCode());
@ -166,7 +184,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
mesDowntimeRecord.setWorkCellCode(mesWcEquipment.getWorkCellCode());
mesDowntimeRecord.setReasonCode(StringUtil.isEmpty(reason) ? "" : reason);
mesDowntimeRecord.setReasonTypeCode(StringUtil.isEmpty(type) ? "" : type);
ConvertBean.serviceModelInitialize(mesDowntimeRecord, AuthUtil.getSessionUser().getUserName());
ConvertBean.serviceModelInitialize(mesDowntimeRecord, item.getUserInfo());
mesDowntimeRecordRDao.insert(mesDowntimeRecord);
// //将当前新增数据的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);
}
@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);
return shiftTimeMap;
}
}

@ -957,7 +957,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
}
mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty());
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());
//记录条码表&加工记录表
@ -987,7 +987,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (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());
//试制单不报工
@ -1245,8 +1245,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
}
private String getReportSn(String organizeCode,String userName) {
return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString();
private String getReportSn(String organizeCode, String userName, MesPart part) {
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,

@ -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;
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.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.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
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.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.MesWorkOrderOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRestoreRecordRepository;
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.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@ -39,133 +33,97 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
private MesWorkOrderOfflineRepository workOrderOfflineRepository;
@Autowired
private MesWorkOrderOfflineRestoreRecordRepository workOrderOfflineRestoreRecordRepository;
@Autowired
private MesWorkOrderAssemblyRepository workOrderAssemblyRepository;
@Autowired
private MesWorkOrderRepository workOrderRepository;
private IMesWorkOrderOfflineRestoreDispatchService workOrderOfflineRestoreDispatchService;
@Override
public void doRestoreWorkOrderOfflineData(Map<String, String> paramMap) {
//参数 工厂
String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE);
//参数 处理数据量
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);
for (Map.Entry<String, List<MesWorkOrderAssemblyOffline>> entry : workOrderAssemblyOfflineMap.entrySet()) {
if (null == entry) continue;
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);
if (CollectionUtils.isEmpty(workOrderNoList)) {
//查询排序工单装配件离线数据[未同步的数据] 根据工单号分组
Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, workOrderNoList);
workOrderAssemblyOffline.setSystemSyncDatetime(now);
workOrderAssemblyOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
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());
//补录生产数据
workOrderOfflineList.forEach(o -> doRestoreWorkOrderOfflineData(organizeCode, o, getWorkOrderAssemblyOfflineList(workOrderAssemblyOfflineMap, o.getWorkOrderNo()), now));
}
MesWorkOrder workOrder = new MesWorkOrder();
BeanUtils.copyProperties(workOrderOffline, workOrder, MesPcnExtConstWords.ID);
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);
workOrderAssemblyOfflineList = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null :
workOrderAssemblyOfflineList.stream().filter(o -> (null != o && !workOrderNoList.contains(o.getWorkOrderNo()))).collect(Collectors.toList());
workOrderOffline.setSystemSyncDatetime(now);
workOrderOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
workOrderOfflineRepository.updateNoSync(workOrderOffline);
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return;
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);
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);
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("补录离线生产数据JOB --- 当前没有需要补录的工单装配件离线数据 ---");
return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
return workOrderAssemblyOfflineList;
}
//查询离线工单补录记录
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);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
List<MesWorkOrderOfflineRestoreRecord> workOrderOfflineRestoreRecordList = workOrderOfflineRestoreRecordRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(workOrderOfflineRestoreRecordList)) return null;
workOrderOfflineRestoreRecordList = workOrderOfflineRestoreRecordList.stream().filter(o -> null != o).
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;
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("--- 异常 --- 补录离线生产工单数据JOB --- 当前没有需要补录的工单装配件离线数据 ---");
return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
}
//查询离线工单
private Map<String, MesWorkOrderOffline> getWorkOrderOfflineMap(String organizeCode, List<String> workOrderNoList) {
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 List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap, String workOrderNo) {
return CollectionUtils.isEmpty(workOrderAssemblyOfflineMap) ? null : workOrderAssemblyOfflineMap.get(workOrderNo);
}
//补录生产数据
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);
if (!isStep){
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());
//封装打印信息

@ -74,7 +74,7 @@ public class CustCodeWhqrPrintStrategy implements IPrintTemplateStrategyService
}
if (!isStep) {
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++) {
//保存条码信息
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);
if (!isStep){
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());
//封装打印信息

@ -95,7 +95,7 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService {
* +
*/
//String custPartNoFormat = stringFormat(custPartNo, 17);
genSerialNoModel.setCustPartNo(custPartNo);
genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(custPartNo);
//拓展位 2位 00 包含0~9,A~Z 不使用时补“0”填充 {SPILTRULE}
//供应商代码 7位 供应商代码 0~9,A~Z;不足7位 右测补*
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++) {
//保存条码信息
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);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);

@ -64,7 +64,7 @@ public class MesCommonPrintStrategy implements IPrintTemplateStrategyService {
}
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);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);

@ -65,7 +65,7 @@ public class MesDPBarcodeWhPrintStrategy implements IPrintTemplateStrategyServic
if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || Objects.isNull(customerPart)) {
MesPcnException.throwMesBusiException("班次代码或客户零件号未维护");
}
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(customerPart.getCustPartNo());
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());

@ -74,6 +74,7 @@ public class NoSortBarCodeGzStrategy implements IPrintTemplateStrategyService {
String organizeName = mesConfig.getCfgValue();
genSerialNoModel.setRuleCode(numberRule.getRuleCode());
genSerialNoModel.setPartNo(partNo);
genSerialNoModel.setPartSnParam(mesPart.getPartSnParam());
//年月日 yyyyMMdd
//流水号 4位 每天从1开始
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++) {
//保存条码信息
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);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel);

@ -80,7 +80,7 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
// 返回的结果集合
List<Map<String, Object>> printDataMapList = new ArrayList<>();
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++) {
//保存条码信息
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.setDay(getDayShort(date));
genSerialNoModel.setRuleCode(numberRule.getRuleCode());
genSerialNoModel.setPartSnParam(mesPart.getPartSnParam());
//流水号 5位 每天从1开始
for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) {
ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1);

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

@ -1,7 +1,6 @@
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.IMesShiftService;
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.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.MesPcnEnumUtil;
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.StationRequestBean;
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.StringUtils;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
/**
* @Description :
@ -53,7 +58,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesProdShiftRecordService mesProdShiftRecordService;
private IMesProdShiftRecordService prodShiftRecordService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@ -61,13 +66,8 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
@Autowired
private MesFileRepository mesFileRepository;
@Autowired
private IMesShiftService mesShiftService;
@Override
public void init(StationRequestBean reqBean) {
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
@ -77,8 +77,11 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
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)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班!");
@ -108,22 +111,6 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
((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) {
StationResultBean resultBean = new StationResultBean();
@ -132,7 +119,6 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT);
resultBean.setSpecialDisplayData(getStepColIndent(reqBean));
resultBean.setResultObj(prodShiftDataContext);
resultBean.setResultList(moduleContentContext);
return resultBean;
@ -205,20 +191,4 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
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;
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.IMesProductionProcessContextStepService;
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.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesQueueOrderModel;
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.IStepService;
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.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
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.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
@ -54,16 +52,22 @@ public class MesProductionSortModuleService extends BaseModuleService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesProdShiftRecordService mesProdShiftRecordService;
private IMesProdShiftRecordService prodShiftRecordService;
@Autowired
private MesQueueOrderRepository queueOrderRepository;
@Override
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);
@ -73,7 +77,7 @@ public class MesProductionSortModuleService extends BaseModuleService {
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)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
MesPcnException.throwBusiException("请先开班!");
@ -174,23 +178,6 @@ public class MesProductionSortModuleService extends BaseModuleService {
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) {
StationResultBean resultBean = new StationResultBean();
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.setSpecialDisplayData(getStepColIndent(reqBean));
resultBean.setResultObj(prodShiftDataContext);
resultBean.setResultList(moduleContentContext);
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;
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.pojo.context.MesCellEquipContext;
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.function.IFsmModuleFunctionService;
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.pojo.base.enumutil.CommonEnumUtil;
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.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -36,6 +36,9 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Autowired
private IShippingDispatchService shippingDispatchService;
@Override
@ -112,16 +115,35 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen
@Override
public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
Map<String, Object> resultMap = new HashMap<>();
//获取生产过程上下文对象
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) {
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());
}

@ -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 EFFECT_NUM = "effectNum";
//组件类型
public static final String MODULE_TYPE = "moduleType";
//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_SLASH = "yyyy/MM/dd";
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 = ".";
// 自动初始化工位按钮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";

Loading…
Cancel
Save