From 2141e307948468a1e2f202277cd00204fc0590d4 Mon Sep 17 00:00:00 2001 From: xiaoshi <2272816786@qq.com> Date: Tue, 24 Jun 2025 15:59:17 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pr/task/EquipmentCardTaskPlugin.java | 199 +++++++++--------- 1 file changed, 102 insertions(+), 97 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/EquipmentCardTaskPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/EquipmentCardTaskPlugin.java index 1966a94..cfeddcf 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/EquipmentCardTaskPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/EquipmentCardTaskPlugin.java @@ -1,5 +1,7 @@ package zcgj.zcdev.zcdev.pr.task; +import kd.bos.algo.DataSet; +import kd.bos.algo.Row; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; @@ -12,6 +14,7 @@ import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import zcgj.zcdev.zcdev.pr.plugin.form.AdjustAmountOftaxBillPlugin; @@ -29,6 +32,7 @@ import java.util.*; */ public class EquipmentCardTaskPlugin extends AbstractTask { private static final Log log = LogFactory.getLog(EquipmentCardTaskPlugin.class); + @Override public void execute(RequestContext requestContext, Map map) throws KDException {//同步资产卡片 List strings = new ArrayList<>(); @@ -42,7 +46,7 @@ public class EquipmentCardTaskPlugin extends AbstractTask { for (DynamicObject realcard : realcards) { String number = realcard.getString("number");//资产编码 String assetname = realcard.getString("assetname");//资产名称 - log.info("同步的实物卡片为"+number+assetname); + log.info("同步的实物卡片为" + number + assetname); String model = realcard.getString("model");//规格型号 Date realaccountdate = realcard.getDate("realaccountdate");//启用日期 DynamicObject assetunit = realcard.getDynamicObject("assetunit");//资产组织 @@ -53,7 +57,7 @@ public class EquipmentCardTaskPlugin extends AbstractTask { Date prodate = realcard.getDate("zcgj_prodate");//出场日期 DynamicObject storeplace = realcard.getDynamicObject("storeplace");//存放地点 String fulladdress = null; - if(storeplace!=null){ + if (storeplace != null) { DynamicObject storeplaceinfo = BusinessDataServiceHelper.loadSingle("fa_storeplace", new QFilter[]{new QFilter("id", QCP.equals, storeplace.getLong("id"))}); fulladdress = storeplaceinfo.getString("fulladdress"); } @@ -67,120 +71,121 @@ public class EquipmentCardTaskPlugin extends AbstractTask { Date auditdate = realcard.getDate("auditdate");//审核时间 DynamicObject equipmentcard = ORM.create().newDynamicObject("eceq_equipment_card"); - Date date=new Date(); - long timestamp=date.getTime(); //时间戳 - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置格式 - String timeText=format.format(timestamp); + Date date = new Date(); + long timestamp = date.getTime(); //时间戳 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置格式 + String timeText = format.format(timestamp); DynamicObject eceq_equipment_card = BusinessDataServiceHelper.loadSingle("eceq_equipment_card", new QFilter[]{new QFilter("number", QCP.equals, number)}); - if (eceq_equipment_card!=null){ - equipmentcard.set("id",eceq_equipment_card.getLong("id")); + if (eceq_equipment_card != null) { + equipmentcard.set("id", eceq_equipment_card.getLong("id")); } - equipmentcard.set("billno",timeText);//单据编号 - equipmentcard.set("status","C");//单据状态 - equipmentcard.set("billstatus","C");// - equipmentcard.set("enable","1");//可用 - equipmentcard.set("property","OWN");//设备性质 - equipmentcard.set("number",number);//设备编号 - equipmentcard.set("name",assetname);//设备名称 - equipmentcard.set("modelnum",model);//规格型号 - equipmentcard.set("indate",realaccountdate);//入库日期 - equipmentcard.set("org",assetunit);//管理组织 - equipmentcard.set("equipstatus","FREE");//设备状态 - equipmentcard.set("project",null);//工程项目 - equipmentcard.set("useorg",null);//使用组织 - equipmentcard.set("supplier",supplier);//供应商 - equipmentcard.set("carnumber",platenumber);//车牌号 - equipmentcard.set("enginenumber",null);//发动机编号 - equipmentcard.set("framenumber",null);//车架号码 - equipmentcard.set("unit",unit);//设备单位 - equipmentcard.set("power",null);//功率 - equipmentcard.set("manufacturer",manufacturer);//生产厂家 - equipmentcard.set("proddate",prodate);//出场日期 - equipmentcard.set("storageplace",fulladdress);//存放地点 - equipmentcard.set("creator",creator);//创建人 - equipmentcard.set("createtime",createtime);//创建日期 - equipmentcard.set("modifier",modifier);//修改人 - equipmentcard.set("modifytime",modifytime);//修改日期 - equipmentcard.set("auditor",auditor);//审核人 - equipmentcard.set("auditdate",auditdate);//审核日期 - if (eceq_equipment_card!=null){ + equipmentcard.set("billno", timeText);//单据编号 + equipmentcard.set("status", "C");//单据状态 + equipmentcard.set("billstatus", "C");// + equipmentcard.set("enable", "1");//可用 + equipmentcard.set("property", "OWN");//设备性质 + equipmentcard.set("number", number);//设备编号 + equipmentcard.set("name", assetname);//设备名称 + equipmentcard.set("modelnum", model);//规格型号 + equipmentcard.set("indate", realaccountdate);//入库日期 + equipmentcard.set("org", assetunit);//管理组织 + equipmentcard.set("equipstatus", "FREE");//设备状态 + equipmentcard.set("project", null);//工程项目 + equipmentcard.set("useorg", null);//使用组织 + equipmentcard.set("supplier", supplier);//供应商 + equipmentcard.set("carnumber", platenumber);//车牌号 + equipmentcard.set("enginenumber", null);//发动机编号 + equipmentcard.set("framenumber", null);//车架号码 + equipmentcard.set("unit", unit);//设备单位 + equipmentcard.set("power", null);//功率 + equipmentcard.set("manufacturer", manufacturer);//生产厂家 + equipmentcard.set("proddate", prodate);//出场日期 + equipmentcard.set("storageplace", fulladdress);//存放地点 + equipmentcard.set("creator", creator);//创建人 + equipmentcard.set("createtime", createtime);//创建日期 + equipmentcard.set("modifier", modifier);//修改人 + equipmentcard.set("modifytime", modifytime);//修改日期 + equipmentcard.set("auditor", auditor);//审核人 + equipmentcard.set("auditdate", auditdate);//审核日期 + if (eceq_equipment_card != null) { SaveServiceHelper.update(equipmentcard); System.out.println(); - }else { + } else { OperationResult result = OperationServiceHelper.executeOperate("save", "eceq_equipment_card", new DynamicObject[]{equipmentcard}, null); System.out.println(); } - DynamicObject eceq_equipment= BusinessDataServiceHelper.loadSingle("eceq_equipinfo", new QFilter[]{new QFilter("number", QCP.equals, number)}); - if(eceq_equipment!=null){ - SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM"); //设置格式 - String ym =sd.format(date); + DynamicObject eceq_equipment = BusinessDataServiceHelper.loadSingle("eceq_equipinfo", new QFilter[]{new QFilter("number", QCP.equals, number)}); + if (eceq_equipment != null) { + SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM"); //设置格式 + String ym = sd.format(date); DynamicObjectCollection entrys = eceq_equipment.getDynamicObjectCollection("zcgj_entryentity"); QFilter qf = new QFilter("realcard.number", QCP.equals, number); - if (entrys.size()>0){//若分录行数大于0 则取上月的 + if (entrys.size() > 0) {//若分录行数大于0 则取上月的 qf.and(new QFilter("billno", QCP.in, ym)); for (int i = 0; i < entrys.size(); i++) { DynamicObject entry = entrys.get(i); String zcgjDebillno = entry.getString("zcgj_debillno"); entrys.removeIf(record -> isLastMonth(zcgjDebillno));//若属于上个月那就删除重新塞入 } - } DynamicObject[] depresplitdetails = BusinessDataServiceHelper.load("fa_depresplitdetail", "billno,period,splitdept,assentry.costcentrer,assentry.splitamount", new QFilter[]{qf}); - Arrays.sort(depresplitdetails, (o1, o2) -> { - // 获取期间对象 - DynamicObject p1 = o1.getDynamicObject("period"); - DynamicObject p2 = o2.getDynamicObject("period"); - - // === 修复1:正确的空值处理 === - // 将空值放在最后(无论升降序) - if (p1 == null && p2 == null) return 0; - if (p1 == null) return 1; // o1空则排在后面 - if (p2 == null) return -1; // o2空则排在后面 - - String code1 = p1.getString("number"); - String code2 = p2.getString("number"); - - // 处理空字符串 - if (code1 == null) code1 = ""; - if (code2 == null) code2 = ""; - - // === 修复2:自动检测日期格式 === - DateTimeFormatter formatter = detectFormat(code1, code2); - - try { - YearMonth ym1 = parseYearMonth(code1, formatter); - YearMonth ym2 = parseYearMonth(code2, formatter); - - // === 修复3:正确的降序比较 === - return ym2.compareTo(ym1); // 注意:这是ym2在前 - - } catch (DateTimeParseException e) { - // === 修复4:数值化比较作为备选 === - try { - int num1 = Integer.parseInt(code1.replaceAll("\\D", "")); - int num2 = Integer.parseInt(code2.replaceAll("\\D", "")); - return Integer.compare(num2, num1); // 降序数值比较 - } catch (NumberFormatException ex) { - // 最终回退到字符串降序 - return code2.compareTo(code1); - } - } - }); - for (DynamicObject depresplitdetail : depresplitdetails) { + DataSet rows = QueryServiceHelper.queryDataSet(this.getClass().getName(), "fa_depresplitdetail", "billno,period,period.number,splitdept,assentry.costcentrer,assentry.splitamount", qFilter.toArray(), "period.number DESC", 1); +// Arrays.sort(depresplitdetails, (o1, o2) -> { +// // 获取期间对象 +// DynamicObject p1 = o1.getDynamicObject("period"); +// DynamicObject p2 = o2.getDynamicObject("period"); +// +// // === 修复1:正确的空值处理 === +// // 将空值放在最后(无论升降序) +// if (p1 == null && p2 == null) return 0; +// if (p1 == null) return 1; // o1空则排在后面 +// if (p2 == null) return -1; // o2空则排在后面 +// +// String code1 = p1.getString("number"); +// String code2 = p2.getString("number"); +// +// // 处理空字符串 +// if (code1 == null) code1 = ""; +// if (code2 == null) code2 = ""; +// +// // === 修复2:自动检测日期格式 === +// DateTimeFormatter formatter = detectFormat(code1, code2); +// +// try { +// YearMonth ym1 = parseYearMonth(code1, formatter); +// YearMonth ym2 = parseYearMonth(code2, formatter); +// +// // === 修复3:正确的降序比较 === +// return ym2.compareTo(ym1); // 注意:这是ym2在前 +// +// } catch (DateTimeParseException e) { +// // === 修复4:数值化比较作为备选 === +// try { +// int num1 = Integer.parseInt(code1.replaceAll("\\D", "")); +// int num2 = Integer.parseInt(code2.replaceAll("\\D", "")); +// return Integer.compare(num2, num1); // 降序数值比较 +// } catch (NumberFormatException ex) { +// // 最终回退到字符串降序 +// return code2.compareTo(code1); +// } +// } +// }); + for (Row depresplitdetail : rows) { String billno = depresplitdetail.getString("billno"); - DynamicObject period = depresplitdetail.getDynamicObject("period");//折旧区间 - DynamicObject splitdept = depresplitdetail.getDynamicObject("splitdept");//使用部门 - DynamicObjectCollection assentry = depresplitdetail.getDynamicObjectCollection("assentry"); + DynamicObject depresplitdetailInfo = BusinessDataServiceHelper.loadSingle("fa_depresplitdetail", new QFilter[]{new QFilter("billno", QCP.equals, billno)}); + DynamicObject period = depresplitdetailInfo.getDynamicObject("period");//折旧区间 + DynamicObject splitdept = depresplitdetailInfo.getDynamicObject("splitdept");//使用部门 + DynamicObjectCollection assentry = depresplitdetailInfo.getDynamicObjectCollection("assentry"); DynamicObject costcentrer = assentry.get(0).getDynamicObject("costcentrer");//成本中心 BigDecimal splitamount = assentry.get(0).getBigDecimal("splitamount");//分摊金额 DynamicObject addNew = entrys.addNew(); - addNew.set("zcgj_debillno",billno); - addNew.set("zcgj_assperiod",period); - addNew.set("zcgj_headusedept",splitdept); - addNew.set("zcgj_entrybillno",number); - addNew.set("zcgj_entryname",assetname); - addNew.set("zcgj_costcenter",costcentrer); - addNew.set("zcgj_shareamount",splitamount); + addNew.set("zcgj_debillno", billno); + addNew.set("zcgj_assperiod", period); + addNew.set("zcgj_headusedept", splitdept); + addNew.set("zcgj_entrybillno", number); + addNew.set("zcgj_entryname", assetname); + addNew.set("zcgj_costcenter", costcentrer); + addNew.set("zcgj_shareamount", splitamount); } SaveServiceHelper.save(new DynamicObject[]{eceq_equipment}); } @@ -223,7 +228,6 @@ public class EquipmentCardTaskPlugin extends AbstractTask { } - // 自动检测日期格式的辅助方法 private DateTimeFormatter detectFormat(String code1, String code2) { // 常见格式检测 @@ -239,7 +243,8 @@ public class EquipmentCardTaskPlugin extends AbstractTask { if (!code1.isEmpty()) YearMonth.parse(code1, fmt); if (!code2.isEmpty()) YearMonth.parse(code2, fmt); return fmt; // 找到匹配格式 - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } // 默认返回标准格式