package com.yem.wm.syn.eas; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.yem.wm.utils.RequestEAS; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.ExtendedDataEntity; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs; import kd.bos.entity.validate.ErrorLevel; import kd.bos.entity.validate.ValidationErrorInfo; import kd.bos.exception.KDBizException; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author 涛 * @date 2023/10/24 * 发货通知单标准服务插件 */ public class YemDelivernoticeService extends AbstractOperationServicePlugIn { private final static Log log = LogFactory.getLog(YemDelivernoticeService.class); @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); e.getFieldKeys().addAll(this.billEntityType.getAllFields().keySet()); } @Override public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { super.beforeExecuteOperationTransaction(e); String operationKey = e.getOperationKey(); if ("audit".equals(operationKey) || "submit".equals(operationKey)) { List selectedRows = e.getSelectedRows(); List list = new ArrayList<>(); for (ExtendedDataEntity selectedRow : selectedRows) { DynamicObject dataEntity = selectedRow.getDataEntity(); dataEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), dataEntity.getDynamicObjectType().getName()); DynamicObject yem_billtype = dataEntity.getDynamicObject("yem_billtype"); String yemSynchronizeeas = dataEntity.getString("yem_synchronizeeas"); if ("B".equals(yemSynchronizeeas)){ list.add(selectedRow); continue; } if (yem_billtype != null) { String number = yem_billtype.getString("number"); if (number.equals("yem_es_delivernotice_zj") || number.equals("yem_es_delivernotice_pj")) { JSONArray json = getJSON(new DynamicObject[]{dataEntity}); try { String s = setWebService(json); if (s.length() > 0) { this.operationResult.addErrorInfo( new ValidationErrorInfo( "", dataEntity.getPkValue(), 0, 0, "err", "billtitle", dataEntity.getString("billno") + "同步EAS失败:" + s, ErrorLevel.Error)); dataEntity.set("yem_synfalt", "同步失败,点击按钮查看失败详情!"); dataEntity.set("yem_synfalt_tag", s); SaveServiceHelper.update(dataEntity); } else { dataEntity.set("yem_iseas", true); dataEntity.set("yem_synfalt", "提交EAS成功!"); dataEntity.set("yem_synfalt_tag", "提交EAS成功"); SaveServiceHelper.update(dataEntity); list.add(selectedRow); } } catch (Exception ex) { log.error("同步EAS异常请联系管理员:" + ex.getMessage()); this.operationResult.addErrorInfo(new ValidationErrorInfo("", dataEntity.getPkValue(), 0, 0, "err", "billtitle", dataEntity.getString("billno") + "同步EAS失败:" + ex.getMessage(), ErrorLevel.Error)); } } else { list.add(selectedRow); } } } e.getSelectedRows().clear(); if (list.size() == 0) { e.setCancel(true); throw new KDBizException("单据提交EAS失败"); } else { e.getSelectedRows().addAll(list); } } } private JSONArray getJSON(DynamicObject[] dataEntities) { JSONArray jsonArray = new JSONArray(); for (DynamicObject dataEntitie : dataEntities) { JSONObject json = new JSONObject(); // 是否外贸单据 “true” “false” 是 布尔 默认是 json.put("cosmic", true); // saleType 销售类型 内销 “1” 外销 “2” 是 字符串, String saletype = dataEntitie.getString("yem_saletype"); json.put("saleType", "A".equals(saletype) ? "1" : "2"); // productType 配件类型 装载机 “1”拖拉机 “2”叉车 “3” 是 字符串 // 产品分类 DynamicObject products = dataEntitie.getDynamicObject("yem_bd_products"); String productType = ""; if (products != null) { String number = products.getString("number"); if (number.contains("ZZJ")) { productType = "1"; } if (number.contains("TLJ")) { productType = "2"; } if (number.contains("CC")) { productType = "3"; } } json.put("productType", productType); //单据状态 json.put("billStatus", 1); //单据编号 json.put("number", dataEntitie.getString("billno")); //送货客户 DynamicObject yemCustomer = dataEntitie.getDynamicObject("yem_customer1"); if (yemCustomer != null) { json.put("customer", setJson("number", yemCustomer.getString("number"))); } //币别 DynamicObject yemCurrency = dataEntitie.getDynamicObject("yem_currency"); if (yemCurrency != null) { //json.put("currency",setJson("number",yemCurrency.getString("number"))); //end by zhouc 2024-03-13 json.put("currency", setJson("number", yemCurrency.getString("description"))); } String isdeclare = dataEntitie.getString("yem_isdeclare"); String val = "A".equals(isdeclare) ? "本票报关" : "本票不报关"; //摘要 json.put("description", val + " " + dataEntitie.getString("yem_comment")); //发货人 DynamicObject yemLinkman = dataEntitie.getDynamicObject("yem_linkman"); if (yemLinkman != null) { json.put("realReceivePerson", setJson("number", yemLinkman.getString("number"))); } //领料人 修改为创建人 DynamicObject creator = dataEntitie.getDynamicObject("creator"); if (creator != null) { json.put("lingliaoren", setJson("number", creator.getString("number"))); } //业务类型 // json.put("bizType", setJson("number", "310")); // change by zzs 2024-05-09 json.put("bizType", setJson("number", "210")); //事务类型 json.put("transactionType", setJson("number", "010")); //库存组织 DynamicObject org = dataEntitie.getDynamicObject("yem_org"); if (org != null) { json.put("storageOrgUnit", setJson("number", org.getString("number"))); } //付款方式 String yemPaymode = dataEntitie.getString("yem_paymode"); if ("CREDIT".equals(yemPaymode)) {//赊销 json.put("paymentType", setJson("number", "002")); } else if ("CASH".equals(yemPaymode)) {//现销 json.put("paymentType", setJson("number", "001")); } //汇率 json.put("exchangeRate", dataEntitie.getBigDecimal("yem_exrate")); //销售类型 // String yemSaletype = dataEntitie.getString("yem_saletype"); // if ("A".equals(yemSaletype)){//内销 // json.put("saleType",1); // } else if ("B".equals(yemSaletype)) {//外销 // json.put("saleType",2); // } //业务日期 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); String yemBizdate = fmt.format(dataEntitie.getDate("yem_bizdate")); json.put("bizDate", yemBizdate); //部门 DynamicObject yemDept = dataEntitie.getDynamicObject("yem_department"); if (yemDept != null) { json.put("adminOrgUnit", setJson("number", yemDept.getString("number"))); } //含税 json.put("isInTax", Boolean.TRUE); //审核人 DynamicObject auditor = dataEntitie.getDynamicObject("auditor"); if (auditor != null) { //json.put("auditor",setJson("number",auditor.getString("number"))); } json.put("auditor", setJson("number", "COSMIC")); //创建人 DynamicObject creators = dataEntitie.getDynamicObject("creator"); if (creators != null) { json.put("creator", setJson("number", creators.getString("number"))); //json.put("creator",setJson("number","00003")); } json.put("creator", setJson("number", "COSMIC")); SimpleDateFormat fmtTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //创建时间 String createtime = fmtTime.format(dataEntitie.getDate("createtime")); json.put("createTime", createtime); //审核日期 Date auditdate = dataEntitie.getDate("auditdate"); if (auditdate != null) { String auditdates = fmtTime.format(auditdate); json.put("auditTime", auditdates); } //财务信息-价和兑合计(本位币) json.put("totalLocalAmount", dataEntitie.getBigDecimal("yem_curtotalallamount")); //财务信息-金额 json.put("totalAmount", dataEntitie.getBigDecimal("yem_amount")); //明细信息分录 //商品明细 DynamicObjectCollection materialcoll = dataEntitie.getDynamicObjectCollection("yem_es_materialinfo"); BigDecimal qty = BigDecimal.ZERO; for (DynamicObject dynamicObject : materialcoll) { qty = qty.add(dynamicObject.getBigDecimal("yem_qty")); } //明细信息-数量汇总 json.put("totalQty", qty); JSONArray entry = getEntry(materialcoll, dataEntitie); json.put("entry", entry); jsonArray.add(json); log.debug(dataEntitie.getString("billno") + "发货通知单同步EASjson" + jsonArray.toJSONString()); } return jsonArray; } //明细信息分录 private JSONArray getEntry(DynamicObjectCollection materialcoll, DynamicObject dataEntitie) { JSONArray jsonArray = new JSONArray(); for (DynamicObject materialentry : materialcoll) { JSONObject json = new JSONObject(); //苍穹分录ID json.put("plmeid", materialentry.getPkValue()); //备注 json.put("remark", materialentry.getString("yem_remark")); //更新类型 json.put("invUpdateType", setJson("number", "002")); //物料编码 DynamicObject yem_materiel = materialentry.getDynamicObject("yem_materiel"); if (yem_materiel != null) { json.put("material", setJson("number", yem_materiel.getString("number"))); } //计量单位 DynamicObject yemUnit = materialentry.getDynamicObject("yem_unit"); if (yemUnit != null) { json.put("unit", setJson("number", yemUnit.getString("number"))); } //数量 json.put("qty", materialentry.getBigDecimal("yem_qty")); //批次 json.put("lot", materialentry.getString("yem_lotnumber")); //仓库 DynamicObject yemWarehouse = materialentry.getDynamicObject("yem_warehouse"); if (yemWarehouse != null) { json.put("warehouse", setJson("number", yemWarehouse.getString("number"))); } //库位 DynamicObject yemLocation = materialentry.getDynamicObject("yem_location"); if (yemLocation != null) { json.put("location", setJson("number", yemLocation.getString("number"))); //库位编码 json.put("saleOrgUnit", yemLocation.getString("number")); } //基本计量单位 DynamicObject yemBaseunit = materialentry.getDynamicObject("yem_baseunit"); if (yemBaseunit != null) { json.put("baseUnit", setJson("number", yemBaseunit.getString("number"))); } //基本数量 json.put("baseQty", materialentry.getBigDecimal("yem_baseqty")); //赠品 json.put("isPresent", materialentry.getBoolean("yem_isgift")); //单价 json.put("salePrice", materialentry.getBigDecimal("yem_price")); //税率% json.put("taxRate", materialentry.getBigDecimal("yem_taxrate")); //含税单价 json.put("taxPrice", materialentry.getBigDecimal("yem_priceandtax")); //实际单价 json.put("actualPrice", materialentry.getBigDecimal("yem_price")); //实际含税单价 json.put("price", materialentry.getBigDecimal("yem_priceandtax")); //金额 json.put("nonTaxAmount", materialentry.getBigDecimal("yem_amt")); //金额本位币 json.put("localNonTaxAmount", materialentry.getBigDecimal("yem_locamt")); //税额 json.put("tax", materialentry.getBigDecimal("yem_taxamount")); //税额本位币 json.put("localTax", materialentry.getBigDecimal("yem_curtaxamount")); //价税合计 json.put("amount", materialentry.getBigDecimal("yem_amountandtax")); //价税合计本位币 json.put("localAmount", materialentry.getBigDecimal("yem_curamountandtax")); //销售组织 DynamicObject yemSalesorg = materialentry.getDynamicObject("yem_salesorg"); if (yemBaseunit != null) { json.put("saleOrgUnit", setJson("number", yemSalesorg.getString("number"))); } //销售员 DynamicObject yemOperator = dataEntitie.getDynamicObject("yem_operator"); if (yemOperator != null) { json.put("salePerson", setJson("number", yemOperator.getString("number"))); } //送货地址 json.put("sendAddress", dataEntitie.getString("yem_receiveaddress")); // 客户订单号 -- 合同号 json.put("orderNumber", dataEntitie.getString("yem_contractnum")); jsonArray.add(json); } return jsonArray; } private String setWebService(JSONArray json) { //同步EAS暂存状态 // String service = RequestEAS.getSaveService(json.toJSONString(), "007"); //同步EAS审核状态 String service = RequestEAS.getService(json.toJSONString(), "007"); JSONObject jsonObject = JSON.parseObject(service); String status = jsonObject.getString("status"); String msg = jsonObject.getString("msg"); String errorMsgs = ""; if (!"0".equals(status)) { JSONArray billErrors = jsonObject.getJSONArray("billErrors"); int i = 1; for (Object billError : billErrors) { JSONObject js = (JSONObject) billError; JSONArray errorMsg = js.getJSONArray("errorMsgs"); if (errorMsgs.length() > 0) { errorMsgs = errorMsgs + "\n" + i + "、" + errorMsg.getString(0); } else { errorMsgs = i + "、" + errorMsg.getString(0); } i++; } if (msg != null) { errorMsgs = msg + "\n" + errorMsgs; } //throw new KDBizException(dataEntitie.getString("billno")+errorMsgs); } return errorMsgs; } private JSONObject setJson(String key, String value) { JSONObject jsonObject = new JSONObject(); jsonObject.put(key, value); return jsonObject; } }