merge 装车单打印

uat-temp-wj-chongqingdaqu-dev
王杰 4 months ago
commit 7349798613

@ -1,8 +1,11 @@
package cn.estsh.i3plus.ext.mes.api.base; package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
/** /**
* @Description: * @Description:
* @CreateDate 2024/04/16 * @CreateDate 2024/04/16
@ -13,4 +16,5 @@ public interface IMesLoadingListService extends IBaseMesService<MesLoadingList>
@ApiOperation("根据发运单号查询装车单信息") @ApiOperation("根据发运单号查询装车单信息")
MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode); MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode);
ResultBean doMesMesLoadingListPrint(List<Long> ids, boolean reprint);
} }

@ -1,16 +1,42 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base; package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.PrintDataRequest;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(description = "装车单主页面") @Api(description = "装车单主页面")
@RestController @RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesLoadingVehiclesOrder") @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesLoadingVehiclesOrder")
public class MesLoadingListController extends BaseMesController<MesLoadingList> { public class MesLoadingListController extends BaseMesController<MesLoadingList> {
@Autowired
private IMesLoadingListService loadingListService;
@PostMapping(value = "/doPrint")
@ApiOperation(value = "打印未打印发运单后修改状态")
public ResultBean doMesMesLoadingListPrint(@RequestBody PrintDataRequest request) {
try {
boolean reprint = request.getIsReprint() != null ? request.getIsReprint() : false;
// 数据校验
return loadingListService.doMesMesLoadingListPrint(request.getIds(), reprint);
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
} }

@ -3,14 +3,22 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService; import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail;
@ -21,7 +29,10 @@ import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean; import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -47,6 +58,11 @@ public class MesLoadingListService extends BaseMesService<MesLoadingList> implem
private IMesPartShippingGroupService mesPartShippingGroupService; private IMesPartShippingGroupService mesPartShippingGroupService;
@Autowired @Autowired
private ISyncFuncService syncFuncService; private ISyncFuncService syncFuncService;
@Autowired
private IConfigService configService;
@Autowired
private IMesTemplateService templateService;
@Override @Override
public MesLoadingList insert(MesLoadingList bean) { public MesLoadingList insert(MesLoadingList bean) {
@ -243,4 +259,39 @@ public class MesLoadingListService extends BaseMesService<MesLoadingList> implem
DdlPreparedPack.getNumEqualPack(mesLoadingListDetail.getPid(),"id",packBean); DdlPreparedPack.getNumEqualPack(mesLoadingListDetail.getPid(),"id",packBean);
return baseRDao.getByProperty(packBean); return baseRDao.getByProperty(packBean);
} }
private List<MesLoadingList> getMesLoadingListByIds(String organizeCode, List<Long> ids) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(ids,"id",packBean);
return baseRDao.findByHqlWhere(packBean);
}
@Override
public ResultBean doMesMesLoadingListPrint(List<Long> ids, boolean reprint) {
String organizeCode = AuthUtilExt.getOrganizeCode();
MesConfig config = configService.getConfigByCfgCode(MesExtConstWords.LOADING_LIST_PRINT_TEMPLATE, organizeCode);
if (null == config || StringUtils.isEmpty(config.getCfgValue())) {
MesException.throwBusiException("未配置装车单全局打印配置[%s]", MesExtConstWords.LOADING_LIST_PRINT_TEMPLATE);
}
MesLabelTemplate labelTemplate = templateService.getMesLabelTemplate(config.getCfgValue(), organizeCode);
if (StringUtils.isEmpty(labelTemplate.getMethodCode())) {
MesException.throwBusiException("装车单打印模版[%s]未配置策略方法", config.getCfgValue());
}
List<MesLoadingList> loadingLists = getMesLoadingListByIds(organizeCode, ids);
if (CollectionUtils.isEmpty(loadingLists)) {
return ResultBean.success("不存在需要打印的装车单").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}
log.info("工厂{}装车单打印 --- 获取到打印数据:{}条 --- loadingLists:{} --- {}",
organizeCode, loadingLists.size(), JSONObject.toJSONString(loadingLists), Thread.currentThread().getName());
IPrintTemplateStrategyService printStrategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode());
ResultBean resultBean = printStrategyService.execute(loadingLists, reprint);
log.info("工厂{}排序发运打印 --- 封装打印数据完成 --- {}", organizeCode, Thread.currentThread().getName());
return resultBean;
}
} }

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print;
import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
@ -32,4 +33,8 @@ public interface IPrintTemplateStrategyService {
return null; return null;
} }
@ApiOperation(value = "装车单")
default ResultBean execute(List<MesLoadingList> loadingLists, boolean reprint) {
return null;
}
} }

@ -0,0 +1,165 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.loadingList.strategy;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pojo.model.ChengDuLoadingListDetailPrintModel;
import cn.estsh.i3plus.ext.mes.pojo.model.ChengDuLoadingListPrintModel;
import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
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.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
import cn.estsh.i3plus.pojo.mes.bean.seres.MesCimSeresSrmRunSheetJis;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.MesLoadingListDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLoadingListRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresSrmRunSheetJisRepository;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : Castle
* @CreateDate : 2024/6/17 16:43
* @Modify:
**/
@Component
@Slf4j
public class ChengDuLoadingListPrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private MesLoadingListRepository loadingListRDao;
@Autowired
private MesLoadingListDetailRepository loadingListDetailRDao;
@Autowired
private MesShippingOrderManagementRepository shippingOrderRDao;
@Autowired
private MesShippingOrderManagementDetailRepository shippingOrderDetailRDao;
@Autowired
private IMesCimSeresSrmRunSheetJisRepository runSheetJisRDao;
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule) {
return null;
}
@Override
public ResultBean execute(List<MesLoadingList> loadingLists, boolean reprint) {
List<ChengDuLoadingListPrintModel> modelList = new ArrayList<>();
for (MesLoadingList loadingList : loadingLists) {
ChengDuLoadingListPrintModel model = getPrintData(loadingList, reprint);
if (model != null) {
modelList.add(model);
}
}
return ResultBean.success("装车单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList);
}
private ChengDuLoadingListPrintModel getPrintData(MesLoadingList loadingList, boolean reprint) {
final String organizeCode = AuthUtilExt.getOrganizeCode();
final String userName = AuthUtilExt.getUserName();
ChengDuLoadingListPrintModel model = new ChengDuLoadingListPrintModel();
model.setPrintTime(TimeTool.getNowTime(true));
model.setOrderCode(loadingList.getOrderCode());
model.setTruckNo(loadingList.getTruckNo());
model.setSendDockCode(loadingList.getSendDockCode());
int loadingListDetailSeq = 0;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", packBean);
DdlPreparedPack.getOrderBy("shippingCode", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean);
List<MesLoadingListDetail> loadingListDetails = loadingListDetailRDao.findByHqlWhere(packBean);
for (MesLoadingListDetail detail : loadingListDetails) {
ChengDuLoadingListDetailPrintModel detailPrintModel = new ChengDuLoadingListDetailPrintModel();
if (StringUtils.isEmpty(detail.getShippingCode())) {
continue;
}
DdlPackBean jisPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(detail.getShippingCode(), "docNo", jisPackBean);
MesCimSeresSrmRunSheetJis sheetJis = runSheetJisRDao.getByProperty(jisPackBean);
if (sheetJis == null) {
continue;
}
detailPrintModel.setProductClass(detail.getShippingCode());
detailPrintModel.setGoOutTime(sheetJis.getGoOutTime());
detailPrintModel.setGoToTime(sheetJis.getGoToTime());
DdlPackBean shippingPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(detail.getShippingCode(), "shippingCode", shippingPackBean);
MesShippingOrderManagement shippingOrder = shippingOrderRDao.getByProperty(shippingPackBean);
if (shippingOrder == null) {
continue;
}
detailPrintModel.setPartClass(shippingOrder.getShippingGroupCode());
double amount = 0;
DdlPackBean shippingDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(shippingOrder.getId(), "pid", shippingDetailPackBean);
List<MesShippingOrderManagementDetail> shippingOrderDetails = shippingOrderDetailRDao.findByHqlWhere(shippingDetailPackBean);
for (MesShippingOrderManagementDetail shippingOrderDetail : shippingOrderDetails) {
amount += shippingOrderDetail.getPlanQty();
}
detailPrintModel.setSeqNo(++loadingListDetailSeq);
detailPrintModel.setAmount(amount);
model.getDetails().add(detailPrintModel);
}
if (!CollectionUtils.isEmpty(model.getDetails())) {
model.setShippingCount(model.getShippingCount());
double totalAmount = 0.0;
String maxGoToTime = null;
String minGoOutTime = null;
for (ChengDuLoadingListDetailPrintModel detailPrintModel : model.getDetails()) {
totalAmount += detailPrintModel.getAmount();
if (!StringUtils.isEmpty(detailPrintModel.getGoToTime())) {
if (StringUtils.isEmpty(maxGoToTime) || maxGoToTime.compareTo(detailPrintModel.getGoToTime()) < 0) {
maxGoToTime = detailPrintModel.getGoToTime();
}
}
if (!StringUtils.isEmpty(detailPrintModel.getGoOutTime())) {
if (StringUtils.isEmpty(minGoOutTime) || detailPrintModel.getGoOutTime().compareTo(minGoOutTime) < 0) {
minGoOutTime = detailPrintModel.getGoOutTime();
}
}
}
model.setGoToTime(maxGoToTime);
model.setGoOutTime(minGoOutTime);
model.setTotalAmount(totalAmount);
}
//查询原有报文 根据shippingCode;
loadingList.setPrintCount(StringUtil.isEmpty(loadingList.getPrintCount())?1:loadingList.getPrintCount()+1);
loadingList.setLastPrintTime(TimeTool.getNowTime(true));
loadingList.setLastPrintUser(userName);
ConvertBean.serviceModelUpdate(loadingList, userName);
loadingListRDao.update(loadingList);
if (reprint) {
model.setRePrintDatetime(TimeTool.getNowTime(MesExtConstWords.DATETIME_FORMAT_SINGLE_SLASH));
model.setRePrintUser(userName);
model.setIsRePrint("重打印");
}
return model;
}
}

@ -0,0 +1,34 @@
package cn.estsh.i3plus.ext.mes.pojo.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
* @author jason.niu
* @description
* @date 2025/3/15 13:53
*/
@Data
@ApiModel("成都装车单打印明细")
public class ChengDuLoadingListDetailPrintModel {
@ApiModelProperty("序号")
private Integer seqNo;
@ApiModelProperty("最迟到达时间")
private String goToTime;
@ApiModelProperty("最早发运时间")
private String goOutTime;
@ApiModelProperty("零件类")
private String partClass;
@ApiModelProperty("产品类")
private String productClass;
@ApiModelProperty("数量汇总")
private Double amount;
}

@ -0,0 +1,57 @@
package cn.estsh.i3plus.ext.mes.pojo.model;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author jason.niu
* @description
* @date 2025/3/15 13:53
*/
@Data
@ApiModel("成都装车单打印")
public class ChengDuLoadingListPrintModel {
@ApiModelProperty("是否重打印")
private String isRePrint = MesExtConstWords.EMPTY;
@ApiModelProperty("重打印操作人")
private String rePrintUser = MesExtConstWords.EMPTY;
@ApiModelProperty("重打印时间")
private String rePrintDatetime = MesExtConstWords.EMPTY;
@ApiModelProperty("车牌号")
private String truckNo;
@ApiModelProperty("发运道口")
private String sendDockCode;
@ApiModelProperty("装车单号")
private String orderCode;
@ApiModelProperty("打印时间")
private String printTime;
@ApiModelProperty("最迟到达时间")
private String goToTime;
@ApiModelProperty("最早发运时间")
private String goOutTime;
@ApiModelProperty("小计")
private Integer shippingCount;
@ApiModelProperty("数量汇总")
private Double totalAmount;
@ApiModelProperty("明细")
private List<ChengDuLoadingListDetailPrintModel> details = new ArrayList<>();
}

@ -0,0 +1,22 @@
package cn.estsh.i3plus.ext.mes.pojo.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : jason.niu
* @CreateDate 2025/3/15 15:48
* @Modify:
**/
@Data
public class PrintDataRequest {
@ApiModelProperty("是否为补打印")
private Boolean isReprint;
@ApiModelProperty("打印对象ID")
private List<Long> ids;
}

@ -476,6 +476,8 @@ public class MesExtConstWords {
//SPS拉动单打印模版全局配置 //SPS拉动单打印模版全局配置
public static final String PART_PULL_PRINT_TEMPLATE = "PART_PULL_PRINT_TEMPLATE"; public static final String PART_PULL_PRINT_TEMPLATE = "PART_PULL_PRINT_TEMPLATE";
//装车单全局打印配置
public static final String LOADING_LIST_PRINT_TEMPLATE = "LOADING_LIST_PRINT_TEMPLATE";
//排序发运全局打印配置 //排序发运全局打印配置
public static final String SORT_SHIPPING_PRINT_TEMPLATE = "SORT_SHIPPING_PRINT_TEMPLATE"; public static final String SORT_SHIPPING_PRINT_TEMPLATE = "SORT_SHIPPING_PRINT_TEMPLATE";
//由前端直接渲染模版的标志 //由前端直接渲染模版的标志

Loading…
Cancel
Save