bug修复

This commit is contained in:
xiaoshi 2025-06-24 15:59:17 +08:00
parent 5bc5287ee7
commit 2141e30794
1 changed files with 102 additions and 97 deletions

View File

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