diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java index 6366f2e..27a535d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java @@ -2,12 +2,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesSortShippingCheckService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.log.MesServiceBusiScanLogService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesRedisLockUtil; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.repository.MesServiceBusiScanLogRepository; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -16,6 +18,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -32,11 +35,16 @@ public class MesSortShippingCheckController { @Autowired private MesRedisLockUtil redisLockUtil; + @Autowired + private MesServiceBusiScanLogRepository mesServiceBusiScanLogRepository; + private static final String key = ":BUSI_LOCK:SORT_SHIPPING_CHECK:"; @GetMapping("/query-loading-order") @ApiOperation(value = "查询发运单") public ResultBean queryLoadingOrderNo(MesShippingOrderManagement shippingOrderManagement) { + MesServiceBusiScanLogService scanLogUtil = new MesServiceBusiScanLogService(MesSortShippingCheckController.class); + scanLogUtil.setMesServiceBusiScanLogRepository(mesServiceBusiScanLogRepository); Boolean lockFlg = false; String moduleKey = null; @@ -49,25 +57,32 @@ public class MesSortShippingCheckController { organizeCode = !StringUtils.isEmpty(shippingOrderManagement.getOrganizeCode()) ? shippingOrderManagement.getOrganizeCode() : AuthUtil.getOrganize().getOrganizeCode(); userInfo = !StringUtils.isEmpty(shippingOrderManagement.getUserInfo()) ? shippingOrderManagement.getUserInfo() : AuthUtil.getSessionUser().getUserName(); - + scanLogUtil.setOrderNo(shippingOrderManagement.getShippingCode()); + scanLogUtil.setOrganizeCode(organizeCode); + scanLogUtil.setUserName(userInfo); moduleKey = organizeCode + key + "SHIPPING_CODE:" + shippingOrderManagement.getShippingCode(); - log.info("工厂:{} 排序发运扫描发运单 --- {} --- START --- 操作人:{} --- THREAD:{}", organizeCode, moduleKey, userInfo, Thread.currentThread().getName()); + scanLogUtil.info(String.format("工厂:%s 排序发运扫描发运单 --- %s --- START --- 操作人:%s --- THREAD:%s", organizeCode, moduleKey, userInfo, Thread.currentThread().getName())); //加锁 lockFlg = redisLockUtil.redisLock(moduleKey); - log.info("工厂:{} 排序发运扫描发运单 --- {} --- LOCKED --- 操作人:{} --- THREAD:{}", organizeCode, moduleKey, userInfo, Thread.currentThread().getName()); + scanLogUtil.info(String.format("工厂:%s 排序发运扫描发运单 --- %s --- LOCKED --- 操作人:%s --- THREAD:%s", organizeCode, moduleKey, userInfo, Thread.currentThread().getName())); // 数据校验 ValidatorBean.checkNotNull(shippingOrderManagement.getShippingCode(), "发运单不能为空"); shippingOrderManagement.setOrganizeCode(organizeCode); ConvertBean.serviceModelUpdate(shippingOrderManagement, userInfo); + long start = System.currentTimeMillis(); MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement); + long end = System.currentTimeMillis(); + scanLogUtil.info("扫描发运单执行结束", end - start); return ResultBean.success(model.getMsg()).setResultObject(model); } catch (ImppBusiException imppException) { + scanLogUtil.error(imppException.getErrorMsg()); return ResultBean.fail(imppException); } catch (Exception e) { + scanLogUtil.error(ExceptionUtils.getStackTrace(e)); return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } finally { //解锁 @@ -75,12 +90,15 @@ public class MesSortShippingCheckController { redisLockUtil.redisUnLock(lockFlg, moduleKey); log.info("工厂:{} 排序发运扫描发运单 --- {} --- UNLOCK --- 操作人:{} --- THREAD:{}", organizeCode, moduleKey, userInfo, Thread.currentThread().getName()); } + scanLogUtil.flush(); } } @PostMapping("/scan-sn") @ApiOperation(value = "扫描条码") public ResultBean saveSn(@RequestBody MesSortShippingCheckModel model) { + MesServiceBusiScanLogService scanLogUtil = new MesServiceBusiScanLogService(MesSortShippingCheckController.class); + scanLogUtil.setMesServiceBusiScanLogRepository(mesServiceBusiScanLogRepository); Boolean lockFlg = false; String moduleKey = null; @@ -93,15 +111,19 @@ public class MesSortShippingCheckController { organizeCode = !StringUtils.isEmpty(model.getOrganizeCode()) ? model.getOrganizeCode() : AuthUtil.getOrganize().getOrganizeCode(); userInfo = !StringUtils.isEmpty(model.getUserInfo()) ? model.getUserInfo() : AuthUtil.getSessionUser().getUserName(); + scanLogUtil.setOrderNo(model.getShippingCode()); + scanLogUtil.setOrganizeCode(organizeCode); + scanLogUtil.setUserName(userInfo); + scanLogUtil.setSn(model.getSn()); //增加单据锁 moduleKey = organizeCode + key + "SHIPPING_CODE:" + model.getShippingCode(); - log.info("工厂:{} 排序发运扫描条码 --- {} --- START --- 操作人:{} --- THREAD:{}", organizeCode, model.getSn(), userInfo, Thread.currentThread().getName()); + scanLogUtil.info(String.format("工厂:%s 排序发运扫描条码 --- %s --- START --- 操作人:%s --- THREAD:%s", organizeCode, model.getSn(), userInfo, Thread.currentThread().getName())); //加锁 lockFlg = redisLockUtil.redisLock(moduleKey); - log.info("工厂:{} 排序发运扫描条码 --- {} --- LOCKED --- 操作人:{} --- THREAD:{}", organizeCode, model.getSn(), userInfo, Thread.currentThread().getName()); + scanLogUtil.info(String.format("工厂:%s 排序发运扫描条码 --- %s --- LOCKED --- 操作人:%s --- THREAD:%s", organizeCode, model.getSn(), userInfo, Thread.currentThread().getName())); // 数据校验 ValidatorBean.checkNotNull(model.getShippingCode(), "发运单不能为空"); @@ -109,11 +131,16 @@ public class MesSortShippingCheckController { ValidatorBean.checkNotNull(model.getSn(), "条码不能为空"); model.setOrganizeCode(organizeCode); model.setUserInfo(userInfo); + long start = System.currentTimeMillis(); sortShippingCheckService.saveSn(model); + long end = System.currentTimeMillis(); + scanLogUtil.info("扫描发运条码执行结束", end - start); return ResultBean.success(model.getMsg()).setResultObject(model); } catch (ImppBusiException imppException) { + scanLogUtil.error(imppException.getErrorMsg()); return ResultBean.fail(imppException); } catch (Exception e) { + scanLogUtil.error(ExceptionUtils.getStackTrace(e)); return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } finally { //解锁 @@ -121,6 +148,7 @@ public class MesSortShippingCheckController { redisLockUtil.redisUnLock(lockFlg, moduleKey); log.info("工厂:{} 排序发运扫描条码 --- {} --- UNLOCK --- 操作人:{} --- THREAD:{}", organizeCode, model.getSn(), userInfo, Thread.currentThread().getName()); } + scanLogUtil.flush(); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java index d389ce6..6191816 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPartServiceImpl.java @@ -68,6 +68,7 @@ public class MesPartServiceImpl implements IMesPartService { @Override public MesPartSap getMesPartSapByPartNo(String partNo, String organizeCode) { + if(StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo)) return null; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean); MesPartSap mesPartSap = mesPartSapRDao.getByProperty(packBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index 2d7bb9b..06b177c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesInputDefectRecordService; @@ -111,6 +112,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService private MesWorkOrderRepository workOrderRepository; @Autowired private IMesWorkOrderExtService workOrderExtService; + + @Autowired + private IMesPartService mesPartService; + @Override public MesPartInspectionViewModel queryPartInspection(MesPartInspectionInputModel inputModel, String org) { @@ -237,6 +242,9 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService if(!StringUtils.isEmpty(model.getPartInspection())){ model.getPartInspection().setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); } + if(!Objects.isNull(model.getPart())){ + model.setPart(mesPartService.getMesPartSapByPartNo(model.getPart().getPartNo(), model.getOrganizeCode())); + } //零件检测详情为空,则代表本次校验为合格。 if (CollectionUtils.isEmpty(model.getPartInspectionDetailList())) { MesPartInspection partInspection; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java index df2edc7..60ea512 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService; @@ -112,6 +113,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { @Autowired private MesWorkOrderRepository workOrderRepository; + + @Autowired + private IMesPartService mesPartService; @Override public ListPager queryPartInspectionByPager(MesPartInspection partInspection, Pager pager) { @@ -167,8 +171,7 @@ public class MesNcProcessingService implements IMesNcProcessingService { public List queryPerson(String org) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.DEFECT_CATEGORY.RESPONSIBILITY.getValue(), "defectType", packBean); - List defectTypeList = defectTypeRepository.findByHqlWhere(packBean); - return defectTypeList; + return defectTypeRepository.findByHqlWhere(packBean); } @Override @@ -183,7 +186,9 @@ public class MesNcProcessingService implements IMesNcProcessingService { @Override public void saveNc(MesNcProcessingInputModel model, String org, boolean isOrder) { - + if(!Objects.isNull(model.getPart())){ + model.setPart(mesPartService.getMesPartSapByPartNo(model.getPart().getPartNo(), model.getOrganizeCode())); + } if (model.getPartInspection().getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { Integer type = model.getType(); MesDefectType person = StringUtil.isEmpty(model.getPerson())?new MesDefectType():model.getPerson(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java index 0fc5afb..f3f8990 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -204,7 +204,7 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); } pullingOrderInfo.setWorkOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):""); - pullingOrderInfo.setWorkOrderNo(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):""); + pullingOrderInfo.setWorkOrderNoPre(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):""); pullingOrderInfo.setCustOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getCustOrderNo())?pullingOrderInfo.getCustOrderNo().substring(pullingOrderInfo.getCustOrderNo().length() - MesPcnExtConstWords.FOUR):""); pullingOrderInfo.setPartName("车型:"+pullingOrderInfo.getPartName()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/log/MesServiceBusiScanLogService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/log/MesServiceBusiScanLogService.java new file mode 100644 index 0000000..515dbe4 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/log/MesServiceBusiScanLogService.java @@ -0,0 +1,86 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.log; + +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.mes.bean.MesServiceBusiScanLog; +import cn.estsh.i3plus.pojo.mes.repository.MesServiceBusiScanLogRepository; +import lombok.Data; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class MesServiceBusiScanLogService { + private Logger LOGGER = null; + + private MesServiceBusiScanLogRepository mesServiceBusiScanLogRepository; + private String orderNo = ""; + private String sn = ""; + private String organizeCode = ""; + private String userName = ""; + private String callClass = ""; + private String callFun = ""; + + private static final String INFO = "INFO"; + private static final String ERROR = "ERROR"; + + private List mesServiceBusiScanLogs = new ArrayList<>(); + + public MesServiceBusiScanLogService() { + mesServiceBusiScanLogs.clear(); + } + + public MesServiceBusiScanLogService(Class clazz) { + this(); + LOGGER = LoggerFactory.getLogger(clazz); + this.callClass = clazz.getSimpleName(); + } + + //正常信息 + public void info(String msg) { + saveToDb(msg, 0, INFO); + LOGGER.info(msg); + } + + public void info(String msg, long duration) { + saveToDb(msg, Integer.parseInt(duration + ""), INFO); + LOGGER.info(msg); + } + + //错误日志 + public void error(String msg) { + saveToDb(msg, 0, ERROR); + LOGGER.error(msg); + } + + /** + * @param msg + */ + public void saveToDb(String msg, Integer duration, String logType) { + MesServiceBusiScanLog serviceLog = new MesServiceBusiScanLog(); + serviceLog.setOrderNo(this.orderNo); + serviceLog.setSn(this.sn); + serviceLog.setDuration(duration); + serviceLog.setOrganizeCode(this.organizeCode); + serviceLog.setCallClass(this.callClass); + serviceLog.setCallFun(this.callFun); + serviceLog.setMessage(msg); + serviceLog.setLogType(logType); + ConvertBean.serviceModelInitialize(serviceLog, this.userName); + + mesServiceBusiScanLogs.add(serviceLog); + } + + /** + * 保存所有日志到数据库 + */ + public void flush() { + if (mesServiceBusiScanLogs != null && mesServiceBusiScanLogs.size() > 0) { + if (mesServiceBusiScanLogRepository != null) { + mesServiceBusiScanLogRepository.saveAll(mesServiceBusiScanLogs); + mesServiceBusiScanLogs.clear(); + } + } + } +}