diff --git a/.gitignore b/.gitignore index 627233e8..e15e54de 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ *.idea/ out/ -!/src/main/java/kd/cosmic/ +src/main/java/kd/cosmic/ diff --git a/src/main/java/com/yem/em/bd/bomchange/op/BomChangeNewAuditEdit.java b/src/main/java/com/yem/em/bd/bomchange/op/BomChangeNewAuditEdit.java index ee288821..03f89d52 100644 --- a/src/main/java/com/yem/em/bd/bomchange/op/BomChangeNewAuditEdit.java +++ b/src/main/java/com/yem/em/bd/bomchange/op/BomChangeNewAuditEdit.java @@ -93,10 +93,10 @@ public class BomChangeNewAuditEdit extends AbstractOperationServicePlugIn { if (yem_em_replace != null) { DynamicObject replace = BusinessDataServiceHelper.loadSingle(yem_em_replace.getLong("id"), "yem_em_replace"); if (replace != null) { - AtlasUtils.Addreplace(bill, entryentity, replace, "yem_em_replace", "update"); + AtlasUtils.Addreplace(bill, entryentity, replace, "yem_em_replace", "update", "BOM"); } } else { - AtlasUtils.Addreplace(bill, entryentity, null, "yem_em_replace", "add");//新增 + AtlasUtils.Addreplace(bill, entryentity, null, "yem_em_replace", "add", "BOM");//新增 } } if (StringUtils.isNotEmpty(yem_replace)) { @@ -109,10 +109,10 @@ public class BomChangeNewAuditEdit extends AbstractOperationServicePlugIn { if (yem_em_replace != null) { DynamicObject replace = BusinessDataServiceHelper.loadSingle(yem_em_replace.getLong("id"), "yem_em_replace"); if (replace != null) { - AtlasUtils.Addreplace(bill, entryentity, replace, "yem_em_replace", "update"); + AtlasUtils.Addreplace(bill, entryentity, replace, "yem_em_replace", "update", "BOM"); } } else { - AtlasUtils.Addreplace(bill, entryentity, null, "yem_em_replace", "add");//新增 + AtlasUtils.Addreplace(bill, entryentity, null, "yem_em_replace", "add", "BOM");//新增 } } } diff --git a/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java b/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java new file mode 100644 index 00000000..08c18089 --- /dev/null +++ b/src/main/java/com/yem/em/task/GenerateReplaceRelationshipTaskEdit.java @@ -0,0 +1,206 @@ +package com.yem.em.task; + +import com.yem.em.utils.AtlasUtils; +import com.yem.wm.utils.YEM; +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.exception.KDException; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + +import static com.yem.em.task.MatchingPLMChangeUpdateTaskEdit.*; +import static com.yem.em.utils.AtlasUtils.seelctDyn; + +/** + * @Description: 1、如《PLM变更单》分录【替换关系】=【相互替换】【新替换旧】【互不替换】,分录【启用停用状态】=‘停用’,并且【替换件启用停用状态】=‘启用’,更新当前行【执行状态】为【完成】、【完成时间】默认当前时间,并生成替换关系,记录替换关系id以及行id + *

+ * 2、如《PLM变更单》分录【替换关系】=【新增】,分录【替换件启用停用状态】=‘启用’,更新当前行【执行状态】为【完成】、【完成时间】默认当前时间,并生成替换关系,记录替换关系id以及行id + *

+ * 3、如《PLM变更单》分录【替换关系】=【删除】,分录【启用停用状态】=‘停用’,更新当前行【执行状态】为【完成】、【完成时间】默认当前时间,并生成替换关系,记录替换关系id以及行id + * @Date: 2024/8/29 15:38 + * @Created: by ZZSLL + */ + +public class GenerateReplaceRelationshipTaskEdit extends AbstractTask { + + private final static Logger logger = LoggerFactory.getLogger(GenerateReplaceRelationshipTaskEdit.class); + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + + DynamicObject[] plms = queryPLMChange(); + + for (DynamicObject plmObj : plms) { + DynamicObjectCollection collection = plmObj.getDynamicObjectCollection("yem_change_detail"); + DynamicObjectCollection situation_replace = new DynamicObjectCollection(); + DynamicObjectCollection situation_add = new DynamicObjectCollection(); + DynamicObjectCollection situation_delete = new DynamicObjectCollection(); + + for (DynamicObject plm : collection) { + String enablesta = plm.getString("yem_enablesta");//替换件停用启用状态 + String enablestatus_before = plm.getString("yem_enablestatus_before");//停用启用状态 + String invokstatus = plm.getString("yem_invokstatus"); + String exchangetype = plm.getString("yem_exchangetype"); + + //【替换关系】=【相互替换】【新替换旧】【互不替换】 && 【启用停用状态】=‘停用’ && 【替换件启用停用状态】=‘启用’ && 执行状态 != 已完成 + if ("A-B-C".contains(exchangetype) && "A".equals(enablesta) && "B".equals(enablestatus_before) && !"B".equals(invokstatus)) { + situation_replace.add(plm); + } + + // 【替换关系】=【新增】 && 【替换件启用停用状态】=‘启用’ + if ("D".equals(exchangetype) && "A".equals(enablesta) && !"B".equals(invokstatus)) { + situation_add.add(plm); + } + // 【替换关系】=【删除】 && 分录【启用停用状态】=‘停用’ + if ("E".equals(exchangetype) && "B".equals(enablestatus_before) && !"B".equals(invokstatus)) { + situation_delete.add(plm); + } + } + generateReplaceRelation(plmObj, situation_replace); + generateReplaceRelation(plmObj, situation_add); + generateReplaceRelation(plmObj, situation_delete); + } + } + + /** + * 生成替换关系,更新完成时间、状态 + * + * @param plmObj + * @param enabled + */ + private void generateReplaceRelation(DynamicObject plmObj, DynamicObjectCollection enabled) { + DynamicObjectCollection collection = plmObj.getDynamicObjectCollection("yem_change_detail"); + // 更新是否资源、是否总成 + for (DynamicObject plm : collection) { + + String exchangetype = plm.getString("yem_exchangetype"); + String parentno; + if ("D".equals(exchangetype)) {//新增 + parentno = plm.getString("yem_parent_now"); + } else { + parentno = plm.getString("yem_textfield"); + } + DynamicObject assatlasdet = seelctDyn("yem_em_assatlasdet", "number", parentno);//父项编码 + plm.set("yem_isassy", false); + plm.set("yem_isresource", false); + if (assatlasdet != null) { + plm.set("yem_isassy", true); + } + logger.info("是否总成:{},{}", parentno, assatlasdet != null); + DynamicObject basemodelib = seelctDyn("yem_bd_basemodelib", "number", parentno); + if (basemodelib != null) { + plm.set("yem_isresource", true); + } + logger.info("是否资源:{},{}", parentno, basemodelib != null); + } + // 替换关系生成成功之后更新完成时间、状态 + Map successMap = new HashMap<>(); + DynamicObject bomChange = createBOMChange(plmObj, enabled); + DynamicObjectCollection entry = bomChange.getDynamicObjectCollection("yem_entryentity"); + if (!entry.isEmpty()) { + DynamicObject replace = null; + String billno = plmObj.getString("billno"); + String gybg_no = plmObj.getString("yem_gybg_no"); + if (entry.size() == 1) { + logger.info("生成替换关系:PLM单号:{}, PLM工艺变更单号:{},父项编码:{}", billno, gybg_no, enabled.get(0).getString("yem_textfield")); + logger.info("生成_当前替换关系:{}", entry.get(0).getString("yem_replace")); + replace = AtlasUtils.Addreplace(bomChange, entry.get(0), null, "yem_em_replace", "add", "PLM"); + successMap.put(entry.get(0).getLong("id"), bomChange); + } + for (DynamicObject entryObject : entry) { + int idx = entry.indexOf(entryObject); + if (idx == 0) continue; + logger.info("更新替换关系:PLM单号:{}, PLM工艺变更单号:{},父项编码:{}", billno, gybg_no, entryObject.getString("yem_textfield")); + logger.info("更新_替换关系:{}", entryObject.getString("yem_replace")); + replace = AtlasUtils.Addreplace(bomChange, entry.get(0), replace, "yem_em_replace", "update", "PLM"); + successMap.put(entryObject.getLong("id"), bomChange); + } + } + + for (Map.Entry mapEntry : successMap.entrySet()) { + Long bomChangeEntryId = mapEntry.getKey(); + DynamicObject bomChangeObj = mapEntry.getValue(); + DynamicObjectCollection bomChangeEntry = bomChangeObj.getDynamicObjectCollection("yem_entryentity"); + int idx = 0; + for (DynamicObject bom : bomChangeEntry) { + if (bomChangeEntryId == bom.getLong("id")) { + idx = bomChangeEntry.indexOf(bom); + } + } + DynamicObject currentEntry = bomChangeEntry.get(idx); + Date completetime = currentEntry.getDate("yem_completetime");//完成时间 + for (DynamicObject d : collection) { + long id = d.getLong("id"); + if (bomChangeEntryId == id) { + d.set("yem_invokstatus", "B"); + d.set("yem_invoktime", completetime); + } + } + } + + SaveServiceHelper.save(new DynamicObject[]{plmObj}); + } + + /** + * 根据PLM创建BOM,用于生成替换关系 + * + * @param head + * @param entries + * @return + */ + private DynamicObject createBOMChange(DynamicObject head, DynamicObjectCollection entries) { + DynamicObject bomchange = BusinessDataServiceHelper.newDynamicObject("yem_em_bomchange"); + bomchange.set("id", head.getLong("id")); + bomchange.set("createorg", head.getDynamicObject("org"));//创建组织-组织 + bomchange.set("yem_producttype", head.getString("yem_producttype"));//产品分类 + bomchange.set("number", head.getString("billno"));//单据编号 + bomchange.set("yem_date", head.getDate("createtime"));//业务日期-创建时间 + bomchange.set("creator", head.getDynamicObject("creator"));//创建人 + DynamicObjectCollection detail = bomchange.getDynamicObjectCollection("yem_entryentity"); + for (DynamicObject entry : entries) { + DynamicObject addNew = detail.addNew(); + addNew.set("id", entry.getLong("id")); + + String exchangetype = entry.getString("yem_exchangetype"); + + if (exchangetype.equals("D")) {//新增PLM变更后对应BOM变更前 + addNew.set("yem_parentno", entry.getString("yem_parent_now"));//替换后-父件编码 + addNew.set("yem_parentname", entry.getString("yem_name_newparent"));//替换后-父项名称 + addNew.set("yem_subno", entry.getString("yem_child_now"));//替换后-子件编码 + addNew.set("yem_subname", entry.getString("yem_name_newchild"));//替换后-子件名称 + addNew.set("yem_subenname", "yem_englishname");//替换后-子件英文名称 + addNew.set("yem_qty", entry.getBigDecimal("yem_qty_new"));//替换后-数量 + } else {//否则变更前对应变更前 + addNew.set("yem_parentno", entry.getString("yem_textfield"));//替换前-父件编码 + addNew.set("yem_parentname", entry.getString("yem_name_parent"));//替换前-父项名称 + addNew.set("yem_subno", entry.getString("yem_child_before"));//替换前-子件编码 + addNew.set("yem_subname", entry.getString("yem_name_child"));//替换前-子件名称 + addNew.set("yem_subenname", "");//替换前-子件英文名称 + addNew.set("yem_qty", entry.getBigDecimal("yem_qty_before"));//替换前-数量 + } + + addNew.set("yem_enableparno", entry.getString("yem_parent_now"));//替换父件编码-父项编码 + addNew.set("yem_enableparname", entry.getString("yem_name_newparent"));//替换父件名称-父项名称 + addNew.set("yem_enablesubno", entry.getString("yem_child_now"));//替换子件编码-子项编码 + addNew.set("yem_enablesubname", entry.getString("yem_name_newchild"));//替换子件名称 + addNew.set("yem_enablesubenname", entry.getString("yem_englishname"));//替换件英文名称-子件英文名称 + addNew.set("yem_enablesubqty", entry.getBigDecimal("yem_qty_new"));//数量 + + addNew.set("yem_enablesta", entry.getString("yem_enablesta"));//启用停用状态 + addNew.set("yem_replace", exchangetype);//替换关系 + addNew.set("yem_enableddate", entry.getDate("yem_starttime"));//启用时间 + addNew.set("yem_downdate", entry.getDate("yem_stoptime"));//停用时间 + addNew.set("yem_completetime", entry.getDate("yem_completetime"));//执行时间 + addNew.set("yem_remark", "");//备注 + addNew.set("yem_isass", entry.getBoolean("yem_isassy"));//是否总成 + addNew.set("yem_isresource", entry.getBoolean("yem_isresource"));//是否资源 + } + return bomchange; + } +} diff --git a/src/main/java/com/yem/em/task/MatchingPLMChangeUpdateTaskEdit.java b/src/main/java/com/yem/em/task/MatchingPLMChangeUpdateTaskEdit.java new file mode 100644 index 00000000..6241f19d --- /dev/null +++ b/src/main/java/com/yem/em/task/MatchingPLMChangeUpdateTaskEdit.java @@ -0,0 +1,191 @@ +package com.yem.em.task; + +import com.yem.rf.utils.RFUtils; +import com.yem.wm.utils.DynamicObjectUtil; +import com.yem.wm.utils.YEM; +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.exception.KDException; +import kd.bos.orm.query.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.Map; + +/** + * @Description: 1.根据《PLM变更单》中的 + * 【PLM工艺变更单号】+【总成编码】+【子项零件编码】+【子件数量】 + * 匹配《BOM》变更单 + * 【更改单号】+【总成编码】+【子项零件编码】+【数量】+【启用停用状态=‘停用’】更新 《PLM变更单》【启用停用状态】【启用停用时间】; + *

+ * 2.根据《PLM变更单》中的 + * 【PLM工艺变更单号】+【替换后总成编码】+【替换后子项零件编码】+【替换子件数量】 + * 匹配《BOM》变更单 + * 【更改单号】+【总成编码】+【子项零件编码】+【数量】+【启用停用状态=‘启用’】更新 《PLM变更单》【替换件启用停用状态】【替换件启用停用时间】; + * @Date: 2024/8/29 15:08 + * @Created: by ZZSLL + */ + +public class MatchingPLMChangeUpdateTaskEdit extends AbstractTask { + + private static Logger logger = LoggerFactory.getLogger(MatchingPLMChangeUpdateTaskEdit.class); + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + DynamicObject[] plms = queryPLMChange(); + DynamicObject[] boms = queryBOMChange(); + + for (DynamicObject bomObj : boms) { + DynamicObjectCollection bom_entry = bomObj.getDynamicObjectCollection("yem_entryentity"); + for (DynamicObject bom : bom_entry) { + for (DynamicObject plmObj : plms) { + DynamicObjectCollection plm_entry = plmObj.getDynamicObjectCollection("yem_change_detail"); + for (DynamicObject plm : plm_entry) { + String plm_billno = plmObj.getString("yem_gybg_no");//PLM工艺变更单号 + String plm_parent = plm.getString("yem_textfield");//总成编码 + String bom_enablesta = bom.getString("yem_enablesta");//启用停用状态 + Date bom_completetime = bom.getDate("yem_completetime"); + Boolean plmMatchBom = isPlmMatchBom(plmObj, bom, plm); + if (plmMatchBom != null && !plmMatchBom) { + Date stoptime = plm.getDate("yem_stoptime"); + if (YEM.isEmpty(stoptime)) { + plm.set("yem_enablestatus_before", bom_enablesta); + Date downdate = bom.getDate("yem_downdate"); + plm.set("yem_stoptime", downdate); + plm.set("yem_completetime", bom_completetime); + } else { + logger.info("停用_已有时间,不更新,{},{}", plm_billno, plm_parent); + } + } + + if (plmMatchBom != null && plmMatchBom) { + Date starttime = plm.getDate("yem_starttime"); + if (YEM.isEmpty(starttime)) { + Date enableddate = bom.getDate("yem_enableddate"); + plm.set("yem_enablesta", bom_enablesta); + plm.set("yem_starttime", enableddate); + plm.set("yem_completetime", bom_completetime); + } else { + logger.info("启用_已有时间,不更新,{},{}", plm_billno, plm_parent); + } + } + } + } + } + } +// +// for (DynamicObject plmObj : plms) { +// DynamicObjectCollection plm_entry = plmObj.getDynamicObjectCollection("yem_change_detail"); +// String plm_billno = plmObj.getString("yem_gybg_no");//PLM工艺变更单号 +// for (DynamicObject plm : plm_entry) { +// String plm_parent = plm.getString("yem_textfield");//总成编码 +// for (DynamicObject bomObj : boms) { +// DynamicObjectCollection bom_entry = bomObj.getDynamicObjectCollection("yem_entryentity"); +// for (DynamicObject bom : bom_entry) { +// String bom_enablesta = bom.getString("yem_enablesta");//启用停用状态 +// Date bom_completetime = bom.getDate("yem_completetime"); +// Boolean plmMatchBom = isPlmMatchBom(plmObj, bom, plm); +// if (plmMatchBom != null && !plmMatchBom) { +// Date stoptime = plm.getDate("yem_stoptime"); +// if (YEM.isEmpty(stoptime)) { +// plm.set("yem_enablestatus_before", bom_enablesta); +// Date downdate = bom.getDate("yem_downdate"); +// plm.set("yem_stoptime", downdate); +// plm.set("yem_completetime", bom_completetime); +// } else { +// logger.info("停用_已有时间,不更新,{},{}", plm_billno, plm_parent); +// } +// } +// +// if (plmMatchBom != null && plmMatchBom) { +// Date starttime = plm.getDate("yem_starttime"); +// if (YEM.isEmpty(starttime)) { +// Date enableddate = bom.getDate("yem_enableddate"); +// plm.set("yem_enablesta", bom_enablesta); +// plm.set("yem_starttime", enableddate); +// plm.set("yem_completetime", bom_completetime); +// } else { +// logger.info("启用_已有时间,不更新,{},{}", plm_billno, plm_parent); +// } +// } +// } +// } +// } +// } + + SaveServiceHelper.save(plms); + } + + /** + * PLM匹配BOM, + * @param plmObj + * @param bom + * @param plm + * @return 匹配到停用返回false,启用返回true,未匹配到返回null + */ + public static Boolean isPlmMatchBom(DynamicObject plmObj, DynamicObject bom, DynamicObject plm) { + String plm_billno = plmObj.getString("yem_gybg_no");//PLM工艺变更单号 + String bom_billno = bom.getString("yem_changeno");//更改单号 + String bom_parent = bom.getString("yem_parentno");//父件编码 + String bom_child = bom.getString("yem_subno");//子项零件编码 + BigDecimal bom_qty = bom.getBigDecimal("yem_qty");//数量 + String bom_enablesta = bom.getString("yem_enablesta");//启用停用状态 + String plm_parent = plm.getString("yem_textfield");//总成编码 + String plm_child = plm.getString("yem_child_before");//子项零件编码 + BigDecimal plm_qty = plm.getBigDecimal("yem_qty_before");//子件数量 + String plm_after_parent_now = plm.getString("yem_parent_now");//父项编码 + String plm_after_child_now = plm.getString("yem_child_now");//子项编码 + BigDecimal plm_after_qty = plm.getBigDecimal("yem_qty_new"); + + String bom_before_parent_no = bom.getString("yem_parentno");//总成编码 + String bom_before_child_no = bom.getString("yem_subno");//数量 + BigDecimal bom_before_qty = bom.getBigDecimal("yem_qty"); + logger.info("停用_compare: {} {}, {} {}, {} {}, {} {}, {}", plm_billno, bom_billno, plm_parent, bom_parent, plm_child, bom_child, plm_qty, bom_child, bom_enablesta); + if (eq(plm_billno, bom_billno) && eq(plm_parent, bom_parent) && eq(plm_child, bom_child) && eq(plm_qty, bom_qty) && "B".equals(bom_enablesta)) { + logger.info("停用_PLM匹配到BOM,{} {}, {} {}, {} {}, {} {}", plm_billno, bom_billno, plm_parent, bom_parent, plm_child, bom_child, plm_qty, bom_qty); + return false; + } + + logger.info("启用_compare:{} {}, {} {}, {} {}, {} {}, {}", plm_billno, bom_billno,plm_after_parent_now, bom_before_parent_no, plm_after_child_now, bom_before_child_no, plm_after_qty, bom_before_qty, bom_enablesta); + if (eq(plm_billno, bom_billno) && eq(plm_after_parent_now, bom_before_parent_no) && eq(plm_after_child_now, bom_before_child_no) && eq(plm_after_qty, bom_before_qty) && "A".equals(bom_enablesta)) { + logger.info("启用_PLM匹配到BOM,{} {}, {} {}, {} {}, {} {}", plm_billno, bom_billno,plm_after_parent_now, bom_before_parent_no, plm_after_child_now, bom_before_child_no, plm_after_qty, bom_before_qty); + return true; + } + + return null; + } + + public static boolean eq(Object str1, Object str2) { + if (str1 instanceof String && str2 instanceof String) { + return str1.equals(str2); + } + if (str1 instanceof BigDecimal && str2 instanceof BigDecimal) { + return ((BigDecimal) str1).compareTo((BigDecimal) str2) == 0; + } + return false; + } + + public static DynamicObject[] queryPLMChange() { + final String formId = "yem_changecompare"; + final String entryId = "yem_change_detail"; + String selectfields = DynamicObjectUtil.getSelectfields(formId); + selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, formId, entryId); + QFilter qFilter = RFUtils.getBaseQFilter(); + return BusinessDataServiceHelper.load(formId, selectfields, qFilter.toArray()); + } + + public static DynamicObject[] queryBOMChange() { + final String formId = "yem_em_bomchange"; + final String entryId = "yem_entryentity"; + String selectfields = DynamicObjectUtil.getSelectfields(formId); + selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, formId, entryId); + QFilter qFilter = new QFilter("status", "=", "C"); + return BusinessDataServiceHelper.load(formId, selectfields, qFilter.toArray()); + } +} diff --git a/src/main/java/com/yem/em/utils/AtlasUtils.java b/src/main/java/com/yem/em/utils/AtlasUtils.java index 24a70b48..2a4637a5 100644 --- a/src/main/java/com/yem/em/utils/AtlasUtils.java +++ b/src/main/java/com/yem/em/utils/AtlasUtils.java @@ -8,8 +8,6 @@ import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.operate.result.IOperateInfo; import kd.bos.entity.operate.result.OperationResult; import kd.bos.exception.KDBizException; -import kd.bos.form.control.Control; -import kd.bos.form.control.events.ISuportClick; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; @@ -34,8 +32,10 @@ public class AtlasUtils { * @param bill 表头数据包 * @param entryentity 分录行数据包 * @param entityName 单据标识 + * @param source 来源类型 BOM | PLM + * @return */ - public static void Addreplace(DynamicObject bill, DynamicObject entryentity, DynamicObject replace, String entityName, String type) { + public static DynamicObject Addreplace(DynamicObject bill, DynamicObject entryentity, DynamicObject replace, String entityName, String type, String source) { DynamicObject billObj = null; if (type.equals("add")) { billObj = BusinessDataServiceHelper.newDynamicObject(entityName); @@ -46,7 +46,7 @@ public class AtlasUtils { billObj.set("number", entryentity.getString("yem_parentno")); billObj.set("name", entryentity.getString("yem_parentname")); billObj.set("creator", YEM.getCurrentUserId()); - billObj.set("yem_sourcetype", "BOM"); + billObj.set("yem_sourcetype", source); billObj.set("yem_parno", entryentity.getString("yem_subno")); billObj.set("yem_parname", entryentity.getString("yem_subname")); boolean yem_isass = entryentity.getBoolean("yem_isass"); @@ -105,7 +105,12 @@ public class AtlasUtils { subentryentity.set("yem_technology", new Date()); subentryentity.set("yem_remark", entryentity.getString("yem_remark")); subentryentity.set("yem_operator", YEM.getCurrentUserId()); - subentryentity.set("yem_sourcetypeen", "yem_em_bomchange"); + if ("BOM".equals(source)) { + subentryentity.set("yem_sourcetypeen", "yem_em_bomchange"); + } + if ("PLM".equals(source)) { + subentryentity.set("yem_sourcetypeen", "yem_changecompare"); + } subentryentity.set("yem_trackingno", bill.getString("number")); subentryentity.set("yem_trackingid", bill.getPkValue()); subentryentity.set("yem_sourceid", entryentity.getLong("id")); @@ -129,6 +134,7 @@ public class AtlasUtils { // AtlasUtils.Upassatlasdet(bill, entryentity, "Audit"); SubRelationUtils.BomUpdateCMMPTable(bill, entryentity, "Audit"); } + return billObj; } else { List allErrorOrValidateInfo = Operate.getAllErrorOrValidateInfo(); String message = Operate.getMessage(); @@ -1084,6 +1090,4 @@ public class AtlasUtils { } return list; } - - } diff --git a/src/main/java/com/yem/rf/salescommission/SalesCommissionReportPlugin.java b/src/main/java/com/yem/rf/salescommission/SalesCommissionReportPlugin.java index 9263dcd6..614d95cc 100644 --- a/src/main/java/com/yem/rf/salescommission/SalesCommissionReportPlugin.java +++ b/src/main/java/com/yem/rf/salescommission/SalesCommissionReportPlugin.java @@ -194,7 +194,7 @@ public class SalesCommissionReportPlugin extends AbstractReportListDataPlugin { selectfields.add("yem_reccondition yem_reccondition");//收款条件 selectfields.add("yem_es_materialinfo.yem_safobprice yem_safobamount");//销售FOB单价 整机合计价格 selectfields.add("yem_es_materialinfo.yem_singlepartgiftmat yem_singlepartgiftmat");//单台配件赠送金额 赠送配件金额 - selectfields.add("yem_es_materialinfo.yem_fobamount yem_companystandamt");//公司标准价 + selectfields.add("yem_es_materialinfo.yem_fobprice yem_companystandamt");//公司标准价 selectfields.add("CASE WHEN yem_issinosurecon = '1' THEN 'A' ELSE 'B' END yem_iscredit");//是否信保合同 selectfields.add("yem_billtype.number salesorder_billtype");//单据类型 selectfields.add("yem_es_materialinfo.yem_commissiontype salesorder_commissiontype");//业务分类 diff --git a/src/main/java/com/yem/rf/salescommission/SparepartsNotShippedPlugin.java b/src/main/java/com/yem/rf/salescommission/SparepartsNotShippedPlugin.java index b3abd8fe..b42b9eed 100644 --- a/src/main/java/com/yem/rf/salescommission/SparepartsNotShippedPlugin.java +++ b/src/main/java/com/yem/rf/salescommission/SparepartsNotShippedPlugin.java @@ -55,7 +55,7 @@ public class SparepartsNotShippedPlugin extends AbstractReportListDataPlugin { DataSet result = selected.where("yem_billno != ''"); sb.append("yem_billno != ''"); if (YEM.isNotEmpty(yemContract)) { - sb.append(" AND delivernoticebillno like '").append("%").append(yemContract).append("%").append("'"); + sb.append(" AND yem_billno like '").append("%").append(yemContract).append("%").append("'"); } if (YEM.isNotEmpty(yemClient)) { sb.append(" AND yem_client = ").append("'" + yemClient.getString("name") + "'"); diff --git a/src/main/java/com/yem/rf/salescommission/SparepartsPlugin.java b/src/main/java/com/yem/rf/salescommission/SparepartsPlugin.java index 73ff53c1..b7026384 100644 --- a/src/main/java/com/yem/rf/salescommission/SparepartsPlugin.java +++ b/src/main/java/com/yem/rf/salescommission/SparepartsPlugin.java @@ -45,9 +45,9 @@ public class SparepartsPlugin extends AbstractReportListDataPlugin { DataSet yemShippingdetails = yemShippingdetails(); DataSet yemEsDelivernotices = yemEsDelivernotices(); //销售出库关联外销合同 - resDataSet = queryDeliverNotice.leftJoin(yemEsDelivernotices) - .on("queryDeliverNoticeid", "yem_corebillids") - .select(RptUtil.getDataSetFiledAlias(queryDeliverNotice), RptUtil.getDataSetFiledAlias(yemEsDelivernotices)) + resDataSet = yemEsDelivernotices.leftJoin(queryDeliverNotice) + .on("yem_corebillids", "queryDeliverNoticeid") + .select(RptUtil.getDataSetFiledAlias(yemEsDelivernotices), RptUtil.getDataSetFiledAlias(queryDeliverNotice)) .finish(); //外销合同关联发运明细 resDataSet = resDataSet.leftJoin(yemShippingdetails) @@ -92,7 +92,8 @@ public class SparepartsPlugin extends AbstractReportListDataPlugin { DynamicObject yemClient = filter.getDynamicObject("yem_clientname"); Date yem_shipdatesend = filter.getDate("yem_shipdatesend"); Date yem_shipdatesdis = filter.getDate("yem_shipdatesdis"); - + DynamicObjectCollection yem_bd_producttype = filter.getDynamicObjectCollection("yem_bd_producttype"); + DataSet result = selected.where("yem_billno != ''"); StringBuilder sb = new StringBuilder(); sb.append("yem_billno != ''"); @@ -111,8 +112,19 @@ public class SparepartsPlugin extends AbstractReportListDataPlugin { if (YEM.isNotEmpty(yem_shipdatesdis)) { sb.append(" AND yem_shipdate <= '").append("%").append(yem_shipdatesdis).append("%").append("'"); } + if (YEM.isNotEmpty(yem_bd_producttype)){ + List names = new ArrayList<>(); + for (DynamicObject dynamicObject : yem_bd_producttype) { + String name = dynamicObject.getString("name"); + names.add(name); +// sb.append(" AND yem_bd_products = ").append("'" +name + "'"); + } + Map map = new HashMap<>(); + map.put("var",names); + result = result.filter("yem_bd_products in var",map); - DataSet where = selected.where(sb.toString()); + } + DataSet where = result.where(sb.toString()); DataSet distincted = where.distinct(); List> list = RFUtils.debugDataSet(distincted); @@ -257,6 +269,8 @@ public class SparepartsPlugin extends AbstractReportListDataPlugin { selectfields.add("yem_expresscost yem_expresscost"); selectfields.add("yem_customer.name yem_client"); selectfields.add("yem_offeramount yem_contractamount"); + selectfields.add("yem_companyname yem_contractsellerfirm"); + selectfields.add("yem_bd_products.name yem_fittingtype"); selectfields.add("yem_shipports.fbasedataid.name yem_portofdeparture"); selectfields.add("yem_destports.fbasedataid.name yem_portdestination"); selectfields.add("yem_clientcountry.name yem_countryofdestinatio"); @@ -374,8 +388,6 @@ public class SparepartsPlugin extends AbstractReportListDataPlugin { selectfields.add("yem_priceclause.name yem_deliverymethod"); selectfields.add("yem_totalallamount yem_theamountdue");//价税合计 selectfields.add("yem_currency.name yem_fullpaymenttime"); - selectfields.add("yem_companyname yem_contractsellerfirm"); - selectfields.add("yem_bd_products.name yem_fittingtype"); selectfields.add("yem_sourcebillid yemEsDelivernoticeyem_sourcebillid"); selectfields.add("yem_corebillid yem_corebillids"); selectfields.add("'' yem_day"); diff --git a/src/main/java/com/yem/tws/task/CusdecToDeclaredocxTask.java b/src/main/java/com/yem/tws/task/CusdecToDeclaredocxTask.java index 80c3d4e1..3ce961cc 100644 --- a/src/main/java/com/yem/tws/task/CusdecToDeclaredocxTask.java +++ b/src/main/java/com/yem/tws/task/CusdecToDeclaredocxTask.java @@ -1,5 +1,6 @@ package com.yem.tws.task; +import com.yem.ensign.common.CommonUtils; import com.yem.wm.task.YunZhiJaGetOpenidTask; import com.yem.wm.utils.DynamicObjectUtil; import com.yem.wm.utils.YEM; @@ -169,6 +170,11 @@ public class CusdecToDeclaredocxTask extends AbstractTask { declaredocx.set("yem_customsnumber", yemEntryid); declaredocx.set("yem_exportdate", yemFiedatets); declaredocx.set("yem_customsdocumentid", id); + BigDecimal exchangeRate = YEM.getExchangeRate(declaredocx.getDynamicObject("yem_exratetable") + , declaredocx.getDynamicObject("yem_currencybase") + , declaredocx.getDynamicObject("yem_usdcurrency") + , yemFiedatets); + declaredocx.set("exchangeRate",exchangeRate); if ("结关".equals(yemCusdecstatusname) && !YEM.isEmpty(yemFiedatets)) { extracted(Long.valueOf(declaredocx.getPkValue().toString())); } diff --git a/src/main/java/com/yem/wm/bc/bill/from/yemBillPlugInEsBaseFrom.java b/src/main/java/com/yem/wm/bc/bill/from/yemBillPlugInEsBaseFrom.java index 62c6a9cf..ef4a5b1f 100644 --- a/src/main/java/com/yem/wm/bc/bill/from/yemBillPlugInEsBaseFrom.java +++ b/src/main/java/com/yem/wm/bc/bill/from/yemBillPlugInEsBaseFrom.java @@ -37,8 +37,12 @@ public class yemBillPlugInEsBaseFrom extends AbstractBillPlugIn implements Befor long userID = CommonUtils.getUserID(); DynamicObject operator = BusinessDataServiceHelper.loadSingle(userID,"bos_user"); this.getModel().setValue("yem_operator",operator); - DynamicObject Userdep = CommonUtils.getOrgUserDep(org.getLong("id"),userID); - this.getModel().setValue("yem_department",Userdep); + if (org!=null){ + long aLong = org.getLong("id"); + DynamicObject Userdep = CommonUtils.getOrgUserDep(aLong,userID); + this.getModel().setValue("yem_department",Userdep); + } + } @Override diff --git a/src/main/java/com/yem/wm/es/contactbook/op/ContactBookSaveOp.java b/src/main/java/com/yem/wm/es/contactbook/op/ContactBookSaveOp.java index 0d2ac10c..c931a784 100644 --- a/src/main/java/com/yem/wm/es/contactbook/op/ContactBookSaveOp.java +++ b/src/main/java/com/yem/wm/es/contactbook/op/ContactBookSaveOp.java @@ -1,7 +1,10 @@ package com.yem.wm.es.contactbook.op; import com.yem.wm.es.contactbook.validator.ContactBookSaveValidator; +import com.yem.wm.es.shippingdetails.util.PaymentControlUtil; +import com.yem.wm.utils.YEM; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AddValidatorsEventArgs; import kd.bos.entity.plugin.PreparePropertysEventArgs; @@ -12,11 +15,18 @@ import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.AttachmentServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; import java.util.stream.Collectors; +import static com.yem.wm.es.contractamtlist.util.FunUtil.*; +import static com.yem.wm.es.shippingdetails.util.PaymentControlUtil.calcIOUAmount; +import static com.yem.wm.fm.gathering.dynamic.GatheringClaimFormPlugin.getPercentagePeriod; + /** * @Classname ContactBookSaveOp * @Description TODO @@ -26,16 +36,15 @@ import java.util.stream.Collectors; public class ContactBookSaveOp extends AbstractOperationServicePlugIn { + + private static final Logger logger = LoggerFactory.getLogger(ContactBookSaveOp.class); + @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); List keys = e.getFieldKeys(); - keys.add("yem_attachmentpanelap2"); - keys.add("yem_attachmentpanelap3"); - keys.add("yem_attachmentpanelap"); - keys.add("billno"); - keys.add("id"); + keys.addAll(this.billEntityType.getAllFields().keySet()); } @Override @@ -57,17 +66,19 @@ public class ContactBookSaveOp extends AbstractOperationServicePlugIn String operationKey = e.getOperationKey(); if ("save".equals(operationKey)) { for (DynamicObject dataEntity : dataEntities) { - String billno = dataEntity.getString("billno"); +// String billno = dataEntity.getString("billno"); - QFilter qFilter = new QFilter("billno", QCP.equals, billno); - DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_storagetrans", "id, billno", qFilter.toArray()); +// QFilter qFilter = new QFilter("billno", QCP.equals, billno); +// DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_storagetrans", "id, billno", qFilter.toArray()); - for (DynamicObject dynamicObject : load) { +// for (DynamicObject dynamicObject : load) { - AttachmentServiceHelper.remove("yem_es_storagetrans", dynamicObject.getLong("id")); +// AttachmentServiceHelper.remove("yem_es_storagetrans", dynamicObject.getLong("id")); +// +// uploadAttachmentPanel(dataEntity, dynamicObject); +// } - uploadAttachmentPanel(dataEntity, dynamicObject); - } + updatePaymentControlStatus(dataEntity); } // 反写关联发货联系数量 @@ -144,4 +155,105 @@ public class ContactBookSaveOp extends AbstractOperationServicePlugIn } } } + + /** + * + * @param dataEntity + */ + private void updatePaymentControlStatus(DynamicObject dataEntity) { + DynamicObjectCollection c = dataEntity.getDynamicObjectCollection("yem_es_materialinfo"); + Map map = new HashMap<>(); + + for (DynamicObject d : c) { + String shipmentnumbers_m = d.getString("yem_shipmentnumbers_m"); + String contractnumbers_m = d.getString("yem_contractnumbers_m"); + if (YEM.isNotEmpty(shipmentnumbers_m) && YEM.isNotEmpty(contractnumbers_m)) { + map.put(contractnumbers_m, shipmentnumbers_m); + } + } + + List proc = new ArrayList<>(); + List ship = new ArrayList<>(); + List last = new ArrayList<>(); + int iou = 0; + StringBuilder debugMsg = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + + boolean isProcClaimFinish = false;//下单预收金额是否认领完成 + boolean isShipClaimFinish = false;//本次发运 发运预收认领是否完成 + boolean isFinalClaimFinish = false;//尾款是否认领完成 + + String salesorder_no = entry.getKey(); + String ship_no = entry.getValue(); + + logger.info("发货联系书保存: 合同号:{} , 发运明细号:{}", salesorder_no, ship_no); + debugMsg.append(String.format("发货联系书保存: 合同号:%s , 发运明细号:%s", salesorder_no, ship_no)).append("\n"); + DynamicObject saleOrder = BusinessDataServiceHelper.loadSingle("yem_es_salesorder", new QFilter[]{new QFilter("billno", "=", salesorder_no)}); + DynamicObject shipDetail = BusinessDataServiceHelper.loadSingle("yem_shippingdetails", new QFilter[]{new QFilter("billno", "=", ship_no)}); + + DynamicObject[] shipBills = getShipBills(saleOrder, shipDetail, "A");//出运 + DynamicObject[] payBills = getPayBills(saleOrder, shipDetail, "B");//收款单 + + BigDecimal procPreRapRate = PaymentControlUtil.getProcPreRapRate(saleOrder);//生产预收汇比例 + BigDecimal shipPreRapRate = PaymentControlUtil.getShipPreRapRate(saleOrder);//发货预收汇比例 + BigDecimal lastRate = getPercentagePeriod(shipPreRapRate, procPreRapRate);//尾款比例 + logger.info("尾款比例:{}", lastRate); + logger.info("下单预收比例:{},发货预收比例:{},尾款比例:{}", procPreRapRate, shipPreRapRate, lastRate); + debugMsg.append(String.format("下单预收比例:%s,发货预收比例::%s,尾款比例:%s", procPreRapRate, shipPreRapRate, lastRate)).append("\n"); + BigDecimal procClaimAnt = PaymentControlUtil.getPreCollection(saleOrder, payBills, "D");//下单已认领金额 + BigDecimal offeramount = saleOrder.getBigDecimal("yem_offeramount");//合同价格条款金额 + BigDecimal advancePayment = PaymentControlUtil.getAdvancePayment(offeramount, procPreRapRate).setScale(2, RoundingMode.HALF_UP); + + logger.info("下单已认领金额:{}, 下单预收金额:{}", procClaimAnt, advancePayment); + debugMsg.append(String.format("下单已认领金额:%s, 下单预收金额:%s", procClaimAnt, advancePayment)).append("\n"); + // 下单已认领金额 >= 下单预收金额 + if (advancePayment.compareTo(BigDecimal.ZERO) > 0 && procClaimAnt.compareTo(advancePayment) >= 0) { + isProcClaimFinish = true; + } + BigDecimal thisAmt = getThisAmt(shipDetail);//本次出运/发货金额 + // 本次发运已认领金额 >= 发运预收金额 + BigDecimal thisShipIOUAmt = PaymentControlUtil.getAdvancePayment(thisAmt, shipPreRapRate).setScale(2, RoundingMode.HALF_UP);//本次发运欠款金额,本次发运应认领金额 + BigDecimal shipClaimAmt = PaymentControlUtil.getAmountClaimed(new DynamicObject[]{shipDetail}, "E");//本次发运已认领金额 + logger.info("发运已认领金额:{},发运预收金额:{}", shipClaimAmt, thisShipIOUAmt); + debugMsg.append(String.format("发运已认领金额:%s, 发运预收金额:%s", shipClaimAmt, thisShipIOUAmt)).append("\n"); + if (thisShipIOUAmt.compareTo(BigDecimal.ZERO) > 0 && shipClaimAmt.compareTo(thisShipIOUAmt) >= 0) { + isShipClaimFinish = true; + } + + BigDecimal amount = shipDetail.getBigDecimal("yem_offeramount");//发运 价格条款金额 + BigDecimal periodrefundamt = lastRate.multiply(amount).setScale(2, RoundingMode.HALF_UP);//尾款 应收金额 + BigDecimal shipClaimAmt_periodrefund = PaymentControlUtil.getAmountClaimed(new DynamicObject[]{shipDetail}, "F");//本次发运已认领金额_尾款 + logger.info("尾款已认领金额:{}, 尾款应收金额:{}", shipClaimAmt_periodrefund, periodrefundamt); + debugMsg.append(String.format("尾款已认领金额:%s, 尾款应收金额:%s", shipClaimAmt_periodrefund, periodrefundamt)).append("\n"); + // 尾款认领金额 >= 尾款 应收金额 + if (periodrefundamt.compareTo(BigDecimal.ZERO) > 0 && shipClaimAmt_periodrefund.compareTo(periodrefundamt) >= 0) { + isFinalClaimFinish = true; + } + + proc.add(isProcClaimFinish); + ship.add(isShipClaimFinish); + last.add(isFinalClaimFinish); + + DynamicObject[] tradeapps = BusinessDataServiceHelper.load("yem_im_tradeapp", "id, billno", new QFilter[]{new QFilter("yem_im_tradeapp_em.yem_shippingnumber", QCP.equals, shipDetail.getString("billno")), new QFilter("billstatus", QCP.equals, "C")}); + iou = iou + tradeapps.length; + logger.info("欠条个数:{}", tradeapps.length); + logger.info("欠条个数(累计):{}", iou); + debugMsg.append(String.format("欠条个数:%s", tradeapps.length)).append("\n"); + debugMsg.append(String.format("欠条个数(累计):%s", iou)).append("\n"); + debugMsg.append("==========================").append("\n"); + } + if (!proc.contains(false) && !ship.contains(false) && !last.contains(false)) { + //全款完成 + dataEntity.set("yem_paystatus", "A"); + } else if (!proc.contains(false) && !ship.contains(false)) { + //预收完成 + dataEntity.set("yem_paystatus", "B"); + } else if (iou > 0) { + //欠条到位 + dataEntity.set("yem_paystatus", "C"); + } else { + dataEntity.set("yem_paystatus", null); + } + dataEntity.set("yem_debugmsg", debugMsg.toString()); + } } diff --git a/src/main/java/com/yem/wm/fm/gathering/dynamic/GatheringClaimFormPlugin.java b/src/main/java/com/yem/wm/fm/gathering/dynamic/GatheringClaimFormPlugin.java index 72056e26..ab105bda 100644 --- a/src/main/java/com/yem/wm/fm/gathering/dynamic/GatheringClaimFormPlugin.java +++ b/src/main/java/com/yem/wm/fm/gathering/dynamic/GatheringClaimFormPlugin.java @@ -924,7 +924,7 @@ public class GatheringClaimFormPlugin extends AbstractFormPlugin implements RowC * * @return */ - private BigDecimal getPercentagePeriod(BigDecimal shipPreRapRate, BigDecimal procPreRapRate) { + public static BigDecimal getPercentagePeriod(BigDecimal shipPreRapRate, BigDecimal procPreRapRate) { return BigDecimal.ONE.subtract(procPreRapRate.multiply(BigDecimal.valueOf(0.01))).subtract(shipPreRapRate.multiply(BigDecimal.valueOf(0.01))); } diff --git a/src/main/java/com/yem/wm/im/inquirylist/form/InquirylistEdit.java b/src/main/java/com/yem/wm/im/inquirylist/form/InquirylistEdit.java index 8e39cdfe..446f32f5 100644 --- a/src/main/java/com/yem/wm/im/inquirylist/form/InquirylistEdit.java +++ b/src/main/java/com/yem/wm/im/inquirylist/form/InquirylistEdit.java @@ -201,12 +201,14 @@ public class InquirylistEdit extends AbstractBillPlugIn implements BeforeF7Selec super.propertyChanged(e); IDataModel model = this.getModel(); String name = e.getProperty().getName(); + int rowIndex = e.getChangeSet()[0].getRowIndex(); switch (name) { case "yem_productmodel": model.deleteEntryData("yem_multiconfig"); + price(rowIndex); break; case "yem_material": - int rowIndex = e.getChangeSet()[0].getRowIndex(); + DynamicObjectCollection entryEntity = model.getEntryEntity("yem_im_detailedinfor"); DynamicObject dynamicObject = entryEntity.get(rowIndex); long materialId = dynamicObject.getLong("yem_material.id"); @@ -225,6 +227,26 @@ public class InquirylistEdit extends AbstractBillPlugIn implements BeforeF7Selec model.setValue("yem_classification", null, rowIndex); } break; + case"yem_qingdaounitprice": + price(rowIndex); + } + } + + private void price(int rowIndex) { + DynamicObject yemImDetailedinfor = this.getModel().getEntryEntity("yem_im_detailedinfor").get(rowIndex); + DynamicObject yemProductmodel = yemImDetailedinfor.getDynamicObject("yem_productmodel"); + BigDecimal yemQingdaounitprice = yemImDetailedinfor.getBigDecimal("yem_qingdaounitprice"); + if (yemQingdaounitprice.compareTo(BigDecimal.ZERO)==0){ + return; + } + if (yemProductmodel!=null){ + DynamicObject yemProducts = yemProductmodel.getDynamicObject("yem_products"); + if (yemProducts!=null){ + DynamicObject loadSingle = BusinessDataServiceHelper.loadSingle("yem_bd_productstree", "id,number,yem_costdifference" + , new QFilter[]{new QFilter("id", QCP.equals, yemProducts.getLong("id"))}); + BigDecimal yemCostdifference = loadSingle.getBigDecimal("yem_costdifference"); + this.getModel().setValue("yem_unitprice",yemQingdaounitprice.subtract(yemCostdifference), rowIndex); + } } } diff --git a/src/main/java/com/yem/wm/im/inquirylist/op/InquirylistAudit.java b/src/main/java/com/yem/wm/im/inquirylist/op/InquirylistAudit.java index 1650b192..a988e941 100644 --- a/src/main/java/com/yem/wm/im/inquirylist/op/InquirylistAudit.java +++ b/src/main/java/com/yem/wm/im/inquirylist/op/InquirylistAudit.java @@ -1,5 +1,6 @@ package com.yem.wm.im.inquirylist.op; +import com.yem.wm.utils.DynamicObjectUtil; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; @@ -56,11 +57,36 @@ public class InquirylistAudit extends AbstractOperationServicePlugIn { replace(dataEntitie,yemMulticonfigColl); retrofitting(dataEntitie,yemMulticonfigColl); } - + DynamicObjectCollection yemImDetailedinfor = dataEntitie.getDynamicObjectCollection("yem_im_detailedinfor"); + for (DynamicObject dynamicObject : yemImDetailedinfor) { + DynamicObject yemProductmodel = dynamicObject.getDynamicObject("yem_productmodel"); + BigDecimal yemQingdaounitprice = dynamicObject.getBigDecimal("yem_qingdaounitprice"); + if (yemProductmodel!=null){ + DynamicObject yemProducts = yemProductmodel.getDynamicObject("yem_products"); + if (yemProducts!=null){ + long aLong = yemProducts.getLong("id"); + String selectfield = DynamicObjectUtil.getSelectfields("yem_pricelibrary", false); + String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_pricelibrary", "yem_basicmodel", false); + DynamicObject loadSingle = BusinessDataServiceHelper.loadSingle("yem_pricelibrary", selectfields + , new QFilter[]{new QFilter("yem_bd_products.id", QCP.equals, aLong)}); + if (loadSingle!=null){ + DynamicObjectCollection yemBasicmodel = loadSingle.getDynamicObjectCollection("yem_basicmodel"); + for (DynamicObject Basic : yemBasicmodel) { + DynamicObject yemModel = Basic.getDynamicObject("yem_model"); + if (yemModel!=null){ + long yemModelLong = yemModel.getLong("id"); + long yemProductmodelLong = yemProductmodel.getLong("id"); + if (yemModelLong==yemProductmodelLong){ + Basic.set("yem_pricefob",yemQingdaounitprice); + } + } + } + } + SaveServiceHelper.update(loadSingle); + } + } + } } - - - } public Boolean billtype(DynamicObject dataEntitie){ diff --git a/src/main/java/com/yem/wm/im/orderproreqbill/op/orderproreqbillcancelstatusOp.java b/src/main/java/com/yem/wm/im/orderproreqbill/op/orderproreqbillcancelstatusOp.java new file mode 100644 index 00000000..12ec76da --- /dev/null +++ b/src/main/java/com/yem/wm/im/orderproreqbill/op/orderproreqbillcancelstatusOp.java @@ -0,0 +1,34 @@ +package com.yem.wm.im.orderproreqbill.op; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; + +/** + * @author ljw + * @date 2024/8/29 10:26 + * @description orderproreqbillcancelstatusOp + */ +public class orderproreqbillcancelstatusOp extends AbstractOperationServicePlugIn { + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities = e.getDataEntities(); + for (DynamicObject dataEntity : dataEntities) { + long aLong = dataEntity.getLong("id"); + DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("yem_orderproreqbill", "id,number,yem_cancelstatus,yem_flowinstid,yem_forminstid,yem_contremark" + , new QFilter[]{new QFilter("id", QCP.equals, aLong)}); + String yemCancelstatus = dynamicObject.getString("yem_cancelstatus"); + if (yemCancelstatus.equals("B")){ + dynamicObject.set("yem_flowinstid",null); + dynamicObject.set("yem_forminstid",null); + } + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + SaveServiceHelper.update(dynamicObject); + } + } +} diff --git a/src/main/java/com/yem/wm/im/servicerepair/form/ServiceRepairFormPlugin.java b/src/main/java/com/yem/wm/im/servicerepair/form/ServiceRepairFormPlugin.java index 3d18c009..9224d608 100644 --- a/src/main/java/com/yem/wm/im/servicerepair/form/ServiceRepairFormPlugin.java +++ b/src/main/java/com/yem/wm/im/servicerepair/form/ServiceRepairFormPlugin.java @@ -4,6 +4,8 @@ import com.google.common.collect.Maps; import com.yem.wm.utils.FunctionalCommon; import com.yem.wm.utils.YEM; import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.IDataModel; import kd.bos.extplugin.sample.AbstractFormPlugin; import kd.bos.form.CloseCallBack; import kd.bos.form.FormShowParameter; @@ -12,6 +14,7 @@ import kd.bos.form.ShowType; import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.events.ClosedCallBackEvent; import kd.bos.form.operate.FormOperate; +import kd.bos.servicehelper.operation.SaveServiceHelper; import java.util.HashMap; @@ -42,8 +45,10 @@ public class ServiceRepairFormPlugin extends AbstractBillPlugIn { super.closedCallBack(e); IFormView view = this.getView(); String actionId = e.getActionId(); + IDataModel model = this.getModel(); + DynamicObject dataEntity = model.getDataEntity(true); if ("voidreason".equals(actionId)) { - view.invokeOperation("save"); + SaveServiceHelper.save(new DynamicObject[]{dataEntity}); view.invokeOperation("refresh"); } }