From 13ceea7b4a273dc0e5dbf886d17d3a59c53e238d Mon Sep 17 00:00:00 2001 From: sez Date: Fri, 24 Oct 2025 16:14:56 +0800 Subject: [PATCH] =?UTF-8?q?wms=E5=8E=82=E5=95=86=E3=80=81=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E8=AF=81=E6=94=B9=E7=94=A8=E6=93=8D=E4=BD=9C=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/sys/WmsScsSyncOpPlugin.java | 181 +++++++++++++++ .../operate/sys/WmsZczSyncOpPlugin.java | 216 ++++++++++++++++++ 2 files changed, 397 insertions(+) create mode 100644 lc123/cloud/app/plugin/operate/sys/WmsScsSyncOpPlugin.java create mode 100644 lc123/cloud/app/plugin/operate/sys/WmsZczSyncOpPlugin.java diff --git a/lc123/cloud/app/plugin/operate/sys/WmsScsSyncOpPlugin.java b/lc123/cloud/app/plugin/operate/sys/WmsScsSyncOpPlugin.java new file mode 100644 index 0000000..03137d1 --- /dev/null +++ b/lc123/cloud/app/plugin/operate/sys/WmsScsSyncOpPlugin.java @@ -0,0 +1,181 @@ +package tqq9.lc123.cloud.app.plugin.operate.sys; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.AttachmentServiceHelper; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import tqq9.lc123.cloud.app.plugin.utils.HttpRequestUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +//wms生产商同步 +public class WmsScsSyncOpPlugin extends AbstractOperationServicePlugIn { + private final static Log logger = LogFactory.getLog(WmsScsSyncOpPlugin.class); + + DynamicObject BJURL = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", + new QFilter[]{new QFilter("number", QCP.equals, "BJ_POSTURL")}); + String BJ_URL = (String) BJURL.getString("name"); + DynamicObject GZURL = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", + new QFilter[]{new QFilter("number", QCP.equals, "GZ_POSTURL")}); + String GZ_URL = GZURL.getString("name"); + DynamicObject WMSURL = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", + new QFilter[]{new QFilter("number", QCP.equals, "Ttx_MainURL")}); + String WMS_URL = WMSURL.getString("name"); + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("number"); + e.getFieldKeys().add("name"); + e.getFieldKeys().add("tqq9_address"); + e.getFieldKeys().add("tqq9_proaddress"); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + if (null != dataEntities1 && dataEntities1.length > 0) { + for (DynamicObject dataEntity : dataEntities1) { + //获取附件url路径信息 + List> urlPathsArray = new ArrayList<>(); + List> wms_atts = AttachmentServiceHelper.getAttachments("tqq9_proxyandfactory", dataEntity.getPkValue(), "tqq9_attachmentpanelap"); + for (Map att : wms_atts) { + HashMap map = new HashMap<>(); + String url = (String) att.get("url"); + map.put("urlPath", url); + urlPathsArray.add(map); + } + Map urlPathList = new HashMap<>(); + urlPathList.put("urlPaths", urlPathsArray); + + //其他入参: + String number1 = dataEntity.getString("number");//生产厂商编码 + String name = dataEntity.getString("name");//生产厂商名称 + String tqq9_address = dataEntity.getString("tqq9_address");//地址1,string(50) + String tqq9_proaddress = dataEntity.getString("tqq9_proaddress");//地址2,string(50) + // add|update, 必填 + // 生产厂商编码, string (50) , 必填 + // 生产厂商名称, string (200) + //生产企业许可证/备案凭证号, string (50) + //准证类型, string (50) + //url链接地址, string(200), 必填 + //是否有效,Y/N(默认为Y) + //地址1,string(50) + //地址2,string(50) + //省份,string(50) + //城市,string(50) + //区县,string(50) + //镇,string(50) + //国家,string(50) + //国家编码,string(50) + //省份编码,string(50) + //城市编码,string(50) + //区/县编码,string(50) + //镇编码,string(50) + //邮编,string(50) + //联系人,string(50) + //电话,string(50) + //手机,string(50) + //传真,string(50) + //E-mail,string(200) + //备注,string(500) + + //开始封装 + Map request = new HashMap<>(); + request.put("actionType", "update"); + request.put("manufactoryCode", number1); + request.put("manufactoryName", name); + request.put("address1", tqq9_address); + request.put("address2", tqq9_proaddress); + request.put("urlPathList", urlPathList); + request.put("status", "Y"); + // 最终的外层Map + Map finalMap = new HashMap<>(); + finalMap.put("request", request); + logger.info("wms生产商同步——request:" + request); + StringBuilder xmlBuilder = new StringBuilder(); + xmlBuilder.append("\n"); + buildXml(xmlBuilder, finalMap, 0); + logger.info("wms生产商同步——xml:" + xmlBuilder); + HashMap headMap = new HashMap<>(); + try { + String s = HttpRequestUtils.postXml(WMS_URL + "?method=manufacturer.create&v=2.0&format=xml&customerId=123", xmlBuilder.toString(), headMap); + logger.info("wms生产商同步接口结果:" + s); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + } + + private static void buildXml(StringBuilder xmlBuilder, Map map, int indent) { + String indentStr = createIndent(indent); + + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + + if (value instanceof Map) { + // 处理嵌套Map + xmlBuilder.append(indentStr).append("<").append(key).append(">\n"); + buildXml(xmlBuilder, (Map) value, indent + 1); + xmlBuilder.append(indentStr).append("\n"); + } else if (value instanceof List) { + // 处理List + List list = (List) value; + for (Object item : list) { + if (item instanceof Map) { + xmlBuilder.append(indentStr).append("<").append(key).append(">\n"); + buildXml(xmlBuilder, (Map) item, indent + 1); + xmlBuilder.append(indentStr).append("\n"); + } else { + xmlBuilder.append(indentStr).append("<").append(key).append(">") + .append(escapeXml(item.toString())) + .append("\n"); + } + } + } else { + // 处理普通值 + if (value == null) { + xmlBuilder.append(indentStr).append("<").append(key).append("/>\n"); + } else { + xmlBuilder.append(indentStr).append("<").append(key).append(">") + .append(escapeXml(value.toString())) + .append("\n"); + } + } + } + } + + /** + * XML特殊字符转义 + */ + private static String escapeXml(String text) { + if (text == null) return ""; + return text.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """) + .replace("'", "'"); + } + + // 自定义缩进方法 + private static String createIndent(int indent) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < indent; i++) { + sb.append(" "); // 4个空格 + } + return sb.toString(); + } +} diff --git a/lc123/cloud/app/plugin/operate/sys/WmsZczSyncOpPlugin.java b/lc123/cloud/app/plugin/operate/sys/WmsZczSyncOpPlugin.java new file mode 100644 index 0000000..5bba12b --- /dev/null +++ b/lc123/cloud/app/plugin/operate/sys/WmsZczSyncOpPlugin.java @@ -0,0 +1,216 @@ +package tqq9.lc123.cloud.app.plugin.operate.sys; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.AttachmentServiceHelper; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.util.StringUtils; +import tqq9.lc123.cloud.app.plugin.utils.HttpRequestUtils; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; + +//wms注册证同步 +public class WmsZczSyncOpPlugin extends AbstractOperationServicePlugIn { + private final static Log logger = LogFactory.getLog(WmsZczSyncOpPlugin.class); + + DynamicObject BJURL = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", + new QFilter[]{new QFilter("number", QCP.equals, "BJ_POSTURL")}); + String BJ_URL = (String) BJURL.getString("name"); + DynamicObject GZURL = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", + new QFilter[]{new QFilter("number", QCP.equals, "GZ_POSTURL")}); + String GZ_URL = GZURL.getString("name"); + DynamicObject WMSURL = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", + new QFilter[]{new QFilter("number", QCP.equals, "Ttx_MainURL")}); + String WMS_URL = WMSURL.getString("name"); + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("number"); + e.getFieldKeys().add("tqq9_startdate"); + e.getFieldKeys().add("tqq9_enddate"); + e.getFieldKeys().add("modifytime"); + e.getFieldKeys().add("tqq9_type"); + e.getFieldKeys().add("tqq9_typethree"); + e.getFieldKeys().add("tqq9_remark"); + e.getFieldKeys().add("tqq9_entry.tqq9_e_supplier"); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + if (null != dataEntities1 && dataEntities1.length > 0) { + for (DynamicObject dataEntity : dataEntities1) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String number = dataEntity.getString("number"); + //厂商分录 + DynamicObjectCollection tqq9_entry = dataEntity.getDynamicObjectCollection("tqq9_entry"); + //获取厂商分录的信息 + Map manufactoryList = new HashMap<>(); + List> manufactoryArray = new ArrayList<>(); + for (DynamicObject entry : tqq9_entry) { + DynamicObject tqq9_e_supplier = entry.getDynamicObject("tqq9_e_supplier");//生产厂商 + if (tqq9_e_supplier != null) { + HashMap map = new HashMap<>(); + String number2 = tqq9_e_supplier.getString("number"); + //生产商 + DynamicObject file2 = BusinessDataServiceHelper.loadSingle("tqq9_proxyandfactory", "id,number,name,tqq9_prolicense,tqq9_type", + new QFilter[]{new QFilter("number", QFilter.equals, number2)}); + String MFCode = file2.getString("number"); + String name = file2.getString("name"); + String ProLicenceCode = file2.getString("tqq9_prolicense"); + String tqq9_type = file2.getString("tqq9_type");//厂商类型 + if (StringUtils.isNotEmpty(tqq9_type) && tqq9_type.contains("B")) { + map.put("isAgent", "Y");//代理商 + } else { + map.put("isAgent", "N"); + } + map.put("manufactoryCode", MFCode); + map.put("manufactoryName", name); + map.put("proLicenceCode", ProLicenceCode); + manufactoryArray.add(map); + } + } + manufactoryList.put("manufactory", manufactoryArray); + //获取url路径信息 + List> urlPathsArray = new ArrayList<>(); + //上海盖章注册证附件 + List> wms_atts = AttachmentServiceHelper.getAttachments("tqq9_registration", dataEntity.getPkValue().toString(), "tqq9_attachmentpanelsh"); + for (Map att : wms_atts) { + HashMap map = new HashMap<>(); + String url = (String) att.get("url"); + map.put("urlPath", url); + urlPathsArray.add(map); + } + Map urlPathList = new HashMap<>(); + urlPathList.put("urlPaths", urlPathsArray); + + + //开始封装body + //add|update, 必填 + // 注册证号, string (250) , 必填 + // 是否进口,必填,Y/N (默认为N) + //有效期始, string (10) , YYYY-MM-DD + // 有效期至, string (10) , YYYY-MM-DD , 必填 + // 三级分类, string(50) + // 是否有效, Y/N (默认为Y) + String yxqs = ""; + Date tqq9_startdate = dataEntity.getDate("tqq9_startdate"); + if (tqq9_startdate != null) { + yxqs = sdf.format(tqq9_startdate);//有效期至 + } + String yxqz = ""; + Date tqq9_enddate = dataEntity.getDate("tqq9_enddate");//有效期至 + if (tqq9_enddate != null) { + yxqz = sdf.format(tqq9_enddate);//有效期至 + } + String modifytime = sdf.format(dataEntity.getDate("modifytime"));//修改时间 + String IsImportation = dataEntity.getString("tqq9_type").equals("A") ? "Y" : "N";//是否进口 + Map request = new HashMap<>(); + request.put("actionType", "update"); + request.put("regNo", number); + request.put("imported", IsImportation); + request.put("productDate", yxqs); + request.put("expireDate", yxqz); + DynamicObject tqq9_typethree = dataEntity.getDynamicObject("tqq9_typethree");//三类产品分类 + if (null != tqq9_typethree) { + request.put("threeLevelClass", tqq9_typethree.getString("name")); + } + Map extendProps = new HashMap<>(); + extendProps.put("key1", dataEntity.getString("tqq9_remark"));//备注 + request.put("extendProps", extendProps); + //request.put("threeLevelClass", "【三类】口腔科器械(17)"); + request.put("status", "Y"); + request.put("updateTime", modifytime); + request.put("urlPathList", urlPathList); + request.put("manufactoryList", manufactoryList); + // 最终的外层Map + Map finalMap = new HashMap<>(); + finalMap.put("request", request); + logger.info("wms注册证同步request:" + request); + StringBuilder xmlBuilder = new StringBuilder(); + xmlBuilder.append("\n"); + buildXml(xmlBuilder, finalMap, 0); + logger.info("wms注册证同步xml:" + xmlBuilder); + HashMap headMap = new HashMap<>(); + try { + String s = HttpRequestUtils.postXml(WMS_URL + "?method=registrationcertificate.create&v=2.0&format=xml&customerId=123", xmlBuilder.toString(), headMap); + logger.info("wms注册证接口结果:" + s); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + } + + private static void buildXml(StringBuilder xmlBuilder, Map map, int indent) { + String indentStr = createIndent(indent); + + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + + if (value instanceof Map) { + // 处理嵌套Map + xmlBuilder.append(indentStr).append("<").append(key).append(">\n"); + buildXml(xmlBuilder, (Map) value, indent + 1); + xmlBuilder.append(indentStr).append("\n"); + } else if (value instanceof List) { + // 处理List + List list = (List) value; + for (Object item : list) { + if (item instanceof Map) { + xmlBuilder.append(indentStr).append("<").append(key).append(">\n"); + buildXml(xmlBuilder, (Map) item, indent + 1); + xmlBuilder.append(indentStr).append("\n"); + } else { + xmlBuilder.append(indentStr).append("<").append(key).append(">") + .append(escapeXml(item.toString())) + .append("\n"); + } + } + } else { + // 处理普通值 + if (value == null) { + xmlBuilder.append(indentStr).append("<").append(key).append("/>\n"); + } else { + xmlBuilder.append(indentStr).append("<").append(key).append(">") + .append(escapeXml(value.toString())) + .append("\n"); + } + } + } + } + + /** + * XML特殊字符转义 + */ + private static String escapeXml(String text) { + if (text == null) return ""; + return text.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """) + .replace("'", "'"); + } + + // 自定义缩进方法 + private static String createIndent(int indent) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < indent; i++) { + sb.append(" "); // 4个空格 + } + return sb.toString(); + } +} +