fix:采购单回传逻辑
opt:打印服务优化 opt:返空叫料任务优化
This commit is contained in:
@@ -0,0 +1,61 @@
|
|||||||
|
package org.nl.common.utils;
|
||||||
|
|
||||||
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.config.SpringContextHolder;
|
||||||
|
import org.nl.wms.basedata_manage.service.dto.VehicleLabelDto;
|
||||||
|
import org.nl.wms.system_manage.enums.SysParamConstant;
|
||||||
|
import org.nl.wms.system_manage.service.param.impl.SysParamServiceImpl;
|
||||||
|
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
public class ZplUtil {
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
try (Socket socket = new Socket(ip, Integer.parseInt(port));
|
||||||
|
OutputStream out = socket.getOutputStream()) {
|
||||||
|
out.write(zpl.getBytes(StandardCharsets.UTF_8));
|
||||||
|
out.flush();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new BadRequestException("打印机连接失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String generatePurchaseLabel(String orderNo,String skuName, String skuCode, String qty, String batchNo, String itemNo) {
|
||||||
|
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");
|
||||||
|
return zpl.toString();
|
||||||
|
}
|
||||||
|
public static String generateVehicleLabel(VehicleLabelDto dto){
|
||||||
|
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(dto.getCode())).append("^FS\n");
|
||||||
|
zpl.append("^FO30,70^A0N,24,24^FD").append(escape(dto.getFactory())).append("^FS\n");
|
||||||
|
zpl.append("^FO30,115^A0N,32,32^FD").append(escape(dto.getName())).append("^FS\n");
|
||||||
|
zpl.append("^FO350,20^BQN,2,5^FDQA,").append("#").append(escape(dto.getWorkshop())).append("^FS\n");
|
||||||
|
zpl.append("^XZ");
|
||||||
|
return zpl.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String escape(String s) {
|
||||||
|
if (s == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return s.replace("^", "~").replace("~", "~~~");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,7 +11,6 @@ import org.nl.common.logging.annotation.Log;
|
|||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.MapOf;
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
|
||||||
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
@@ -72,4 +71,11 @@ public class StorageVehicleInfoController {
|
|||||||
return new ResponseEntity<>(MapOf.of("value", CodeUtil.codeView(code)), HttpStatus.OK);
|
return new ResponseEntity<>(MapOf.of("value", CodeUtil.codeView(code)), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/printLabel")
|
||||||
|
@Log("打印载具标签")
|
||||||
|
public ResponseEntity printLabel(@RequestBody Set<String> ids){
|
||||||
|
iMdPbStoragevehicleinfoService.printLabel(ids);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,4 +56,6 @@ public interface IMdPbStoragevehicleinfoService extends IService<MdPbStoragevehi
|
|||||||
|
|
||||||
|
|
||||||
String getVehicleType(String storagevehicleCode);
|
String getVehicleType(String storagevehicleCode);
|
||||||
|
|
||||||
|
void printLabel(Set<String> ids);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package org.nl.wms.basedata_manage.service.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class VehicleLabelDto {
|
||||||
|
private String code;
|
||||||
|
private String name;
|
||||||
|
private String factory;
|
||||||
|
private String workshop;
|
||||||
|
}
|
||||||
@@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -41,6 +42,8 @@ import java.util.Set;
|
|||||||
public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl<MdPbStoragevehicleinfoMapper, MdPbStoragevehicleinfo> implements IMdPbStoragevehicleinfoService {
|
public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl<MdPbStoragevehicleinfoMapper, MdPbStoragevehicleinfo> implements IMdPbStoragevehicleinfoService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysDictService dictService;
|
private ISysDictService dictService;
|
||||||
|
@Autowired
|
||||||
|
private MdPbStoragevehicleinfoMapper mdPbStoragevehicleinfoMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<MdPbStoragevehicleinfo> queryAll(Map whereJson, PageQuery page) {
|
public IPage<MdPbStoragevehicleinfo> queryAll(Map whereJson, PageQuery page) {
|
||||||
@@ -149,4 +152,13 @@ public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl<MdPbStorageve
|
|||||||
);
|
);
|
||||||
return one.getStoragevehicle_type();
|
return one.getStoragevehicle_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void printLabel(Set<String> ids) {
|
||||||
|
List<MdPbStoragevehicleinfo> mdPbStoragevehicleinfos = mdPbStoragevehicleinfoMapper.selectBatchIds(ids);
|
||||||
|
for (MdPbStoragevehicleinfo info : mdPbStoragevehicleinfos) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.nl.wms.ext_manage.purchase.service.mapper;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.nl.wms.pda_manage.ios_manage.purchase.service.vo.PurchaseMatInfoVo;
|
||||||
import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst;
|
import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -11,4 +12,5 @@ import java.util.List;
|
|||||||
public interface EasPurchasemstMapper extends BaseMapper<Purchasemst> {
|
public interface EasPurchasemstMapper extends BaseMapper<Purchasemst> {
|
||||||
|
|
||||||
List<Purchasemst> selectByBillId(@Param("bill_id") String billId);
|
List<Purchasemst> selectByBillId(@Param("bill_id") String billId);
|
||||||
|
List<PurchaseMatInfoVo> selectByOrderNo(@Param("orderNo") String orderNo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,5 +31,21 @@
|
|||||||
FROM v_uc_cgrk06
|
FROM v_uc_cgrk06
|
||||||
WHERE billid = #{bill_id}
|
WHERE billid = #{bill_id}
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectByOrderNo"
|
||||||
|
resultType="org.nl.wms.pda_manage.ios_manage.purchase.service.vo.PurchaseMatInfoVo">
|
||||||
|
SELECT
|
||||||
|
billid,
|
||||||
|
orderNo,
|
||||||
|
itemNo,
|
||||||
|
categoryCode,
|
||||||
|
categoryName,
|
||||||
|
houseCode sect_code,
|
||||||
|
batchNo,
|
||||||
|
skuCode,
|
||||||
|
skuName,
|
||||||
|
qty
|
||||||
|
FROM v_uc_cgrk06
|
||||||
|
WHERE orderNo = #{orderNo}
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -1,25 +1,16 @@
|
|||||||
package org.nl.wms.ext_manage.util;
|
package org.nl.wms.ext_manage.util;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.axis.client.Call;
|
import org.apache.axis.client.Call;
|
||||||
import org.apache.axis.client.Service;
|
import org.apache.axis.client.Service;
|
||||||
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
|
|
||||||
import org.apache.axis.encoding.ser.BeanSerializerFactory;
|
|
||||||
import org.apache.axis.message.SOAPHeaderElement;
|
import org.apache.axis.message.SOAPHeaderElement;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.config.SpringContextHolder;
|
import org.nl.config.SpringContextHolder;
|
||||||
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 javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
import javax.xml.rpc.ParameterMode;
|
|
||||||
import javax.xml.rpc.ServiceException;
|
|
||||||
import javax.xml.rpc.encoding.XMLType;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Data
|
@Data
|
||||||
@@ -73,7 +64,7 @@ public class ErpUtil {
|
|||||||
result = (WSContext) call.invoke(new Object[]{userName, password, slnName, dcName, "L2", dbType, "BaseDB"});
|
result = (WSContext) call.invoke(new Object[]{userName, password, slnName, dcName, "L2", dbType, "BaseDB"});
|
||||||
//关键点,获取登录时返回的sessionid
|
//关键点,获取登录时返回的sessionid
|
||||||
sessionId = result.getSessionId();
|
sessionId = result.getSessionId();
|
||||||
log.info("ERP登录接口返回:{}", result.toString());
|
log.info("ERP登录接口返回:{}", JSON.toJSONString(result));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BadRequestException("erp登录接口请求失败:" + e.getMessage());
|
throw new BadRequestException("erp登录接口请求失败:" + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,13 @@ public class InboundPdaController {
|
|||||||
List<PurchaseMatInfoVo> list = inboundPdaService.getInfoByCode(code);
|
List<PurchaseMatInfoVo> list = inboundPdaService.getInfoByCode(code);
|
||||||
return PdaResponse.requestParamOk(list);
|
return PdaResponse.requestParamOk(list);
|
||||||
}
|
}
|
||||||
|
@GetMapping("/getInfoByReceive")
|
||||||
|
@Log("PDA根据条码查询采购入库单的物料信息")
|
||||||
|
@SaIgnore
|
||||||
|
public PdaResponse getInfoByReceive(@RequestParam String code) {
|
||||||
|
List<PurchaseMatInfoVo> list = inboundPdaService.getInfoByReceive(code);
|
||||||
|
return PdaResponse.requestParamOk(list);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/groupPlate")
|
@PostMapping("/groupPlate")
|
||||||
@Log("PDA提交组盘")
|
@Log("PDA提交组盘")
|
||||||
|
|||||||
@@ -22,4 +22,6 @@ public interface InboundPdaService {
|
|||||||
void submitGroupPlateInbound(GroupPlateInboundDto dto, Boolean subTask);
|
void submitGroupPlateInbound(GroupPlateInboundDto dto, Boolean subTask);
|
||||||
|
|
||||||
void submitManualInbound(ManualInboundDto dto);
|
void submitManualInbound(ManualInboundDto dto);
|
||||||
|
|
||||||
|
List<PurchaseMatInfoVo> getInfoByReceive(String code);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMappe
|
|||||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper;
|
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper;
|
||||||
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
|
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
|
||||||
import org.nl.wms.warehouse_manage.inventory.IStInventoryService;
|
import org.nl.wms.warehouse_manage.inventory.IStInventoryService;
|
||||||
import org.nl.wms.warehouse_manage.inventory.core.enums.InventoryChangeType;
|
|
||||||
import org.nl.wms.warehouse_manage.inventory.core.param.impl.AddInvParam;
|
|
||||||
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
||||||
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -247,32 +245,32 @@ public class InboundPdaServiceImpl implements InboundPdaService {
|
|||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (UsualInboundDto.UsualInboundDtlDto item : usualInboundDto.getDetailList()) {
|
for (UsualInboundDto.UsualInboundDtlDto item : usualInboundDto.getDetailList()) {
|
||||||
//判断当前物料是否在库内
|
//判断当前物料是否在库内
|
||||||
List<GroupPlate> inStockGps = iMdPbGroupplateService.list(new LambdaQueryWrapper<GroupPlate>()
|
// List<GroupPlate> inStockGps = iMdPbGroupplateService.list(new LambdaQueryWrapper<GroupPlate>()
|
||||||
.eq(GroupPlate::getMaterial_code, item.getSku_code())
|
// .eq(GroupPlate::getMaterial_code, item.getSku_code())
|
||||||
.eq(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("入库"))
|
// .eq(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("入库"))
|
||||||
.likeRight(GroupPlate::getStoragevehicle_code, "VTP"));
|
// .likeRight(GroupPlate::getStoragevehicle_code, "VTP"));
|
||||||
if (!inStockGps.isEmpty()){
|
// if (!inStockGps.isEmpty()){
|
||||||
GroupPlate groupPlate = inStockGps.get(0);
|
// GroupPlate groupPlate = inStockGps.get(0);
|
||||||
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<Structattr>()
|
// Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<Structattr>()
|
||||||
.eq(Structattr::getStoragevehicle_code, groupPlate.getStoragevehicle_code())
|
// .eq(Structattr::getStoragevehicle_code, groupPlate.getStoragevehicle_code())
|
||||||
.eq(Structattr::getSect_code, usualInboundDto.getSect_code())
|
// .eq(Structattr::getSect_code, usualInboundDto.getSect_code())
|
||||||
.last("limit 1"));
|
// .last("limit 1"));
|
||||||
if (Objects.equals(structattr.getSect_code(), usualInboundDto.getSect_code())){
|
// if (Objects.equals(structattr.getSect_code(), usualInboundDto.getSect_code())){
|
||||||
//已在库,增加库存
|
// //已在库,增加库存
|
||||||
flag = true;
|
// flag = true;
|
||||||
List<AddInvParam> addInvParams = new ArrayList<>();
|
// List<AddInvParam> addInvParams = new ArrayList<>();
|
||||||
AddInvParam addParam = new AddInvParam();
|
// AddInvParam addParam = new AddInvParam();
|
||||||
addParam.setPcsn(groupPlate.getPcsn());
|
// addParam.setPcsn(groupPlate.getPcsn());
|
||||||
addParam.setMaterialCode(groupPlate.getMaterial_code());
|
// addParam.setMaterialCode(groupPlate.getMaterial_code());
|
||||||
addParam.setStoragevehicleCode(groupPlate.getStoragevehicle_code());
|
// addParam.setStoragevehicleCode(groupPlate.getStoragevehicle_code());
|
||||||
addParam.setUnitName(groupPlate.getQty_unit_name());
|
// addParam.setUnitName(groupPlate.getQty_unit_name());
|
||||||
addParam.setUnitId(groupPlate.getQty_unit_id());
|
// addParam.setUnitId(groupPlate.getQty_unit_id());
|
||||||
addParam.setQty(item.getQty());
|
// addParam.setQty(item.getQty());
|
||||||
addInvParams.add(addParam);
|
// addInvParams.add(addParam);
|
||||||
iStInventoryService.changeInventory(InventoryChangeType.ADD_INV, addInvParams);
|
// iStInventoryService.changeInventory(InventoryChangeType.ADD_INV, addInvParams);
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(item.getSku_code());
|
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(item.getSku_code());
|
||||||
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getById(materDao.getQty_unit_id());
|
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getById(materDao.getQty_unit_id());
|
||||||
//组盘
|
//组盘
|
||||||
@@ -510,6 +508,33 @@ public class InboundPdaServiceImpl implements InboundPdaService {
|
|||||||
// pushEvent(purchaseListenerParams);
|
// pushEvent(purchaseListenerParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据收货单获取采购单物料信息
|
||||||
|
* @param code 采购单单据编号
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PurchaseMatInfoVo> getInfoByReceive(String code) {
|
||||||
|
if (StrUtil.isEmptyIfStr(code)){
|
||||||
|
throw new BadRequestException("获取单据失败:参数为空");
|
||||||
|
}
|
||||||
|
Map<String, Object> parseMap = parseCode(code);
|
||||||
|
List<PurchaseMatInfoVo> purchaseMatInfoVos = purchaseService.selectPdaInMat(MapOf.of("orderNo", parseMap.get("orderNo"),
|
||||||
|
"itemNo", parseMap.get("itemNo")));
|
||||||
|
if (purchaseMatInfoVos.isEmpty()){
|
||||||
|
throw new BadRequestException("获取单据失败:未找到该物料信息");
|
||||||
|
}
|
||||||
|
if (purchaseMatInfoVos.size() > 1){
|
||||||
|
throw new BadRequestException("同一个采购单有重复物料");
|
||||||
|
}
|
||||||
|
PurchaseMatInfoVo purchaseMatInfoVo = purchaseMatInfoVos.get(0);
|
||||||
|
// if (purchaseMatInfoVo.getQty() != Integer.parseInt(parseMap.get("quantityStr").toString())){
|
||||||
|
// throw new BadRequestException(String.format("(物料%s)条码数量与采购单数量不一致",parseMap.get("materialName")) );
|
||||||
|
// }
|
||||||
|
purchaseMatInfoVo.setQty(new BigDecimal(parseMap.get("quantityStr").toString()));
|
||||||
|
return purchaseMatInfoVos;
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String,Object> parseCode(String code){
|
private Map<String,Object> parseCode(String code){
|
||||||
String[] parts = code.split("#", -1);
|
String[] parts = code.split("#", -1);
|
||||||
log.info("采购单入库条码解析结果:{}", Arrays.toString(parts));
|
log.info("采购单入库条码解析结果:{}", Arrays.toString(parts));
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.nl.wms.pm_manage.purchase.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
@@ -12,9 +13,9 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.wms.ext_manage.purchase.service.dto.EasAuditRequestDto;
|
||||||
import org.nl.wms.ext_manage.service.WmsToErpService;
|
import org.nl.wms.ext_manage.service.WmsToErpService;
|
||||||
import org.nl.wms.pda_manage.ios_manage.purchase.service.vo.PurchaseMatInfoVo;
|
import org.nl.wms.pda_manage.ios_manage.purchase.service.vo.PurchaseMatInfoVo;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import org.nl.wms.pm_manage.purchase.service.PurchaseService;
|
import org.nl.wms.pm_manage.purchase.service.PurchaseService;
|
||||||
import org.nl.wms.pm_manage.purchase.service.dao.Purchasedtl;
|
import org.nl.wms.pm_manage.purchase.service.dao.Purchasedtl;
|
||||||
import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst;
|
import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst;
|
||||||
@@ -22,9 +23,7 @@ import org.nl.wms.pm_manage.purchase.service.dao.mapper.PurchasedtlMapper;
|
|||||||
import org.nl.wms.pm_manage.purchase.service.dao.mapper.PurchasemstMapper;
|
import org.nl.wms.pm_manage.purchase.service.dao.mapper.PurchasemstMapper;
|
||||||
import org.nl.wms.pm_manage.purchase.service.dto.PurchaseDto;
|
import org.nl.wms.pm_manage.purchase.service.dto.PurchaseDto;
|
||||||
import org.nl.wms.pm_manage.purchase.service.vo.PurchasemstListVo;
|
import org.nl.wms.pm_manage.purchase.service.vo.PurchasemstListVo;
|
||||||
import org.nl.wms.ext_manage.purchase.service.dto.EasAuditRequestDto;
|
import org.nl.common.utils.ZplUtil;
|
||||||
import org.nl.wms.pm_manage.purchase.util.ZplUtil;
|
|
||||||
import org.nl.wms.system_manage.enums.SysParamConstant;
|
|
||||||
import org.nl.wms.system_manage.service.param.ISysParamService;
|
import org.nl.wms.system_manage.service.param.ISysParamService;
|
||||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
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.IPmStockReturnService;
|
||||||
@@ -34,9 +33,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.net.Socket;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -195,35 +191,24 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchasemstMapper, Purchase
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void print(Set<String> ids) {
|
public void print(Set<String> ids) {
|
||||||
String ip = sysParamService.findByCode(SysParamConstant.PRINTER_IP).getValue();
|
|
||||||
String port = sysParamService.findByCode(SysParamConstant.PRINTER_PORT).getValue();
|
|
||||||
List<Purchasemst> mstList = purchasemstMapper.selectBatchIds(ids);
|
List<Purchasemst> mstList = purchasemstMapper.selectBatchIds(ids);
|
||||||
if (ObjectUtil.isEmpty(mstList)) {
|
if (ObjectUtil.isEmpty(mstList)) {
|
||||||
throw new BadRequestException("未找到选中的单据");
|
throw new BadRequestException("未找到选中的单据");
|
||||||
}
|
}
|
||||||
StringBuilder allZpl = new StringBuilder();
|
StringBuilder allZpl = new StringBuilder();
|
||||||
int labelCount = 0;
|
|
||||||
for (Purchasemst mst : mstList) {
|
for (Purchasemst mst : mstList) {
|
||||||
List<Purchasedtl> dtlList = purchasedtlMapper.selectList(
|
List<Purchasedtl> dtlList = purchasedtlMapper.selectList(
|
||||||
new LambdaQueryWrapper<Purchasedtl>()
|
new LambdaQueryWrapper<Purchasedtl>()
|
||||||
.eq(Purchasedtl::getBill_id, mst.getBill_id()));
|
.eq(Purchasedtl::getBill_id, mst.getBill_id()));
|
||||||
for (Purchasedtl dtl : dtlList) {
|
for (Purchasedtl dtl : dtlList) {
|
||||||
String zpl = ZplUtil.generateLabel(
|
String zpl = ZplUtil.generatePurchaseLabel(mst.getOrder_no(),
|
||||||
dtl.getSku_name(), dtl.getSku_code(),
|
dtl.getSku_name(), dtl.getSku_code(),
|
||||||
dtl.getQty() != null ? dtl.getQty().stripTrailingZeros().toPlainString() : "0",
|
dtl.getQty() != null ? dtl.getQty().stripTrailingZeros().toPlainString() : "0",
|
||||||
dtl.getUnit(), mst.getBill_id(), dtl.getItem_no());
|
dtl.getBatch_no(), dtl.getItem_no());
|
||||||
allZpl.append(zpl);
|
allZpl.append(zpl);
|
||||||
labelCount++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try (Socket socket = new Socket(ip, Integer.parseInt(port));
|
ZplUtil.print(allZpl.toString());
|
||||||
OutputStream out = socket.getOutputStream()) {
|
|
||||||
out.write(allZpl.toString().getBytes(StandardCharsets.UTF_8));
|
|
||||||
out.flush();
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("打印失败, 打印机: {}:{}, 标签数: {}", ip, port, labelCount, e);
|
|
||||||
throw new BadRequestException("打印机连接失败: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
package org.nl.wms.pm_manage.purchase.util;
|
|
||||||
|
|
||||||
public class ZplUtil {
|
|
||||||
|
|
||||||
public static String generateLabel(String skuName, String skuCode, String qty, String unit,
|
|
||||||
String billId, String itemNo) {
|
|
||||||
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(unit)).append("^FS\n");
|
|
||||||
zpl.append("^FO350,20^BQN,2,5^FDQA,").append(escape(billId)).append("#").append(escape(itemNo)).append("^FS\n");
|
|
||||||
zpl.append("^XZ");
|
|
||||||
return zpl.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String escape(String s) {
|
|
||||||
if (s == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return s.replace("^", "~").replace("~", "~~~");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,16 +2,12 @@ package org.nl.wms.sch_manage.service.core;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.wms.ext_manage.api.AcsApi;
|
import org.nl.wms.ext_manage.api.AcsApi;
|
||||||
import org.nl.wms.ext_manage.service.WmsToAcsService;
|
|
||||||
import org.nl.wms.ext_manage.service.util.AcsResponse;
|
|
||||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||||
@@ -94,7 +90,11 @@ public abstract class AbstractTask {
|
|||||||
*/
|
*/
|
||||||
public ResponseEntity sendTaskOne(String task_id) {
|
public ResponseEntity sendTaskOne(String task_id) {
|
||||||
List<AcsTaskDto> taskDtoList = new ArrayList<>();
|
List<AcsTaskDto> taskDtoList = new ArrayList<>();
|
||||||
taskDtoList.add(this.sendAcsParam(task_id));
|
AcsTaskDto acsTaskDto = this.sendAcsParam(task_id);
|
||||||
|
if (acsTaskDto == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
taskDtoList.add(acsTaskDto);
|
||||||
ResponseEntity response = this.renotifyAcs(taskDtoList);
|
ResponseEntity response = this.renotifyAcs(taskDtoList);
|
||||||
if (response.getStatusCode().equals(HttpStatus.OK)) {
|
if (response.getStatusCode().equals(HttpStatus.OK)) {
|
||||||
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package org.nl.wms.sch_manage.service.core.tasks;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
@@ -67,7 +69,22 @@ public class LineCallFullTask extends AbstractTask {
|
|||||||
@Override
|
@Override
|
||||||
public AcsTaskDto sendAcsParam(String taskId) {
|
public AcsTaskDto sendAcsParam(String taskId) {
|
||||||
SchBaseTask taskDao = taskService.getById(taskId);
|
SchBaseTask taskDao = taskService.getById(taskId);
|
||||||
|
String pointCode1 = taskDao.getPoint_code1();
|
||||||
|
String pointCode2 = taskDao.getPoint_code2();
|
||||||
|
SchBasePoint point1 = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getPoint_code, pointCode1));
|
||||||
|
SchBasePoint point2 = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getPoint_code, pointCode2));
|
||||||
|
if (StrUtil.isEmptyIfStr(point1.getVehicle_code())){
|
||||||
|
taskDao.setRemark("起点没有托盘");
|
||||||
|
taskService.update(taskDao);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!StrUtil.isEmptyIfStr(point2.getVehicle_code())){
|
||||||
|
taskDao.setRemark("当前终点有货");
|
||||||
|
taskService.update(taskDao);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
// 组织下发给acs的数据
|
// 组织下发给acs的数据
|
||||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||||
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ package org.nl.wms.sch_manage.service.core.tasks;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
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.sch_manage.enums.TaskStatus;
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
@@ -69,7 +69,22 @@ public class LineReturnEmptyTask extends AbstractTask {
|
|||||||
@Override
|
@Override
|
||||||
public AcsTaskDto sendAcsParam(String taskId) {
|
public AcsTaskDto sendAcsParam(String taskId) {
|
||||||
SchBaseTask taskDao = taskService.getById(taskId);
|
SchBaseTask taskDao = taskService.getById(taskId);
|
||||||
|
String pointCode1 = taskDao.getPoint_code1();
|
||||||
|
String pointCode2 = taskDao.getPoint_code2();
|
||||||
|
SchBasePoint point1 = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getPoint_code, pointCode1));
|
||||||
|
SchBasePoint point2 = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getPoint_code, pointCode2));
|
||||||
|
if (StrUtil.isEmptyIfStr(point1.getVehicle_code())){
|
||||||
|
taskDao.setRemark("起点没有托盘");
|
||||||
|
taskService.update(taskDao);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!StrUtil.isEmptyIfStr(point2.getVehicle_code())){
|
||||||
|
taskDao.setRemark("当前终点有货");
|
||||||
|
taskService.update(taskDao);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
// 组织下发给acs的数据
|
// 组织下发给acs的数据
|
||||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||||
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
||||||
|
|||||||
@@ -55,11 +55,7 @@ public class DealPurchaseRecBillCallback implements CallbackStrategy {
|
|||||||
purchasedtl.setInstock_qty(param.getPlan_qty().add(purchasedtl.getInstock_qty()));
|
purchasedtl.setInstock_qty(param.getPlan_qty().add(purchasedtl.getInstock_qty()));
|
||||||
purchasedtlService.updateById(purchasedtl);
|
purchasedtlService.updateById(purchasedtl);
|
||||||
|
|
||||||
EasAuditRequestDto.EasAuditEntryDto easAuditEntryDto = new EasAuditRequestDto.EasAuditEntryDto();
|
|
||||||
easAuditEntryDto.setSeq(Integer.parseInt(purchasedtl.getItem_no()));
|
|
||||||
easAuditEntryDto.setQty(param.getPlan_qty());
|
|
||||||
easAuditEntryDto.setEntryId(purchasedtl.getEntry_id());
|
|
||||||
entryList.add(easAuditEntryDto);
|
|
||||||
List<Purchasedtl> list = purchasedtlService.list(new LambdaQueryWrapper<Purchasedtl>()
|
List<Purchasedtl> list = purchasedtlService.list(new LambdaQueryWrapper<Purchasedtl>()
|
||||||
.eq(Purchasedtl::getBill_id, orderCode));
|
.eq(Purchasedtl::getBill_id, orderCode));
|
||||||
boolean flag = list.stream().anyMatch(i -> i.getQty().compareTo(i.getInstock_qty()) != 0);
|
boolean flag = list.stream().anyMatch(i -> i.getQty().compareTo(i.getInstock_qty()) != 0);
|
||||||
@@ -71,6 +67,14 @@ public class DealPurchaseRecBillCallback implements CallbackStrategy {
|
|||||||
.eq(Purchasemst::getBill_id, orderCode)
|
.eq(Purchasemst::getBill_id, orderCode)
|
||||||
.update();
|
.update();
|
||||||
// 保存回传单
|
// 保存回传单
|
||||||
|
for (Purchasedtl dtl : list) {
|
||||||
|
EasAuditRequestDto.EasAuditEntryDto easAuditEntryDto = new EasAuditRequestDto.EasAuditEntryDto();
|
||||||
|
easAuditEntryDto.setSeq(Integer.parseInt(dtl.getItem_no()));
|
||||||
|
easAuditEntryDto.setQty(dtl.getQty());
|
||||||
|
easAuditEntryDto.setEntryId(dtl.getEntry_id());
|
||||||
|
entryList.add(easAuditEntryDto);
|
||||||
|
}
|
||||||
|
|
||||||
EasAuditRequestDto easAuditRequestDto = new EasAuditRequestDto();
|
EasAuditRequestDto easAuditRequestDto = new EasAuditRequestDto();
|
||||||
easAuditRequestDto.setType("WMS");
|
easAuditRequestDto.setType("WMS");
|
||||||
easAuditRequestDto.setMethod("DealBill");
|
easAuditRequestDto.setMethod("DealBill");
|
||||||
@@ -96,6 +100,7 @@ public class DealPurchaseRecBillCallback implements CallbackStrategy {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
iPmStockReturnService.lambdaUpdate()
|
iPmStockReturnService.lambdaUpdate()
|
||||||
.set(PmStockReturn::getStatus,StockReturnStatusEnum.FAIL.getCode())
|
.set(PmStockReturn::getStatus,StockReturnStatusEnum.FAIL.getCode())
|
||||||
|
.set(PmStockReturn::getError_msg, e.getMessage())
|
||||||
.eq(PmStockReturn::getRequest_Id, orderCode);
|
.eq(PmStockReturn::getRequest_Id, orderCode);
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
|
|||||||
Reference in New Issue
Block a user