增加包装条码现品票打印类

dev
yxw 1 year ago
parent 67763547f8
commit ef4c7c2517

@ -144,15 +144,8 @@ public class SxWorkOrderExtController extends MesPcnBaseController {
RLock lock = (RLock) redisMesPcn.getFairLock(key);
try {
ValidatorBean.checkNotNull(workOrderNo, "工单号不能为空");
ValidatorBean.checkNotNull(qty, "报工数量不能为空");
ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空");
ValidatorBean.checkNotNull(userName, "用户名不能为空");
try {
if (!lock.tryLock(20, 180, TimeUnit.SECONDS)) {
LOGGER.info("PCN对工单进行手动报工操作:尝试锁定JOB:工厂代码[{}]等待超时,超时原因:当前JOB正在执行不能并发操作", organizeCode);
LOGGER.info("PCN对工单进行手动报工操作:尝试锁定JOB:工厂代码[{}]等待超时,超时原因:当前正在执行不能并发操作", organizeCode);
return ResultBean.fail(ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.QMS.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
@ -160,7 +153,7 @@ public class SxWorkOrderExtController extends MesPcnBaseController {
.build());
}
} catch (Exception e) {
LOGGER.info("PCN对工单进行手动报工操作:尝试锁定JOB:工厂代码[{}]等待超时,超时原因:当前JOB正在执行不能并发操作,失败原因:[{}]", organizeCode, e.getMessage());
LOGGER.info("PCN对工单进行手动报工操作:尝试锁定JOB:工厂代码[{}]等待超时,超时原因:当前正在执行不能并发操作,失败原因:[{}]", organizeCode, e.getMessage());
return ResultBean.fail(ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.QMS.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
@ -168,6 +161,13 @@ public class SxWorkOrderExtController extends MesPcnBaseController {
.build());
}
try {
ValidatorBean.checkNotNull(workOrderNo, "工单号不能为空");
ValidatorBean.checkNotNull(qty, "报工数量不能为空");
ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空");
ValidatorBean.checkNotNull(userName, "用户名不能为空");
workOrderExtService.doManualReport(workOrderNo, qty, organizeCode, userName);
return ResultBean.success("手动报工成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException imppException) {

@ -149,11 +149,11 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
@Transactional(rollbackFor = Exception.class)
public void insertManualGenerate(GenerateWorkOrderDto workOrderDto) {
MesWorkOrderExt mesWorkOrderExt = new MesWorkOrderExt();
Double qty = workOrderDto.getQty();
Double planQty = workOrderDto.getPlanQty();
if (planQty > qty) {
throw new BaseImppException("计划返工数量不能大于计划生产数量");
}
checkReworkQty(workOrderDto);
checkReworkOrderBindSn(workOrderDto);
BeanUtils.copyProperties(workOrderDto, mesWorkOrderExt);
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
@ -162,35 +162,41 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
insertNewWorkOrder(mesWorkOrderExt);
}
private List<MesProduceSnExt> checkReworkOrderBindSn(GenerateWorkOrderDto workOrderDto) {
if (StringUtils.isEmpty(workOrderDto.getProduceSnStart()) || StringUtils.isEmpty(workOrderDto.getProduceSnEnd())) return null;
List<MesProduceSnExt> produceSnExtList = new ArrayList<>();
return produceSnExtList;
}
private void checkReworkQty(GenerateWorkOrderDto workOrderDto) {
Double qty = workOrderDto.getQty();
Double planQty = workOrderDto.getPlanQty();
if (planQty > qty) {
throw new BaseImppException("计划返工数量不能大于计划生产数量");
}
}
private void insertNewWorkOrder(MesWorkOrderExt mesWorkOrderExt) {
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
Integer workOrderType = mesWorkOrderExt.getWorkOrderType();
MesPartExt partExt = partExtService.getPartExt(organizeCode, mesWorkOrderExt.getPartNo());
if (partExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("物料【】号不存在", mesWorkOrderExt.getPartNo())
.build();
}
MesPartExt partExt = getMesPartExt(mesWorkOrderExt, organizeCode);
//如果是返工工单 设置是否生成条码为不生成
if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrderType) {
mesWorkOrderExt.setSnCreateStatus(MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.NO_CREATE.getValue());
} else {
//不是返工工单
//判断物料是否需要生成条码
//if (!ObjectUtils.isEmpty(partExt))
Integer isCreateSn = partExt.getIsCreateSn();
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isCreateSn) {
mesWorkOrderExt.setSnCreateStatus(MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue());
} else {
mesWorkOrderExt.setSnCreateStatus(MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.NO_CREATE.getValue());
}
if (partExt.getIsCreateSn() != null && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == partExt.getIsCreateSn()) mesWorkOrderExt.setSnCreateStatus(MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue());
else mesWorkOrderExt.setSnCreateStatus(MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.NO_CREATE.getValue());
}
mesWorkOrderExt.setWorkOrderStatus(MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue());
mesWorkOrderExt.setOrganizeCode(organizeCode);
// mesWorkOrderExt.setSeq(getSeqMax() + 1);
mesWorkOrderExt.setSeq(MathOperation.add(getWorkOrderExtMaxSeq(organizeCode, 1), new Double(1)));
ConvertBean.modelInitialize(mesWorkOrderExt, AuthUtil.getSessionUser());
@ -200,6 +206,18 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
insertMesWorkOrderLog(workOrderExt);
}
private MesPartExt getMesPartExt(MesWorkOrderExt mesWorkOrderExt, String organizeCode) {
MesPartExt partExt = partExtService.getPartExt(organizeCode, mesWorkOrderExt.getPartNo());
if (partExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("物料编码[%s]不存在", mesWorkOrderExt.getPartNo())
.build();
}
return partExt;
}
private synchronized Double getWorkOrderExtMaxSeq(String organizeCode, Integer count) {
Double maxSeq = new Double(0);
try {
@ -219,6 +237,7 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
maxSeq = JsonUtilTool.decode(JSONObject.toJSONString(resultObject), Double.class);
}
} catch (Exception e) {
log.error("getWorkOrderExtMaxSeq --- 获取最大序列号失败原因:{}", e.toString());
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.SEQ}, packBean);
@ -325,19 +344,7 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
}
//根据产线获取产线信息
MesWorkCenter mesWorkCenter = workCenterRepository.getByProperty(
new String[]{"workCenterCode", "organizeCode", "isValid", "isDeleted"},
new Object[]{excelWorkOrderDto.getWorkCenterCode(), organizeCode,
CommonEnumUtil.IS_VAILD.VAILD.getValue(),
CommonEnumUtil.IS_DEAL.NO.getValue()});
if (mesWorkCenter == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("第【%s】行的产线代码【%s】在产线信息中不存在数据", i, excelWorkOrderDto.getWorkCenterCode())
.build();
}
MesWorkCenter mesWorkCenter = getMesWorkCenter(i, organizeCode, excelWorkOrderDto);
MesWorkOrderExt mesWorkOrderExt = new MesWorkOrderExt();
@ -359,6 +366,23 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
}
}
private MesWorkCenter getMesWorkCenter(Integer i, String organizeCode, ExcelWorkOrderDto excelWorkOrderDto) {
MesWorkCenter mesWorkCenter = workCenterRepository.getByProperty(
new String[]{"workCenterCode", "organizeCode", "isValid", "isDeleted"},
new Object[]{excelWorkOrderDto.getWorkCenterCode(), organizeCode,
CommonEnumUtil.IS_VAILD.VAILD.getValue(),
CommonEnumUtil.IS_DEAL.NO.getValue()});
if (mesWorkCenter == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("第【%s】行的产线代码【%s】在产线信息中不存在数据", i, excelWorkOrderDto.getWorkCenterCode())
.build();
}
return mesWorkCenter;
}
/**
*
*

@ -0,0 +1,82 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.print.method;
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxPrintTemplateMethodService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.PackageExtModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxPrintTemplateModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description 使
* @Author: wangjie
* @CreateDate: 2020/6/22 9:38 AM
* @Description:
**/
@Slf4j
@Service
public class JxPrintPackageAndSpotTicketService extends SxPrintDispatchService implements ISxPrintTemplateMethodService {
@Autowired
private ISxWorkOrderExtService sxWorkOrderExtService;
@Override
public List<Map<String, Object>> exec(SxPrintTemplateModel printModel) {
List<Map<String, Object>> resultMapList = null;
List<PackageExtModel> packList = printModel.getPackList();
List<String> workOrderNoList = packList.stream().filter(o -> null != o).map(PackageExtModel::getWorkOrderNo).collect(Collectors.toList());
Map<String, String> startTimeMap = new HashMap<>();
for (String workOrderNo : workOrderNoList) {
if (StringUtils.isEmpty(workOrderNo)) {
continue;
}
MesWorkOrderExt workOrderExt = sxWorkOrderExtService.getWorkOrderExtByOrderNo(printModel.getOrganizeCode(), workOrderNo);
if (null == workOrderExt) {
continue;
}
String[] dateArr = workOrderExt.getStartTime().substring(2, 7).split("-");
startTimeMap.put(workOrderNo, new StringJoiner(".").add(dateArr[1]).add(dateArr[0]).toString());
}
for (PackageExtModel pack : packList) {
if (null == pack) {
continue;
}
if (CollectionUtils.isEmpty(resultMapList)) {
resultMapList = new ArrayList<>();
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.PART_NO, pack.getPartNo());
resultMap.put(MesPcnExtConstWords.PART_NAME, pack.getPartNameRdd());
resultMap.put(MesPcnExtConstWords.PACKAGENO, pack.getPackageNo());
if (!StringUtils.isEmpty(pack.getPrinterCode())) {
resultMap.put(MesPcnExtConstWords.PRINTER_CODE, pack.getPrinterCode());
}
// 一维码
resultMap.put(MesPcnExtConstWords.BAR_CODE, pack.getPackageNo());
// 二维码
resultMap.put(MesPcnExtConstWords.QR_CODE, pack.getPackageNo());
// 生产日期
resultMap.put(MesPcnExtConstWords.YEAR_MONTH_DAY, pack.getWorkTime());
resultMap.put(MesPcnExtConstWords.QTY, pack.getQty());
resultMapList.add(resultMap);
}
return resultMapList;
}
}

@ -58,4 +58,10 @@ public class GenerateWorkOrderDto {
@ApiParam("Erp库存地")
private String erpWarehouse;
@ApiParam("产品条码起始")
private String produceSnStart;
@ApiParam("产品条码截至")
private String produceSnEnd;
}

Loading…
Cancel
Save