add:领料出库回传、点对点库存调拨回传、采购单打印

This commit is contained in:
zhaoyf
2026-07-07 19:36:37 +08:00
parent e966d368bd
commit 0a81376f10
15 changed files with 333 additions and 52 deletions

View File

@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
public class ZplUtil {
public static void print(String zpl){
public static void print(String zpl) {
String ip = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode(SysParamConstant.PRINTER_IP).getValue();
String port = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode(SysParamConstant.PRINTER_PORT).getValue();
@@ -25,20 +25,108 @@ public class ZplUtil {
}
}
public static String generatePurchaseLabel(String orderNo,String skuName, String skuCode, String qty, String batchNo, String itemNo) {
public static String generatePurchaseLabel(String orderNo, String skuName, String skuCode, String qty, String itemNo) {
// QRCode内容
String qrCode = "LA," + orderNo + "#"+itemNo+"#" + skuCode + "#"+skuName+"##" + qty + "#";
// ======================
// 拼接ZPL
// ======================
StringBuilder zpl = new StringBuilder();
zpl.append("^XA\n");
zpl.append("^CI28\n");
zpl.append("^PW609\n");
zpl.append("^LL406\n");
zpl.append("^FO30,30^A0N,28,28^FD").append(escape(skuName)).append("^FS\n");
zpl.append("^FO30,70^A0N,24,24^FD").append(escape(skuCode)).append("^FS\n");
zpl.append("^FO30,115^A0N,32,32^FD").append(escape(qty)).append(escape(batchNo)).append("^FS\n");
zpl.append("^FO350,20^BQN,2,5^FDQA,").append("#").append(escape(itemNo)).append("^FS\n");
zpl.append("^XZ");
zpl.append("^XA\n")
.append("~TA000\n")
.append("~JSN\n")
.append("^LT0\n")
.append("^MNW\n")
.append("^MTT\n")
.append("^PON\n")
.append("^PMN\n")
.append("^LH0,0\n")
.append("^JMA\n")
.append("^PR6,6\n")
.append("~SD10\n")
.append("^JUS\n")
.append("^LRN\n")
.append("^CI27\n")
.append("^PA0,1,1,0\n")
.append("^XZ\n")
.append("^XA\n")
.append("^MMT\n")
.append("^PW609\n")
.append("^LL406\n")
.append("^LS0\n")
// ======================
// 以下图片(GFA)保持不变
// ======================
.append("^FO24,363^GB562,0,4^FS\n")
.append("^FO21,54^GB562,0,4^FS\n")
.append("^FO230,14^GFA,329,544,16,:Z64:eJyd0TuOwyAQBuBBI8VVdi+wCtdIGvtKKVMgJ5KLvZalFLkGiMLlIq20YBl5MhiEUm0RaPgE/MMD4I12AcBpzGMJcFbQDOy2uA+Hxk6huiVColgticSr9xrApv1f2SJcUj4vS96JO0UxbL6lzcJTlLqHMk/jsiqp1RFaufnmvJJbvizn8ZHrB+i77A+v0DioPvxd0bJVV883WKOrO/ZEDmLxaVX4ww7ZOHMemVfHZOHavH72PS7GYTaOC+fxPGr2lUgnL+Sax7rVcrNWzS+5z+9sHTCiJSfFmp88YBCD4bRYzJ0vdITzO5/5f3sCiQWikw==:C454\n")
.append("^FO24,68^GFA,169,200,8,:Z64:eJxdzrENwkAQBMA9nYQTS6SO7FJohTIsmcCuwC09ooAvAZcA0TsALftvor9kdHsbHFBNe9CseJ2kRyQ6N3vOxYGBq9/lg3nvp0PlaVf/b9dPgRz4KXepfrrZFrK5j/FavHBP0ZYsI0w5SJylf4lG2jvCQ/1mPT91eVF/:2FFA\n")
// 运单号
.append("^FT132,88^A0N,20,25^FH\\^CI28^FD")
.append(orderNo)
.append("^FS^CI27\n")
.append("^FO40,111^GFA,133,200,8,:Z64:eJxjYMAO2BkOgGn+/w/q/wBpeXsIbcPAUAHEDNUMDGC+8YEEMM3+/wNU/QcGZpB69ub//xsQtD17g40EA5gGq+dH0AY2EJoBTNs3MP6B0Axgmh9oIQ43IgMA/2EiTg==:5269\n")
// 行号
.append("^FT245,129^A0N,20,25^FH\\^CI28^FD")
.append(itemNo)
.append("^FS^CI27\n")
.append("^FO31,201^GFA,177,200,8,:Z64:eJx1zjEKwlAMBuCUDo5ZnV6v4VDoWTyBqyD0UbzY6z0EcwLxkcEOkt/EipP+y0fgJwnR73BPx7Q6phaSd3tYiOrOoY3r/FER/cNVYURbxn2xDk/XwuFR0U1Scq7AGTLc9L2PL7qkZhLu1e81widxWbiGG+G5uG358+Y3LwGvUEY=:FEB3\n")
// 物料编码
.append("^FT167,217^A0N,20,25^FH\\^CI28^FD")
.append(skuCode)
.append("^FS^CI27\n")
.append("^FO24,245^GFA,241,300,12,:Z64:eJyNz7ENwjAQBdCPKNKRBdBljRSRMgsT0EYC+aBiCyahMGINFDwBsuWCVP7YERUNXPWKf193wO+pOwyCAVU72wgmqxdA2w0T6ExroQxMC3pRV5zM8upE/cc3y1AykVK9DkqL7SMyrRQy5k76KcGgl9kpYY+eB/SvwOZIX/KqgTzRm+z+mXcbl+1Q3+MkC+c5ZndxKG7OFvXOZed7Smf42GRf7ZyR9R+Pf80bAEhuBg==:1147\n")
.append("^FO213,245^GFA,177,200,8,:Z64:eJxljrEJw0AMRQUq3BiygbVJZskmDlyRMiNkEEOi4CUCaTLBcXDtoR+dlVT+hR7/S3xEtNM49lkI4KROM34r1XPODBWo2fAoP7apKlGQ74fF90/gWoOS1HMpkl5+f5xvaIK1yQU21RUYev/Jezbm3IkS/s/5E/km1v27oS/nQ1kK:C268\n")
.append("^FO42,287^GFA,153,200,8,:Z64:eJxjYMAO5L43MB8A043NUPpxG5CW/97w/X8DA0P99wcQ+v+HdH6Q/P8P/O/A9APbNxB1tQ8YQOoaCkF03feGhxC6+fEHsHnNh3+A1T88/gdK7wPp+//xvXwDSN0HG5C5NocfVLDhcCMyAABuhDsZ:8118\n")
// 物料名称
.append("^FT167,307^A0N,20,25^FH\\^CI28^FD")
.append(skuName)
.append("^FS^CI27\n")
.append("^FO42,334^GFA,157,200,8,:Z64:eJxjYMAAH2SAhPFzhv//gLT1f4YPckBa/j2EL92fAObb//8A5gNpBmYgzf/v8f//DUB1fx6A9Vv/fwCVf/D5HpCuf38Awn9+AMyXfQ7hyx9vAPP5vz9gPgOk2aHmyv/7wHwYaF6NRSLYXEIAAB6jPc4=:5C5A\n")
// 箱数
.append("^FT249,354^A0N,20,25^FH\\^CI28^FD")
.append(qty)
.append("^FS^CI27\n")
.append("^FO23,319^GB352,0,4^FS\n")
.append("^FO21,277^GB352,0,4^FS\n")
.append("^FO21,233^GB352,0,4^FS\n")
.append("^FO21,188^GB352,0,4^FS\n")
.append("^FO21,100^GB352,0,4^FS\n")
.append("^FO372,58^GB0,308,4^FS\n")
// 二维码
.append("^FT380,333^BQN,2,7\n")
.append("^FH\\^FD")
.append(qrCode)
.append("^FS\n")
.append("^FO112,58^GB0,308,4^FS\n")
.append("^FO21,145^GB352,0,4^FS\n")
.append("^FO19,156^GFA,237,300,12,:Z64:eJyFz0EKwjAQBdAJgXYjdOuqPYhgr+IRBDdCheYGvYFnGejCZY6QQi8QcZGA1e+0VbpRHLJ4hM9nhujHrBamDfmEciYtz1KAdh3ApJwJUOBaXIDRkDOlG90CGYZS/vNKnCJizoRItVkMv3FjhgH99JX75M/7w2XqCackX/ft7LGTb7LQcTe5gKESMVja0tuw0k+eJUMA3X2NTqwf0P0wW11txvHbnf/mBf1cd3Q=:6688\n")
.append("^FO228,158^GFA,101,200,8,:Z64:eJxjYCAOMDP8kG8A0vbMd4wPAGl+5nmVD0A0O4zug9L9zAcgNFg9Ep8RKl+Ioo95HoTPfCcZpM7+4Q/7BiLdhAwAiycaRQ==:67BF\n")
.append("^PQ1,0,1,Y\n")
.append("^XZ");
return zpl.toString();
}
public static String generateVehicleLabel(VehicleLabelDto dto){
public static String generateVehicleLabel(VehicleLabelDto dto) {
StringBuilder zpl = new StringBuilder();
zpl.append("^XA\n");
zpl.append("^CI28\n");

View File

@@ -43,4 +43,6 @@ public interface WmsToErpService {
* }
*/
JSONObject materialSync(JSONObject whereJson);
void dealBus(JSONObject requestData);
}

View File

@@ -11,11 +11,7 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.core.tasks.LineCallFullTask;
import org.nl.wms.sch_manage.service.core.tasks.LineReturnEmptyTask;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
import org.nl.wms.welding_manage.service.work_order.IWorkOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -31,10 +27,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
private IMdPbGroupplateService iMdPbGroupplateService;
@Autowired
private ISchBasePointService iSchBasePointService;
@Autowired
private IWorkOrderService iWorkOrderService;
@Autowired
private IPmStockReturnService iPmStockReturnService;
@Transactional
@Override
@@ -51,7 +44,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
case "3"://返空
case "4"://托盘余料退回
//TODO
String[] empVehLocation = {"EB101101","EB101102"};//暂定空托对接位
String[] empVehLocation = {"EB101101", "EB101102"};//暂定空托对接位
if (StrUtil.isEmptyIfStr(vehicleCode)) {
throw new BadRequestException("请求失败,上料口没有绑定托盘");
}
@@ -76,25 +69,23 @@ public class MesToWmsServiceImpl implements MesToWmsService {
if (!StrUtil.isEmptyIfStr(vehicleCode) && Objects.equals(mesTaskParams.getRequestedCode(), "2")) {
throw new BadRequestException("请求失败,上料口存在托盘占用");
}
//获取组盘信息
List<GroupPlate> groupList = iMdPbGroupplateService.list(new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getLoad_port, portPoint.getPoint_code())
.eq(GroupPlate::getExt_code, mesTaskParams.getOrderCode())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
if (groupList.isEmpty()) {
List<SchBasePoint> matPoints = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
.isNotNull(SchBasePoint::getVehicle_code)
.eq(SchBasePoint::getRegion_code, portPoint.getRegion_code())
.eq(SchBasePoint::getPoint_type, "1"));
if (matPoints.isEmpty()) {
throw new BadRequestException("叫满任务失败,库存没有当前下料口的组盘物料");
}
GroupPlate groupPlate = groupList.get(0);
String storagevehicleCode = groupPlate.getStoragevehicle_code();
//根据托盘获取当前起点
SchBasePoint start_point = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getVehicle_code, storagevehicleCode));
SchBasePoint start_point = matPoints.get(0);
String veh = start_point.getVehicle_code();
JSONObject taskFormCall = new JSONObject();
taskFormCall.put("config_code", "LineCallFullTask");
taskFormCall.put("point_code1", start_point.getPoint_code());
taskFormCall.put("point_code2", portPoint.getPoint_code());
taskFormCall.put("vehicle_code", storagevehicleCode);
taskFormCall.put("vehicle_code", veh);
taskFormCall.put("create_name", "MES");
taskFormCall.put("workOrderCode", mesTaskParams.getOrderCode());
LineCallFullTask lineCallFullTask = SpringContextHolder.getBean("LineCallFullTask");
lineCallFullTask.create(taskFormCall);

View File

@@ -5,12 +5,11 @@ import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.config.SpringContextHolder;
import org.nl.wms.ext_manage.util.ErpUtil;
import org.nl.wms.system_manage.enums.SysParamConstant;
import org.nl.wms.system_manage.service.param.dao.Param;
import org.nl.wms.system_manage.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext_manage.enums.EXTConstant;
import org.nl.wms.ext_manage.service.WmsToErpService;
import org.nl.wms.ext_manage.util.ErpUtil;
import org.nl.wms.system_manage.enums.SysParamConstant;
import org.nl.wms.system_manage.service.param.impl.SysParamServiceImpl;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
@@ -57,4 +56,9 @@ public class WmsToErpServiceImpl implements WmsToErpService {
}
return result;
}
@Override
public void dealBus(JSONObject requestData) {
ErpUtil.create().login().reqBus(requestData.toJSONString());
}
}

View File

@@ -18,6 +18,7 @@ public class ErpUtil {
private String loginUrl;
private String busUrl;
private String auditUrl;
private String userName;
private String password;
private String slnName;
@@ -33,6 +34,7 @@ public class ErpUtil {
ErpUtil erpUtil = new ErpUtil();
erpUtil.setLoginUrl(SpringContextHolder.getProperties("erp.loginUrl"));
erpUtil.setBusUrl(SpringContextHolder.getProperties("erp.busUrl"));
erpUtil.setAuditUrl(SpringContextHolder.getProperties("erp.auditUrl"));
erpUtil.setUserName(SpringContextHolder.getProperties("erp.username"));
erpUtil.setPassword(SpringContextHolder.getProperties("erp.password"));
erpUtil.setSlnName(SpringContextHolder.getProperties("erp.slnName"));
@@ -74,6 +76,29 @@ public class ErpUtil {
* 审核接口请求
*/
public void audit(String json){
try {
call.clearOperation();
call.setOperationName("dealTask");
call.setTimeout(1000*60);
call.setMaintainSession(true);
call.setTargetEndpointAddress(auditUrl);
call.setReturnQName(new QName("", "dealTaskReturn"));
call.addHeader(new SOAPHeaderElement("http://login.webservice.bos.kingdee.com", "SessionId", sessionId));
Object result = call.invoke(new Object[]{json});
JSONObject resultJson = JSON.parseObject(result.toString());
if (resultJson.getBoolean("status") == false){
throw new BadRequestException("回传失败:" + resultJson.getString("message"));
}
log.error("Eas回传接口请求成功");
log.error("Eas回传接口invoke调用结果" + result.toString());
} catch (Exception e) {
throw new BadRequestException("erp审核接口请求失败:" + e.getMessage());
}
}
/**
* 请求业务接口
*/
public void reqBus(String json){
try {
call.clearOperation();
call.setOperationName("dealTask");
@@ -87,10 +112,10 @@ public class ErpUtil {
if (resultJson.getInteger("result") == 0){
throw new BadRequestException("回传失败:" + resultJson.getString("msg"));
}
log.error("Eas回传接口请求成功!");
log.error("Eas回传接口invoke调用结果" + result.toString());
log.error("Eas业务接口请求成功!");
log.error("Eas业务接口invoke调用结果" + result.toString());
} catch (Exception e) {
throw new BadRequestException("erp审核接口请求失败:" + e.getMessage());
throw new BadRequestException("erp业务接口请求失败:" + e.getMessage());
}
}

View File

@@ -186,6 +186,7 @@ public class InboundPdaServiceImpl implements InboundPdaService {
.status(GROUP_PLATE_STATUS.code("组盘"))
.ext_code(dto.getBill_id())
.ext_type(SourceBillTypeEnum.PM_PURCHASE.getBillType())
.ext_dtl_code(item.getItem_no())
.create_id(SecurityUtils.getCurrentUserId())
.create_name(SecurityUtils.getCurrentNickName())
.create_time(DateUtil.now())
@@ -285,6 +286,7 @@ public class InboundPdaServiceImpl implements InboundPdaService {
.status(GROUP_PLATE_STATUS.code("组盘"))
.ext_code(usualInboundDto.getBill_id())
.ext_type(SourceBillTypeEnum.PM_PURCHASE.getBillType())
.ext_dtl_code(item.getItem_no())
.create_id(SecurityUtils.getCurrentUserId())
.create_name(SecurityUtils.getCurrentNickName())
.create_time(DateUtil.now())
@@ -342,6 +344,7 @@ public class InboundPdaServiceImpl implements InboundPdaService {
dtl.put("plan_qty", plateDao.getQty());
dtl.put("ext_code", plateDao.getExt_code());
dtl.put("ext_type", plateDao.getExt_type());
dtl.put("source_billdtl_id", plateDao.getExt_dtl_code());
dtl.put("callback_strategy", "dealPurchaseRecBillCallback");
// 调用新增
tableData.add(dtl);
@@ -450,6 +453,7 @@ public class InboundPdaServiceImpl implements InboundPdaService {
dtl.put("plan_qty", plateDao.getQty());
dtl.put("ext_code", plateDao.getExt_code());
dtl.put("ext_type", plateDao.getExt_type());
dtl.put("source_billdtl_id", plateDao.getExt_dtl_code());
dtl.put("callback_strategy", "dealPurchaseRecBillCallback");
// 调用新增入库单
tableData.add(dtl);

View File

@@ -204,7 +204,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchasemstMapper, Purchase
String zpl = ZplUtil.generatePurchaseLabel(mst.getOrder_no(),
dtl.getSku_name(), dtl.getSku_code(),
dtl.getQty() != null ? dtl.getQty().stripTrailingZeros().toPlainString() : "0",
dtl.getBatch_no(), dtl.getItem_no());
dtl.getItem_no());
allZpl.append(zpl);
}
}

View File

@@ -60,19 +60,18 @@ public class StructAreaDeliveryAutoTask {
return;
}
//点位映射
Map<String, String> vehicleLoadPortMap = iMdPbGroupplateService.list(
Map<String, GroupPlate> vehicleLoadPortMap = iMdPbGroupplateService.list(
new LambdaQueryWrapper<GroupPlate>()
.in(GroupPlate::getStoragevehicle_code, validPoints.stream()
.map(SchBasePoint::getVehicle_code)
.collect(Collectors.toSet()))
.select(GroupPlate::getStoragevehicle_code, GroupPlate::getLoad_port)).stream()
.collect(Collectors.toSet()))).stream()
.collect(Collectors.toMap(
GroupPlate::getStoragevehicle_code,
GroupPlate::getLoad_port
t -> t
));
for (SchBasePoint validPoint : validPoints) {
final String loadPoint = vehicleLoadPortMap.get(validPoint.getVehicle_code());
final SchBasePoint loadInfo = iSchBasePointService.selectByCode(loadPoint);
GroupPlate groupPlate = vehicleLoadPortMap.get(validPoint.getVehicle_code());
final SchBasePoint loadInfo = iSchBasePointService.selectByCode(groupPlate.getLoad_port());
final List<String> empPointCodes = empRegionPointMap.get(loadInfo.getRegion_code());
if (CollectionUtil.isNotEmpty(empPointCodes)){
//创建搬运任务
@@ -82,6 +81,7 @@ public class StructAreaDeliveryAutoTask {
param.put("vehicle_code",validPoint.getVehicle_code());
param.put("config_code","Point2PointTask");
param.put("Priority","1");
param.put("workOrderCode",groupPlate.getExt_code());
point2PointTask.create(param);
}
}

View File

@@ -3,6 +3,7 @@ package org.nl.wms.sch_manage.service.core.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -10,6 +11,7 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.ext_manage.util.ErpUtil;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
@@ -19,11 +21,19 @@ import org.nl.wms.sch_manage.service.core.TaskType;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn;
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
import org.nl.wms.welding_manage.service.work_order.IWorkOrderService;
import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderBomDao;
import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
;
;import java.util.List;
/**
* @Author: Liuxy
@@ -45,6 +55,12 @@ public class LineCallFullTask extends AbstractTask {
*/
@Autowired
private ISchBasePointService iSchBasePointService;
@Autowired
private IWorkOrderService iWorkOrderService;
@Autowired
private IPmStockReturnService iPmStockReturnService;
@Autowired
private IMdPbGroupplateService iMdPbGroupplateService;
@Override
@@ -57,6 +73,7 @@ public class LineCallFullTask extends AbstractTask {
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setExt_group_data(json.getString("workOrderCode"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
@@ -122,6 +139,7 @@ public class LineCallFullTask extends AbstractTask {
}
@Override
@Transactional
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
@@ -166,6 +184,64 @@ public class LineCallFullTask extends AbstractTask {
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
//调用eas领料出库单
//获取组盘信息
String workOrderCode = taskObj.getExt_group_data();
String vehicleCode = taskObj.getVehicle_code();
List<GroupPlate> groupList = iMdPbGroupplateService.list(new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStoragevehicle_code, vehicleCode)
.eq(GroupPlate::getExt_code, workOrderCode)
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")));
//获取工单信息
WorkOrderDao workOrder = iWorkOrderService.getWorkOrder(workOrderCode);
List<WorkOrderBomDao> orderBomItems = iWorkOrderService.getOrderBomItem(workOrderCode);
// 创建最外层的JSONObject
JSONObject root = new JSONObject();
root.put("method", "DealMaterailReqBill");
root.put("type", "MES");
// 创建data对象
JSONObject data = new JSONObject();
data.put("bizStatus", "02");
data.put("mesNo", workOrder.getId());
// 创建entrys数组
JSONArray entrys = new JSONArray();
for (GroupPlate plate : groupList) {
for (WorkOrderBomDao orderBomItem : orderBomItems) {
if (plate.getMaterial_code().equals(orderBomItem.getMaterial_code())){
JSONObject entry = new JSONObject();
entry.put("qty", plate.getQty());
entry.put("sourceBillId", workOrder.getOrder_id());
entry.put("sourceBillEntryId", orderBomItem.getItem_id());
entry.put("sourceBillNo", workOrder.getOrder_code());
// 将entry添加到数组中
entrys.add(entry);
}
}
iMdPbGroupplateService.removeById(plate.getGroup_id());
}
// 将entrys数组设置到data中
data.put("entrys", entrys);
// 将data设置到根对象中
root.put("data", data);
// ErpUtil.create().login().audit(root.toJSONString());
//保存回传单
PmStockReturn stockReturn = new PmStockReturn();
stockReturn.setRequest_Id(workOrder.getOrder_id());
stockReturn.setRequest_type(IOSEnum.BILL_TYPE.code("生产领料"));
stockReturn.setStatus(StockReturnStatusEnum.TODO.getCode()); // 0-处理中
stockReturn.setCreate_time(DateUtil.now());
stockReturn.setRequest_data(root.toJSONString());
//调erp业务接口
try {
ErpUtil.create().login().reqBus(root.toJSONString());
stockReturn.setStatus(StockReturnStatusEnum.SUCESS.getCode());
} catch (Exception e) {
stockReturn.setError_msg(e.getMessage());
stockReturn.setStatus(StockReturnStatusEnum.FAIL.getCode());
}
iPmStockReturnService.save(stockReturn);
}
@Transactional

View File

@@ -2,14 +2,16 @@ package org.nl.wms.sch_manage.service.core.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.ext_manage.util.ErpUtil;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
@@ -19,10 +21,20 @@ import org.nl.wms.sch_manage.service.core.TaskType;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn;
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
import org.nl.wms.welding_manage.service.work_order.IWorkOrderService;
import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderBomDao;
import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 点对点搬运任务
*/
@@ -47,6 +59,12 @@ public class Point2PointTask extends AbstractTask {
*/
@Autowired
private IStructattrService iStructattrService;
@Autowired
private IWorkOrderService iWorkOrderService;
@Autowired
private IPmStockReturnService iPmStockReturnService;
@Autowired
private IMdPbGroupplateService iMdPbGroupplateService;
@Override
public String create(JSONObject json) {
@@ -60,6 +78,7 @@ public class Point2PointTask extends AbstractTask {
task.setVehicle_code(json.getString("vehicle_code"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setExt_group_data(json.getString("workOrderCode"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
@@ -108,6 +127,7 @@ public class Point2PointTask extends AbstractTask {
}
@Override
@Transactional
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
@@ -152,6 +172,65 @@ public class Point2PointTask extends AbstractTask {
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
//获取组盘信息
String workOrderCode = taskObj.getExt_group_data();
String vehicleCode = taskObj.getVehicle_code();
List<GroupPlate> groupList = iMdPbGroupplateService.list(new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStoragevehicle_code, vehicleCode)
.eq(GroupPlate::getExt_code, workOrderCode)
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")));
//获取工单信息
WorkOrderDao workOrder = iWorkOrderService.getWorkOrder(workOrderCode);
List<WorkOrderBomDao> orderBomItems = iWorkOrderService.getOrderBomItem(workOrderCode);
// 创建最外层的JSONObject
JSONObject root = new JSONObject();
root.put("method", "DealLLDBBill");
root.put("type", "MES");
// 创建data对象
JSONObject data = new JSONObject();
data.put("billNo", taskObj.getTask_id());
data.put("bizTypeNo", "331");
data.put("issueStorageOrgUnitNo", workOrder.getOrg_code());
data.put("receiptStorageOrgUnitNo", workOrder.getOrg_code());
// 创建entrys数组
JSONArray entrys = new JSONArray();
for (GroupPlate plate : groupList) {
for (WorkOrderBomDao orderBomItem : orderBomItems) {
if (plate.getMaterial_code().equals(orderBomItem.getMaterial_code())){
JSONObject entry = new JSONObject();
entry.put("qty", plate.getQty());
entry.put("materialNo", orderBomItem.getMaterial_code());
entry.put("unitNo", "PCS");
entry.put("receiptWarehouseNo", workOrder.getDefault_warehouse_code());
entry.put("issueWarehouseNo", orderBomItem.getWarehouse_code());
// 将entry添加到数组中
entrys.add(entry);
}
}
iMdPbGroupplateService.removeById(plate.getGroup_id());
}
// 将entrys数组设置到data中
data.put("entrys", entrys);
// 将data设置到根对象中
root.put("data", data);
// ErpUtil.create().login().audit(root.toJSONString());
//保存回传单
PmStockReturn stockReturn = new PmStockReturn();
stockReturn.setRequest_Id(workOrder.getOrder_id());
stockReturn.setRequest_type(IOSEnum.BILL_TYPE.code("库存调拨"));
stockReturn.setStatus(StockReturnStatusEnum.TODO.getCode()); // 0-处理中
stockReturn.setCreate_time(DateUtil.now());
stockReturn.setRequest_data(root.toJSONString());
//调erp业务接口
try {
ErpUtil.create().login().audit(root.toJSONString());
stockReturn.setStatus(StockReturnStatusEnum.SUCESS.getCode());
} catch (Exception e) {
stockReturn.setError_msg(e.getMessage());
stockReturn.setStatus(StockReturnStatusEnum.FAIL.getCode());
}
iPmStockReturnService.save(stockReturn);
}
@Transactional

View File

@@ -28,7 +28,7 @@ public enum IOSEnum {
BILL_STATUS(MapOf.of("生成","10", "分配中", "20", "分配完", "30", "完成", "99")),
// 入库业务类型
BILL_TYPE(MapOf.of("生产入库","0001", "采购入库", "0005","生产领料", "0006", "手工入库", "0009","销售出库","1001","生产出库","1005","调拨出库","1004", "手工出库", "1009")),
BILL_TYPE(MapOf.of("生产入库","0001", "采购入库", "0005","生产领料", "0006","库存调拨", "0007", "手工入库", "0009","销售出库","1001","生产出库","1005","调拨出库","1004", "手工出库", "1009")),
//入库分配明细状态
INBILL_DIS_STATUS(MapOf.of("未生成", "00", "生成", "01", "执行中", "02", "完成", "99")),

View File

@@ -202,6 +202,7 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
ioStorInvDtl.put("qty_unit_name", row.get("qty_unit_name"));
ioStorInvDtl.put("source_bill_type", row.get("ext_type"));
ioStorInvDtl.put("source_bill_code", row.get("ext_code"));
ioStorInvDtl.put("source_billdtl_id", row.get("source_billdtl_id"));
ioStorInvDtl.put("callback_strategy", row.get("callback_strategy"));
ioStorInvDtl.put("assign_qty", "0");
ioStorInvDtl.put("unassign_qty", row.get("qty"));

View File

@@ -114,6 +114,11 @@ public class GroupPlate implements Serializable {
*/
private String ext_type;
/**
* 来源单据明细
*/
private String ext_dtl_code;
/**
* 上料口
*/

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.ext_manage.service.WmsToErpService;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn;
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
@@ -90,7 +91,11 @@ public class PmStockReturnServiceImpl extends ServiceImpl<PmStockReturnMapper, P
}
try {
JSONObject requestData = parseRequestData(stockReturn.getRequest_data());
wmsToErpService.uploadErp(requestData);
if (stockReturn.getRequest_type().equals(IOSEnum.BILL_TYPE.code("生产领料"))){
wmsToErpService.dealBus(requestData);
}else{
wmsToErpService.uploadErp(requestData);
}
stockReturn.setStatus(StockReturnStatusEnum.SUCESS.getCode());
stockReturn.setError_msg(null);
stockReturn.setProcess_time(DateUtil.now());

View File

@@ -49,7 +49,8 @@ public class DealPurchaseRecBillCallback implements CallbackStrategy {
List<EasAuditRequestDto.EasAuditEntryDto> entryList = new ArrayList<>();
Purchasedtl purchasedtl = purchasedtlService.getOne(new LambdaQueryWrapper<Purchasedtl>()
.eq(Purchasedtl::getBill_id, orderCode)
.eq(Purchasedtl::getSku_code, param.getMaterial_code()));
// .eq(Purchasedtl::getSku_code, param.getMaterial_code())
.eq(Purchasedtl::getItem_no, param.getSource_billdtl_id()));
purchasedtl.setInstock_qty(param.getPlan_qty().add(purchasedtl.getInstock_qty()));
purchasedtlService.updateById(purchasedtl);