From 23221d1cf17918a3b2cf35076b61002de7f8cdc4 Mon Sep 17 00:00:00 2001 From: xiaoshi <2272816786@qq.com> Date: Mon, 16 Jun 2025 18:29:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=89=A9=E5=8D=A1=E7=89=87=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=87=B3=E8=AE=BE=E5=A4=87=20=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/EquipmentCardListPlugin.java | 143 +++++++++++++++- .../pr/task/EquipmentCardTaskPlugin.java | 160 ++++++++++++++++++ 2 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/EquipmentCardTaskPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java index 1eeeaef..247b67e 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCardListPlugin.java @@ -2,20 +2,32 @@ package zcgj.zcdev.zcdev.pr.plugin.form; import com.greenpineyu.fel.common.NumberUtil; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.datamodel.ListSelectedRow; import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.entity.operate.result.OperationResult; import kd.bos.form.control.events.BeforeItemClickEvent; import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.operate.FormOperate; import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.orm.ORM; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.fi.gl.util.DateUtil; import kd.sdk.plugin.Plugin; import org.jetbrains.annotations.NotNull; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Date; import java.util.EventObject; import java.util.HashSet; import java.util.Set; @@ -32,7 +44,7 @@ public class EquipmentCardListPlugin extends AbstractListPlugin implements Plugi public void itemClick(ItemClickEvent evt) { super.itemClick(evt); String itemKey = evt.getItemKey(); - if (itemKey.equals("zcgj_idle")){ + if (itemKey.equals("zcgj_idle")){//闲置 Set setIds = getSelectOrderIds(this.getSelectedRows()); DynamicObject[] equipments = BusinessDataServiceHelper.load("eceq_equipment_card", "billno,billname,equipstatus", new QFilter[]{new QFilter("id", "in", setIds)}); for (DynamicObject equipment : equipments) { @@ -41,6 +53,108 @@ public class EquipmentCardListPlugin extends AbstractListPlugin implements Plugi Object[] save = SaveServiceHelper.save(equipments); System.out.println(); this.getView().showMessage("闲置成功!"); + } else if (itemKey.equals("zcgj_asset")) {//同步资产卡片 + QFilter qFilter = new QFilter("assetcat.number", QCP.in, "100104,100113,100105,100109,100112"); + DynamicObject[] realcards = BusinessDataServiceHelper.load("fa_card_real", "number,assetname,model,realaccountdate,assetunit,supplier,zcgj_platenumber,unit,zcgj_manufacturer,zcgj_prodate,storeplace,creator,createtime,modifier,modifytime,auditdate,auditor", new QFilter[]{qFilter}); + for (DynamicObject realcard : realcards) { + String number = realcard.getString("number");//资产编码 + String assetname = realcard.getString("assetname");//资产名称 + String model = realcard.getString("model");//规格型号 + Date realaccountdate = realcard.getDate("realaccountdate");//启用日期 + DynamicObject assetunit = realcard.getDynamicObject("assetunit");//资产组织 + DynamicObject supplier = realcard.getDynamicObject("supplier");//供应商 + String platenumber = realcard.getString("zcgj_platenumber");//车牌号 + DynamicObject unit = realcard.getDynamicObject("unit");//计量单位 + String manufacturer = realcard.getString("zcgj_manufacturer");//生产厂家 + Date prodate = realcard.getDate("zcgj_prodate");//出场日期 + DynamicObject storeplace = realcard.getDynamicObject("storeplace");//存放地点 + DynamicObject storeplaceinfo = BusinessDataServiceHelper.loadSingle("fa_storeplace", new QFilter[]{new QFilter("id", QCP.equals, storeplace.getLong("id"))}); + String fulladdress = storeplaceinfo.getString("fulladdress"); + DynamicObject creator = realcard.getDynamicObject("creator");//创建人 + Date createtime = realcard.getDate("createtime");//创建时间 + DynamicObject modifier = realcard.getDynamicObject("modifier");//修改人 + Date modifytime = realcard.getDate("modifytime");//修改时间 + DynamicObject auditor = realcard.getDynamicObject("auditor");//审核人 + 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); + 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")); + } + 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 { + 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); + DynamicObjectCollection entrys = eceq_equipment.getDynamicObjectCollection("zcgj_entryentity"); + QFilter qf = new QFilter("realcard.number", QCP.in, number); + 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}); + for (DynamicObject depresplitdetail : depresplitdetails) { + String billno = depresplitdetail.getString("billno"); + DynamicObject period = depresplitdetail.getDynamicObject("period");//折旧区间 + DynamicObject splitdept = depresplitdetail.getDynamicObject("splitdept");//使用部门 + DynamicObjectCollection assentry = depresplitdetail.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); + } + SaveServiceHelper.update(eceq_equipment); + } + } } } @@ -93,4 +207,31 @@ public class EquipmentCardListPlugin extends AbstractListPlugin implements Plugi } return setIds; } + + public static boolean isLastMonth(String dateStr) { + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + try { + // 解析输入的日期字符串 + LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter); + + // 获取当前日期 + LocalDateTime now = LocalDateTime.now(); + + // 计算上个月的年份和月份 + YearMonth lastMonth = YearMonth.from(now.minusMonths(1)); + + // 获取上个月的第一天和最后一天 + LocalDateTime firstDay = lastMonth.atDay(1).atStartOfDay(); + LocalDateTime lastDay = lastMonth.atEndOfMonth().atTime(23, 59, 59); + + // 判断输入日期是否在上个月范围内 + return !dateTime.isBefore(firstDay) && !dateTime.isAfter(lastDay); + } catch (DateTimeParseException e) { + // 处理日期格式错误 + System.err.println("日期格式错误: " + e.getMessage()); + return false; + } + } } 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 new file mode 100644 index 0000000..6b11a97 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/task/EquipmentCardTaskPlugin.java @@ -0,0 +1,160 @@ +package zcgj.zcdev.zcdev.pr.task; + +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.exception.KDException; +import kd.bos.orm.ORM; +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.operation.OperationServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Date; +import java.util.Map; + +/** + * 实物卡片同步设备定时任务 + */ +public class EquipmentCardTaskPlugin extends AbstractTask { + @Override + public void execute(RequestContext requestContext, Map map) throws KDException {//同步资产卡片 + QFilter qFilter = new QFilter("assetcat.number", QCP.in, "100104,100113,100105,100109,100112"); + DynamicObject[] realcards = BusinessDataServiceHelper.load("fa_card_real", "number,assetname,model,realaccountdate,assetunit,supplier,zcgj_platenumber,unit,zcgj_manufacturer,zcgj_prodate,storeplace,creator,createtime,modifier,modifytime,auditdate,auditor", new QFilter[]{qFilter}); + for (DynamicObject realcard : realcards) { + String number = realcard.getString("number");//资产编码 + String assetname = realcard.getString("assetname");//资产名称 + String model = realcard.getString("model");//规格型号 + Date realaccountdate = realcard.getDate("realaccountdate");//启用日期 + DynamicObject assetunit = realcard.getDynamicObject("assetunit");//资产组织 + DynamicObject supplier = realcard.getDynamicObject("supplier");//供应商 + String platenumber = realcard.getString("zcgj_platenumber");//车牌号 + DynamicObject unit = realcard.getDynamicObject("unit");//计量单位 + String manufacturer = realcard.getString("zcgj_manufacturer");//生产厂家 + Date prodate = realcard.getDate("zcgj_prodate");//出场日期 + DynamicObject storeplace = realcard.getDynamicObject("storeplace");//存放地点 + DynamicObject storeplaceinfo = BusinessDataServiceHelper.loadSingle("fa_storeplace", new QFilter[]{new QFilter("id", QCP.equals, storeplace.getLong("id"))}); + String fulladdress = storeplaceinfo.getString("fulladdress"); + DynamicObject creator = realcard.getDynamicObject("creator");//创建人 + Date createtime = realcard.getDate("createtime");//创建时间 + DynamicObject modifier = realcard.getDynamicObject("modifier");//修改人 + Date modifytime = realcard.getDate("modifytime");//修改时间 + DynamicObject auditor = realcard.getDynamicObject("auditor");//审核人 + 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); + 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")); + } + 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 { + 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); + DynamicObjectCollection entrys = eceq_equipment.getDynamicObjectCollection("zcgj_entryentity"); + QFilter qf = new QFilter("realcard.number", QCP.in, number); + 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}); + for (DynamicObject depresplitdetail : depresplitdetails) { + String billno = depresplitdetail.getString("billno"); + DynamicObject period = depresplitdetail.getDynamicObject("period");//折旧区间 + DynamicObject splitdept = depresplitdetail.getDynamicObject("splitdept");//使用部门 + DynamicObjectCollection assentry = depresplitdetail.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); + } + SaveServiceHelper.update(eceq_equipment); + } + } + } + + public static boolean isLastMonth(String dateStr) { + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + try { + // 解析输入的日期字符串 + LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter); + + // 获取当前日期 + LocalDateTime now = LocalDateTime.now(); + + // 计算上个月的年份和月份 + YearMonth lastMonth = YearMonth.from(now.minusMonths(1)); + + // 获取上个月的第一天和最后一天 + LocalDateTime firstDay = lastMonth.atDay(1).atStartOfDay(); + LocalDateTime lastDay = lastMonth.atEndOfMonth().atTime(23, 59, 59); + + // 判断输入日期是否在上个月范围内 + return !dateTime.isBefore(firstDay) && !dateTime.isAfter(lastDay); + } catch (DateTimeParseException e) { + // 处理日期格式错误 + System.err.println("日期格式错误: " + e.getMessage()); + return false; + } + } +}