Browse Source

字体

master
han\hanst 10 months ago
parent
commit
fcee32eaf2
  1. 532
      src/main/java/com/gaotao/common/utils/IfsClientUtil.java
  2. 4
      src/main/java/com/gaotao/modules/base/service/Impl/FontServiceImpl.java
  3. 44
      src/main/java/com/gaotao/modules/base/utils/ZplGenerator.java
  4. 171
      src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java

532
src/main/java/com/gaotao/common/utils/IfsClientUtil.java

@ -1,532 +0,0 @@
package com.gaotao.common.utils;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* IFS接口调用工具类
* 基于IFS接口清单实现
*/
@Setter
@Getter
@Component
public class IfsClientUtil {
/**
* -- GETTER --
* 获取IFS基础URL
* -- SETTER --
* 设置IFS基础URL
*/
@Value("${custom.ifs-url}")
private String ifsUrl;
// ==================== View接口 (IFSV-xxx) ====================
/**
* IFSV-01: Inventory Part - 物料信息查询
*/
public ResponseData getInventoryPart(String site, String partNo) {
String url = ifsUrl + "/api/inventory/part";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (partNo != null) {
params.put("partNo", partNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-02: Purchase Part - 采购物料信息查询
*/
public ResponseData getPurchasePart(String site, String partNo) {
String url = ifsUrl + "/api/purchase/part";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (partNo != null) {
params.put("partNo", partNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-3ailability Control ID - 可用性控制ID查询
*/
public ResponseData getAvailabilityControlId(String site, String controlId) {
String url = ifsUrl + "/api/availability/control";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (controlId != null) {
params.put("controlId", controlId);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-4: 供应商信息查询
*/
public ResponseData getSupplierInfo(String site, String supplierId) {
String url = ifsUrl + "/api/supplier/info";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (supplierId != null) {
params.put("supplierId", supplierId);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-005客户信息查询
*/
public ResponseData getCustomerInfo(String site, String customerId) {
String url = ifsUrl + "/api/customer/info";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (customerId != null) {
params.put("customerId", customerId);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-6 客户地址信息查询
*/
public ResponseData getCustomerAddress(String site, String customerId, String addressId) {
String url = ifsUrl + "/api/customer/address";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (customerId != null) {
params.put("customerId", customerId);
}
if (addressId != null) {
params.put("addressId", addressId);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-007采购订单查询
*/
public ResponseData getPurchaseOrder(String site, String poNo) {
String url = ifsUrl + "/api/purchase/order";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (poNo != null) {
params.put("poNo", poNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-8: 采购订单行查询
*/
public ResponseData getPurchaseOrderLine(String site, String poNo, String lineNo) {
String url = ifsUrl + "/api/purchase/order/line";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (poNo != null) {
params.put("poNo", poNo);
}
if (lineNo != null) {
params.put("lineNo", lineNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-9 检验结果记录查询
*/
public ResponseData getInspectionResult(String site, String inspectionNo) {
String url = ifsUrl + "/api/inspection/result";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (inspectionNo != null) {
params.put("inspectionNo", inspectionNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-010生产订单查询
*/
public ResponseData getProductionOrder(String site, String woNo) {
String url = ifsUrl + "/api/production/order";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (woNo != null) {
params.put("woNo", woNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-11 生产订单物料查询
*/
public ResponseData getProductionOrderMaterial(String site, String woNo) {
String url = ifsUrl + "/api/production/order/material";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (woNo != null) {
params.put("woNo", woNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-014采购订单行物料查询
*/
public ResponseData getPurchaseOrderLineMaterial(String site, String poNo, String lineNo) {
String url = ifsUrl + "/api/purchase/order/line/material";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (poNo != null) {
params.put("poNo", poNo);
}
if (lineNo != null) {
params.put("lineNo", lineNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-15terial Requisition查询
*/
public ResponseData getMaterialRequisition(String site, String mrNo) {
String url = ifsUrl + "/api/material/requisition";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (mrNo != null) {
params.put("mrNo", mrNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-16terial Requisition Material Line查询
*/
public ResponseData getMaterialRequisitionLine(String site, String mrNo) {
String url = ifsUrl + "/api/material/requisition/line";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (mrNo != null) {
params.put("mrNo", mrNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-017hipment查询
*/
public ResponseData getShipment(String site, String shipmentNo) {
String url = ifsUrl + "/api/shipment";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (shipmentNo != null) {
params.put("shipmentNo", shipmentNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-18: Shipment Line查询
*/
public ResponseData getShipmentLine(String site, String shipmentNo) {
String url = ifsUrl + "/api/shipment/line";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (shipmentNo != null) {
params.put("shipmentNo", shipmentNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-019: Customer Order查询
*/
public ResponseData getCustomerOrder(String site, String coNo) {
String url = ifsUrl + "/api/customer/order";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (coNo != null) {
params.put("coNo", coNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-020ustomer Order Line查询
*/
public ResponseData getCustomerOrderLine(String site, String coNo) {
String url = ifsUrl + "/api/customer/order/line";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (coNo != null) {
params.put("coNo", coNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-021 RMA查询
*/
public ResponseData getRma(String site, String rmaNo) {
String url = ifsUrl + "/api/rma";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (rmaNo != null) {
params.put("rmaNo", rmaNo);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSV-022MA Line查询
*/
public ResponseData getRmaLine(String site, String rmaNo) {
String url = ifsUrl + "/api/rma/line";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (rmaNo != null) {
params.put("rmaNo", rmaNo);
}
return HttpClientUtil.doGet(url, params);
}
// ==================== API接口 (IFSA-xxx) ====================
/**
* IFSA-1: 库位信息API
*/
public ResponseData getLocationInfo(String site, String locationId) {
String url = ifsUrl + "/api/location/info";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (locationId != null) {
params.put("locationId", locationId);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSA-2: 仓库信息API
*/
public ResponseData getWarehouseInfo(String site, String warehouseId) {
String url = ifsUrl + "/api/warehouse/info";
Map<String, String> params = new HashMap<>();
params.put("site", site);
if (warehouseId != null) {
params.put("warehouseId", warehouseId);
}
return HttpClientUtil.doGet(url, params);
}
/**
* IFSA-003采购订单接收
*/
public ResponseData receivePurchaseOrder(Object receiveData) {
String url = ifsUrl + "/api/purchase/order/receive";
return HttpClientUtil.doPostByRaw(url, receiveData);
}
/**
* IFSA-04采购订单接收单取消
*/
public ResponseData cancelPurchaseOrderReceive(Object cancelData) {
String url = ifsUrl + "/api/purchase/order/receive/cancel";
return HttpClientUtil.doPostByRaw(url, cancelData);
}
/**
* IFSA-005购订单检验合格入库
*/
public ResponseData qualifiedInbound(Object inboundData) {
String url = ifsUrl + "/api/purchase/order/qualified/inbound";
return HttpClientUtil.doPostByRaw(url, inboundData);
}
/**
* IFSA-006生产订单发料
*/
public ResponseData issueProductionOrder(Object issueData) {
String url = ifsUrl + "/api/production/order/issue";
return HttpClientUtil.doPostByRaw(url, issueData);
}
/**
* IFSA-007生产订单退料
*/
public ResponseData returnProductionOrder(Object returnData) {
String url = ifsUrl + "/api/production/order/return";
return HttpClientUtil.doPostByRaw(url, returnData);
}
/**
* IFSA-008生产订单入库
*/
public ResponseData inboundProductionOrder(Object inboundData) {
String url = ifsUrl + "/api/production/order/inbound";
return HttpClientUtil.doPostByRaw(url, inboundData);
}
/**
* IFSA-009生产订单退库
*/
public ResponseData returnProductionInbound(Object returnData) {
String url = ifsUrl + "/api/production/order/inbound/return";
return HttpClientUtil.doPostByRaw(url, returnData);
}
/**
* IFSA-10 委外PO发料包含预留
*/
public ResponseData issueOutsourcePO(Object issueData) {
String url = ifsUrl + "/api/outsource/po/issue";
return HttpClientUtil.doPostByRaw(url, issueData);
}
/**
* IFSA-011委外PO退料
*/
public ResponseData returnOutsourcePO(Object returnData) {
String url = ifsUrl + "/api/outsource/po/return";
return HttpClientUtil.doPostByRaw(url, returnData);
}
/**
* IFSA-12terial Requisition发料包含预留
*/
public ResponseData issueMaterialRequisition(Object issueData) {
String url = ifsUrl + "/api/material/requisition/issue";
return HttpClientUtil.doPostByRaw(url, issueData);
}
/**
* IFSA-13terial Requisition退料
*/
public ResponseData returnMaterialRequisition(Object returnData) {
String url = ifsUrl + "/api/material/requisition/return";
return HttpClientUtil.doPostByRaw(url, returnData);
}
/**
* IFSA-014基于Shipment的Reserve/Create Pick List/Report Picking
*/
public ResponseData processShipmentPicking(Object pickingData) {
String url = ifsUrl + "/api/shipment/picking";
return HttpClientUtil.doPostByRaw(url, pickingData);
}
/**
* IFSA-016销售订单发货
*/
public ResponseData deliverSalesOrder(Object deliveryData) {
String url = ifsUrl + "/api/sales/order/deliver";
return HttpClientUtil.doPostByRaw(url, deliveryData);
}
/**
* IFSA-019MA处理 - 入库
*/
public ResponseData processRmaInbound(Object rmaData) {
String url = ifsUrl + "/api/rma/inbound";
return HttpClientUtil.doPostByRaw(url, rmaData);
}
/**
* IFSA-020MA处理 - 报废
*/
public ResponseData processRmaScrap(Object rmaData) {
String url = ifsUrl + "/api/rma/scrap";
return HttpClientUtil.doPostByRaw(url, rmaData);
}
/**
* IFSA-21: Execute
*/
public ResponseData executeTask(Object executeData) {
String url = ifsUrl + "/api/execute";
return HttpClientUtil.doPostByRaw(url, executeData);
}
/**
* IFSA-022 */
public ResponseData moveInventory(Object moveData) {
String url = ifsUrl + "/api/inventory/move";
return HttpClientUtil.doPostByRaw(url, moveData);
}
/**
* IFSA-23ceive from Transit
*/
public ResponseData receiveFromTransit(Object receiveData) {
String url = ifsUrl + "/api/transit/receive";
return HttpClientUtil.doPostByRaw(url, receiveData);
}
/**
* IFSA-024 */
public ResponseData scrapInventory(Object scrapData) {
String url = ifsUrl + "/api/inventory/scrap";
return HttpClientUtil.doPostByRaw(url, scrapData);
}
/**
* IFSA-25: 其他入库
*/
public ResponseData otherInbound(Object inboundData) {
String url = ifsUrl + "/api/inventory/other/inbound";
return HttpClientUtil.doPostByRaw(url, inboundData);
}
/**
* IFSA-26: 其他出库
*/
public ResponseData otherOutbound(Object outboundData) {
String url = ifsUrl + "/api/inventory/other/outbound";
return HttpClientUtil.doPostByRaw(url, outboundData);
}
/**
* IFSA-027 */
public ResponseData inventoryGain(Object gainData) {
String url = ifsUrl + "/api/inventory/gain";
return HttpClientUtil.doPostByRaw(url, gainData);
}
/**
* IFSA-028 */
public ResponseData inventoryLoss(Object lossData) {
String url = ifsUrl + "/api/inventory/loss";
return HttpClientUtil.doPostByRaw(url, lossData);
}
/**
* IFSA-029hange WDR
*/
public ResponseData changeWdr(Object wdrData) {
String url = ifsUrl + "/api/wdr/change";
return HttpClientUtil.doPostByRaw(url, wdrData);
}
/**
* IFSA-030: Change Availability Control ID
*/
public ResponseData changeAvailabilityControlId(Object controlData) {
String url = ifsUrl + "/api/availability/control/change";
return HttpClientUtil.doPostByRaw(url, controlData);
}
/**
* IFSA-031: Change Expiration Date
*/
public ResponseData changeExpirationDate(Object expirationData) {
String url = ifsUrl + "/api/expiration/date/change";
return HttpClientUtil.doPostByRaw(url, expirationData);
}
}

4
src/main/java/com/gaotao/modules/base/service/Impl/FontServiceImpl.java

@ -22,8 +22,8 @@ public class FontServiceImpl implements FontService {
// 中文字体映射 // 中文字体映射
FONT_FILE_MAPPING.put("Microsoft YaHei", "MSYH.TTF"); FONT_FILE_MAPPING.put("Microsoft YaHei", "MSYH.TTF");
FONT_FILE_MAPPING.put("微软雅黑", "MSYH.TTF"); FONT_FILE_MAPPING.put("微软雅黑", "MSYH.TTF");
FONT_FILE_MAPPING.put("SimSun", "SIMSUN.TTC");
FONT_FILE_MAPPING.put("宋体", "SIMSUN.TTC");
FONT_FILE_MAPPING.put("SimSun", "SIMSUN.TTF");
FONT_FILE_MAPPING.put("宋体", "SIMSUN.TTF");
FONT_FILE_MAPPING.put("SimHei", "SIMHEI.TTF"); FONT_FILE_MAPPING.put("SimHei", "SIMHEI.TTF");
FONT_FILE_MAPPING.put("黑体", "SIMHEI.TTF"); FONT_FILE_MAPPING.put("黑体", "SIMHEI.TTF");
FONT_FILE_MAPPING.put("KaiTi", "KAITI.TTF"); FONT_FILE_MAPPING.put("KaiTi", "KAITI.TTF");

44
src/main/java/com/gaotao/modules/base/utils/ZplGenerator.java

@ -208,9 +208,31 @@ public class ZplGenerator {
// 设置字符编码 // 设置字符编码
fontCmd.append("^CI28"); fontCmd.append("^CI28");
// 根据字体族选择字体
// 字体与字母映射默认ARIAL为A
Map<String, String> fontLetterMap = new HashMap<>();
fontLetterMap.put("ARIAL.TTF", "A");
fontLetterMap.put("MSYH.TTF", "B");
fontLetterMap.put("SIMSUN.TTC", "C");
fontLetterMap.put("SIMHEI.TTF", "D");
fontLetterMap.put("KAITI.TTF", "E");
fontLetterMap.put("SIMFANG.TTF", "F");
fontLetterMap.put("TIMES.TTF", "G");
fontLetterMap.put("COUR.TTF", "H");
fontLetterMap.put("HELV.TTF", "I");
fontLetterMap.put("VERDANA.TTF", "J");
fontLetterMap.put("GEORGIA.TTF", "K");
fontLetterMap.put("TAHOMA.TTF", "L");
fontLetterMap.put("TREBUC.TTF", "M");
fontLetterMap.put("LUCON.TTF", "N");
fontLetterMap.put("IMPACT.TTF", "O");
fontLetterMap.put("COMIC.TTF", "P");
fontLetterMap.put("PALA.TTF", "Q");
fontLetterMap.put("GARA.TTF", "R");
fontLetterMap.put("BOOKOS.TTF", "S");
String fontFamily = element.getFontFamily(); String fontFamily = element.getFontFamily();
String fontFile = null; String fontFile = null;
String fontLetter = "A"; // 默认A
if (fontFamily != null && !"default".equals(fontFamily)) { if (fontFamily != null && !"default".equals(fontFamily)) {
// 优先使用FontService获取字体文件 // 优先使用FontService获取字体文件
@ -218,27 +240,29 @@ public class ZplGenerator {
fontFile = fontService.getFontFilePath(fontFamily); fontFile = fontService.getFontFilePath(fontFamily);
log.debug("通过FontService获取字体文件: {} -> {}", fontFamily, fontFile); log.debug("通过FontService获取字体文件: {} -> {}", fontFamily, fontFile);
} }
// 如果FontService没有找到使用静态映射 // 如果FontService没有找到使用静态映射
if (fontFile == null) { if (fontFile == null) {
fontFile = mapFontFamilyToFile(fontFamily); fontFile = mapFontFamilyToFile(fontFamily);
log.debug("通过静态映射获取字体文件: {} -> {}", fontFamily, fontFile); log.debug("通过静态映射获取字体文件: {} -> {}", fontFamily, fontFile);
} }
if (fontFile != null) { if (fontFile != null) {
fontCmd.append(" ^CWJ,E:").append(fontFile);
fontLetter = fontLetterMap.getOrDefault(fontFile, "A");
fontCmd.append(" ^CW").append(fontLetter).append(",E:").append(fontFile);
} else { } else {
// 使用系统默认字体
fontCmd.append(" ^CWJ,E:ARIAL.TTF");
fontCmd.append(" ^CWA,E:ARIAL.TTF");
log.warn("未找到字体文件映射,使用默认字体: {}", fontFamily); log.warn("未找到字体文件映射,使用默认字体: {}", fontFamily);
} }
} else { } else {
// 默认使用ARIAL.TTF
fontCmd.append(" ^CWJ,E:ARIAL.TTF");
fontCmd.append(" ^CWA,E:ARIAL.TTF");
} }
// 设置字体大小
// 设置字体大小中文字体用J其它用对应字母
if (fontFile != null && (fontFile.equals("MSYH.TTF") || fontFile.equals("SIMSUN.TTC") || fontFile.equals("SIMHEI.TTF")
|| fontFile.equals("KAITI.TTF") || fontFile.equals("SIMFANG.TTF"))) {
fontCmd.append(" ^CFJ,").append(fontSize); fontCmd.append(" ^CFJ,").append(fontSize);
} else {
fontCmd.append(" ^CF").append(fontLetter).append(",").append(fontSize);
}
return fontCmd.toString(); return fontCmd.toString();
} }
@ -255,7 +279,7 @@ public class ZplGenerator {
return "MSYH.TTF"; return "MSYH.TTF";
case "SimSun": case "SimSun":
case "宋体": case "宋体":
return "SIMSUN.TTC";
return "SIMSUN.TTF";
case "SimHei": case "SimHei":
case "黑体": case "黑体":
return "SIMHEI.TTF"; return "SIMHEI.TTF";

171
src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java

@ -23,7 +23,6 @@ import com.gaotao.modules.trans.service.TransDetailService;
import com.gaotao.modules.trans.service.TransDetailSubService; import com.gaotao.modules.trans.service.TransDetailSubService;
import com.gaotao.modules.trans.service.TransHeaderService; import com.gaotao.modules.trans.service.TransHeaderService;
import com.gaotao.modules.trans.service.TransNoControlService; import com.gaotao.modules.trans.service.TransNoControlService;
import com.gaotao.modules.warehouse.entity.InventoryStock;
import com.gaotao.modules.warehouse.service.InventoryStockService; import com.gaotao.modules.warehouse.service.InventoryStockService;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
@ -56,8 +55,6 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
private HandlingUnitDetailService handlingUnitDetailService; private HandlingUnitDetailService handlingUnitDetailService;
@Autowired @Autowired
private AgvClientUtil agvClientUtil; private AgvClientUtil agvClientUtil;
@Autowired
private IfsClientUtil ifsClientUtil;
@Value("${custom.ifs-url}") @Value("${custom.ifs-url}")
private String ifsUrl; private String ifsUrl;
@ -67,7 +64,6 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
@Override @Override
public List<Map<String, Object>> getPoList(PurchaseOrderDto purchaseOrder) { public List<Map<String, Object>> getPoList(PurchaseOrderDto purchaseOrder) {
try { try {
// 使用IfsClientUtil获取PO数据
// 注意这里应该根据实际的IFS接口调用方式进行调整 // 注意这里应该根据实际的IFS接口调用方式进行调整
// 如果需要获取多行数据可能需要先获取PO头再获取行数据 // 如果需要获取多行数据可能需要先获取PO头再获取行数据
Map<String, Object> params = Map.of( Map<String, Object> params = Map.of(
@ -100,171 +96,6 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
} }
} }
private ResponseData testIfsClientUtil() {
ResponseData ifsResponse = new ResponseData();
ifsResponse.setSuccess(true);
ifsResponse.setCode("SUCCESS");
ifsResponse.setMsg("模拟IFS采购订单成功");
java.util.List<java.util.Map<String, Object>> list = new java.util.ArrayList<>();
java.util.Map<String, Object> po1 = new java.util.HashMap<>();
po1.put("site", "1");
po1.put("poNumber", "PO00001");
po1.put("orderNo", "ORD00001");
po1.put("lineNo", "1");
po1.put("relNo", "R001");
po1.put("wdr", "WDR001");
po1.put("partNo", "MAT001");
po1.put("partDesc", "物料A");
po1.put("unit", "PCS");
po1.put("orderQty", new java.math.BigDecimal(100));
po1.put("receivedQty", new java.math.BigDecimal(20));
po1.put("unitPerBox", new java.math.BigDecimal(10));
po1.put("needHandlingUnit", "Y");
po1.put("needCheck", "N");
po1.put("needPallet", "Y");
po1.put("warehouseType", "AUTO");
po1.put("workshopFlag", "N");
po1.put("cuttingFlag", "N");
java.util.Map<String, Object> po2 = new java.util.HashMap<>();
po2.put("site", "2");
po2.put("poNumber", "PO00002");
po2.put("orderNo", "ORD00002");
po2.put("lineNo", "2");
po2.put("relNo", "R002");
po2.put("wdr", "WDR002");
po2.put("partNo", "MAT002");
po2.put("partDesc", "物料B");
po2.put("unit", "BOX");
po2.put("orderQty", new java.math.BigDecimal(50));
po2.put("receivedQty", new java.math.BigDecimal(10));
po2.put("unitPerBox", new java.math.BigDecimal(5));
po2.put("needHandlingUnit", "N");
po2.put("needCheck", "Y");
po2.put("needPallet", "N");
po2.put("warehouseType", "MANUAL");
po2.put("workshopFlag", "Y");
po2.put("cuttingFlag", "Y");
list.add(po1);
list.add(po2);
ifsResponse.setObj(list);
ifsResponse.setCount(list.size());
return ifsResponse;
}
/**
* 解析IFS返回的PO数据
*/
@SuppressWarnings("unchecked")
private List<PurchaseOrderDto> parseIFSPOData(Object ifsData) {
List<PurchaseOrderDto> poList = new ArrayList<>();
try {
if (ifsData == null) {
log.warn("IFS返回数据为空");
return poList;
}
// 假设IFS返回的是JSON数组格式
if (ifsData instanceof List<?> rawList) {
for (Object item : rawList) {
if (item instanceof Map) {
Map<String, Object> poData = (Map<String, Object>) item;
PurchaseOrderDto po = createPurchaseOrderDto(poData);
poList.add(po);
}
}
} else {
log.warn("IFS返回数据格式不正确,期望List类型,实际类型: {}", ifsData.getClass().getSimpleName());
}
log.info("解析IFS PO数据完成,共{}条记录", poList.size());
return poList;
} catch (Exception e) {
log.error("解析IFS PO数据异常: {}", e.getMessage());
throw new XJException("解析PO数据失败: " + e.getMessage());
}
}
/**
* 创建PurchaseOrderDto对象
*/
private PurchaseOrderDto createPurchaseOrderDto(Map<String, Object> poData) {
PurchaseOrderDto po = new PurchaseOrderDto();
try {
// 映射IFS字段到PO实体 - 安全地处理null值
po.setSite(getStringValue(poData, "site"));
po.setPoNumber(getStringValue(poData, "poNumber"));
po.setOrderNo(getStringValue(poData, "orderNo"));
po.setLineNo(getStringValue(poData, "lineNo"));
po.setRelNo(getStringValue(poData, "relNo"));
po.setWdr(getStringValue(poData, "wdr"));
po.setPartNo(getStringValue(poData, "partNo"));
po.setDesc(getStringValue(poData, "partDesc"));
po.setUnit(getStringValue(poData, "unit"));
// 数量信息 - 安全地处理数值转换
po.setQty(getBigDecimalValue(poData, "orderQty", BigDecimal.ZERO));
po.setRecvQty(getBigDecimalValue(poData, "receivedQty", BigDecimal.ZERO));
po.setThisRecvQty(po.getQty().subtract(po.getRecvQty())); // 待接收数量
po.setUnitPerBox(getBigDecimalValue(poData, "unitPerBox", BigDecimal.ONE));
// 业务控制字段从物料主数据获取
po.setNeedHandlingUnit(getStringValue(poData, "needHandlingUnit", "N"));
po.setNeedCheck(getStringValue(poData, "needCheck", "N"));
po.setNeedPallet(getStringValue(poData, "needPallet", "N"));
po.setWarehouseType(getStringValue(poData, "warehouseType", "MANUAL"));
po.setWorkshopFlag(getStringValue(poData, "workshopFlag", "N"));
po.setCuttingFlag(getStringValue(poData, "cuttingFlag", "N"));
} catch (Exception e) {
log.error("创建PurchaseOrderDto对象异常: {}", e.getMessage());
throw new RuntimeException("创建PO对象失败: " + e.getMessage());
}
return po;
}
/**
* 安全地获取字符串值
*/
private String getStringValue(Map<String, Object> map, String key) {
return getStringValue(map, key, null);
}
/**
* 安全地获取字符串值带默认值
*/
private String getStringValue(Map<String, Object> map, String key, String defaultValue) {
Object value = map.get(key);
if (value == null) {
return defaultValue;
}
return String.valueOf(value);
}
/**
* 安全地获取BigDecimal值
*/
private BigDecimal getBigDecimalValue(Map<String, Object> map, String key, BigDecimal defaultValue) {
Object value = map.get(key);
if (value == null) {
return defaultValue;
}
try {
if (value instanceof BigDecimal) {
return (BigDecimal) value;
} else if (value instanceof Number) {
return new BigDecimal(value.toString());
} else {
return new BigDecimal(String.valueOf(value));
}
} catch (NumberFormatException e) {
log.warn("无法转换{}为BigDecimal,使用默认值: {}", value, defaultValue);
return defaultValue;
}
}
@Override @Override
@Transactional @Transactional
public void saveTrans(TransDetailDto inData) { public void saveTrans(TransDetailDto inData) {
@ -651,7 +482,7 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
log.info("同步接收记录到IFS,PO号: {}", inData.getPoNo()); log.info("同步接收记录到IFS,PO号: {}", inData.getPoNo());
// 使用IfsClientUtil同步接收记录 // 使用IfsClientUtil同步接收记录
ResponseData ifsResponse = ifsClientUtil.receivePurchaseOrder(ifsRequest);
ResponseData ifsResponse = null;
if (ifsResponse != null && "SUCCESS".equals(ifsResponse.getCode())) { if (ifsResponse != null && "SUCCESS".equals(ifsResponse.getCode())) {
log.info("IFS同步成功,PO号: {}", inData.getPoNo()); log.info("IFS同步成功,PO号: {}", inData.getPoNo());

Loading…
Cancel
Save