Переглянути джерело

Merge remote-tracking branch 'origin/master'

13246659623 5 місяців тому
батько
коміт
f7e43044e7

+ 314 - 0
src/main/java/fi/ar/formplugin/AcctageForm.java

@@ -0,0 +1,314 @@
+package fi.ar.formplugin;
+
+
+import kd.bos.dataentity.serialization.SerializationUtils;
+import kd.bos.dataentity.utils.ObjectUtils;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.entity.filter.FilterValue;
+import kd.bos.report.plugin.*;
+import kd.bos.context.*;
+import kd.fi.arapcommon.report.acctagev2.AcctageParam;
+import org.apache.commons.lang.*;
+import kd.bos.dataentity.resource.*;
+import kd.bos.entity.*;
+import kd.bos.form.field.*;
+import kd.bos.form.control.*;
+import java.util.List;
+import java.util.stream.*;
+import kd.bplat.scmc.report.conf.*;
+import kd.bos.entity.datamodel.events.*;
+import kd.bplat.scmc.report.core.*;
+import kd.bos.dataentity.utils.*;
+import kd.bos.dataentity.entity.*;
+import kd.fi.arapcommon.report.acctage.*;
+import kd.bos.dataentity.serialization.*;
+import kd.bos.orm.query.*;
+import kd.bos.servicehelper.*;
+import com.alibaba.fastjson.*;
+import kd.fi.arapcommon.helper.*;
+import kd.fi.arapcommon.report.*;
+import kd.fi.arapcommon.util.*;
+import kd.bos.servicehelper.basedata.*;
+import kd.bos.bill.*;
+import kd.bos.report.*;
+import kd.bos.entity.report.*;
+import java.util.*;
+import java.util.function.*;
+import kd.bos.dataentity.metadata.*;
+import kd.bos.entity.property.*;
+import kd.bos.entity.filter.*;
+import kd.bos.report.filter.*;
+import kd.bos.dataentity.metadata.clr.*;
+import kd.bos.form.container.*;
+import kd.bos.form.*;
+import kd.bos.list.*;
+import kd.bos.form.events.*;
+import kd.bos.entity.datamodel.*;
+import kd.bos.form.field.events.*;
+
+/**
+ * @author cjz
+ * @date 2024/10/30 17:34
+ * @description:标准报表改造
+ */
+public class AcctageForm extends AbstractReportFormPlugin implements HyperLinkClickListener
+{
+    private List<Long> orgIds;
+    private ReportConf confCache;
+
+    public AcctageForm() {
+        this.orgIds = null;
+    }
+
+    public void registerListener(final EventObject e) {
+        super.registerListener(e);
+        final ReportList list = (ReportList)this.getControl("reportlistap");
+        list.addHyperClickListener((HyperLinkClickListener)this);
+        final BasedataEdit orgCtrl = (BasedataEdit)this.getControl("orgs");
+        orgCtrl.addBeforeF7SelectListener(beforeF7SelectEvent -> {
+            final ListShowParameter showParameter = (ListShowParameter)beforeF7SelectEvent.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(new QFilter("id", "in", (Object)this.getOrgIds()));
+        });
+        final BasedataEdit billTypeEdit = (BasedataEdit)this.getControl("billtypes");
+        billTypeEdit.addBeforeF7SelectListener(listener -> {
+            final ListShowParameter formShowParameter = (ListShowParameter)listener.getFormShowParameter();
+            final String billScope = (String)this.getModel().getValue("sourceentity");
+            final List<String> billScopes = new LinkedList<String>();
+            if ("ALL".equals(billScope)) {
+                if (this.isAr()) {
+                    billScopes.add("ar_finarbill");
+                    billScopes.add("ar_busbill");
+                }
+                else {
+                    billScopes.add("ap_finapbill");
+                    billScopes.add("ap_busbill");
+                }
+            }
+            if (billScope.contains("fin")) {
+                if (this.isAr()) {
+                    billScopes.add("ar_finarbill");
+                }
+                else {
+                    billScopes.add("ap_finapbill");
+                }
+            }
+            if (billScope.contains("bus")) {
+                if (this.isAr()) {
+                    billScopes.add("ar_busbill");
+                }
+                else {
+                    billScopes.add("ap_busbill");
+                }
+            }
+            formShowParameter.getListFilterParameter().setFilter(new QFilter("billformid", "in", (Object)billScopes));
+        });
+    }
+
+    public void initDefaultQueryParam(final ReportQueryParam queryParam) {
+        if (EmptyUtils.isEmpty(this.getModel().getValue("orgs"))) {
+            this.orgIds = this.getOrgIds();
+            if (this.orgIds != null && this.orgIds.size() > 0) {
+                long orgId = RequestContext.get().getOrgId();
+                if (!this.orgIds.contains(orgId)) {
+                    orgId = this.orgIds.get(0);
+                }
+                this.getModel().setValue("orgs", (Object)new Object[] { orgId });
+            }
+        }
+        this.setCompareDateComboItems();
+    }
+
+    private List<Long> getOrgIds() {
+        if (this.orgIds == null) {
+            final List<DynamicObject> orgs = OrgHelper.getAuthorizedInitializedOrgs(this.getView().getEntityId(), "47150e89000000ac", this.isAr());
+            this.orgIds = (List)orgs.stream().map((org) -> {
+                return org.getLong("id");
+            }).distinct().collect(Collectors.toList());
+        }
+        return this.orgIds;
+    }
+
+    private boolean isAr() {
+        return StringUtils.contains(this.getView().getEntityId(), "ar_");
+    }
+
+    private void setCompareDateComboItems() {
+        final String sourceEntity = (String)this.getModel().getValue("sourceentity");
+        final List<ComboItem> comboItems = new ArrayList<ComboItem>(64);
+        List<ComboItem> combo = new ArrayList<ComboItem>(64);
+        if ("ALL".equals(sourceEntity) || "finpaidbill".equals(sourceEntity)) {
+            final ComboItem comboItem = new ComboItem(new LocaleString(ResManager.loadKDString("\u6309\u5355\u636e\u65e5\u671f", "AcctageForm_6", "fi-arapcommon", new Object[0])), "bizdate");
+            comboItems.add(comboItem);
+            this.setStandard(comboItems);
+            return;
+        }
+        if ("paidbill".equals(sourceEntity)) {
+            final ComboItem bizDateItem = new ComboItem(new LocaleString(ResManager.loadKDString("\u6309\u4e1a\u52a1\u65e5\u671f", "AcctageForm_7", "fi-arapcommon", new Object[0])), "bizdate");
+            comboItems.add(bizDateItem);
+            final String recDate = ResManager.loadKDString("\u6536\u6b3e\u65e5\u671f", "AcctageForm_8", "fi-arapcommon", new Object[0]);
+            final String payDate = ResManager.loadKDString("\u4ed8\u6b3e\u65e5\u671f", "AcctageForm_9", "fi-arapcommon", new Object[0]);
+            final ComboItem payDateItem = new ComboItem(new LocaleString(ResManager.loadKDString("\u6309%s", "AcctageForm_10", "fi-arapcommon", new Object[] { this.isAr() ? recDate : payDate })), this.isAr() ? "payeedate" : "paydate");
+            comboItems.add(payDateItem);
+            this.setStandard(comboItems);
+            return;
+        }
+        final Set<String> allSourceEntityKeys = this.buildSourceEntityKeys(sourceEntity);
+        List<DateTimeProp> datePropIntersection = null;
+        for (final String entityKey : allSourceEntityKeys) {
+            final List<DateTimeProp> dateProps = EntityMetadataUtils.getDateProps(entityKey);
+            if (datePropIntersection == null) {
+                datePropIntersection = dateProps;
+            }
+            else {
+                final Iterator<DateTimeProp> iterator = datePropIntersection.iterator();
+                while (iterator.hasNext()) {
+                    final DateTimeProp next = iterator.next();
+                    boolean contains = false;
+                    for (final DateTimeProp p : dateProps) {
+                        if (p.getName().equals(next.getName())) {
+                            contains = true;
+                            break;
+                        }
+                    }
+                    if (!contains) {
+                        iterator.remove();
+                    }
+                }
+            }
+        }
+        if (datePropIntersection != null) {
+            for (final DateTimeProp prop : datePropIntersection) {
+                final String value = prop.getName();
+                if (!StringUtils.contains(value, "createtime") && !StringUtils.contains(value, "modifytime") && !StringUtils.contains(value, "updatetime") && !"auditdate".equals(value) && !"exratedate".equals(value)) {
+                    if ("premduedate".equals(prop.getName())) {
+                        continue;
+                    }
+                    final IDataEntityType parent = prop.getParent();
+                    final String displayName = prop.getDisplayName().getLocaleValue();
+                    if (parent instanceof EntryType) {
+                        continue;
+                    }
+                    final ComboItem comboItem2 = new ComboItem(new LocaleString(ResManager.loadKDString("\u6309%s", "AcctageForm_10", "fi-arapcommon", new Object[] { displayName })), value);
+                    comboItems.add(comboItem2);
+                }
+            }
+
+        }
+        if ("ap_finapbill".equals(sourceEntity) || "ar_finarbill".equals(sourceEntity)) {
+            final ComboItem comboItem3 = new ComboItem(new LocaleString(ResManager.loadKDString("\u6309\u8ba1\u5212\u884c\u5230\u671f\u65e5", "AcctageForm_0", "fi-arapcommon", new Object[0])), "planduedate");
+            comboItems.add(comboItem3);
+            this.setStandard(comboItems);
+        }
+        combo=comboItems.subList(0,2);
+        this.setStandard(combo);
+    }
+
+    private Set<String> buildSourceEntityKeys(final String sourceEntity) {
+        final Set<String> allSourceEntityKeys = new HashSet<String>(4);
+        if (sourceEntity.contains("fin")) {
+            if (this.isAr()) {
+                allSourceEntityKeys.add("ar_finarbill");
+            }
+            else {
+                allSourceEntityKeys.add("ap_finapbill");
+            }
+        }
+        if (sourceEntity.contains("bus")) {
+            if (this.isAr()) {
+                allSourceEntityKeys.add("ar_busbill");
+            }
+            else {
+                allSourceEntityKeys.add("ap_busbill");
+            }
+        }
+        if ("finpaidbill".equals(sourceEntity) || "paidbill".equals(sourceEntity)) {
+            if (this.isAr()) {
+                allSourceEntityKeys.add("cas_recbill");
+                allSourceEntityKeys.add("ar_receivedbill");
+            }
+            else {
+                allSourceEntityKeys.add("cas_paybill");
+                allSourceEntityKeys.add("ap_paidbill");
+            }
+        }
+        if ("ALL".equals(sourceEntity)) {
+            if (this.isAr()) {
+                allSourceEntityKeys.add("cas_recbill");
+                allSourceEntityKeys.add("ar_receivedbill");
+                allSourceEntityKeys.add("ar_busbill");
+                allSourceEntityKeys.add("ar_finarbill");
+            }
+            else {
+                allSourceEntityKeys.add("cas_paybill");
+                allSourceEntityKeys.add("ap_paidbill");
+                allSourceEntityKeys.add("ap_busbill");
+                allSourceEntityKeys.add("ap_finapbill");
+            }
+        }
+        return allSourceEntityKeys;
+    }
+
+    private void setStandard(final List<ComboItem> comboItems) {
+        final ComboEdit comboEdit = (ComboEdit)this.getControl("standard");
+        comboEdit.setComboItems((List)comboItems);
+        this.getModel().setValue("standard", (Object)"duedate");
+    }
+
+    public void hyperLinkClick(final HyperLinkClickEvent evt) {
+        final String fieldName = evt.getFieldName();
+        if ("billno".equals(fieldName)) {
+            final ReportList list = (ReportList)this.getControl("reportlistap");
+            final DynamicObject rowData = list.getReportModel().getRowData(evt.getRowIndex());
+            final BillShowParameter parameter = new BillShowParameter();
+            parameter.setFormId(rowData.getString("entitykey"));
+            parameter.setPkId((Object)rowData.getLong("id"));
+            parameter.setStatus(OperationStatus.VIEW);
+            parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+            parameter.setHasRight(true);
+            this.getView().showForm((FormShowParameter)parameter);
+        }
+        else {
+            final ReportShowParameter parameter2 = new ReportShowParameter();
+            final FormShowParameter reportParameter = this.getView().getFormShowParameter();
+            parameter2.setFormId(reportParameter.getFormId());
+            parameter2.getOpenStyle().setTargetKey(reportParameter.getOpenStyle().getTargetKey());
+            parameter2.getOpenStyle().setShowType(reportParameter.getFormConfig().getShowType());
+            final ReportList reportList = (ReportList)evt.getSource();
+            final IReportListModel reportModel = reportList.getReportModel();
+            final DynamicObject rowData2 = reportModel.getRowData(evt.getRowIndex());
+            final Map<String, Object> customParams = this.getCustomParams(rowData2);
+            customParams.put("hyperLinkClickLineName", fieldName);
+            parameter2.setCustomParams((Map)customParams);
+            this.getView().showForm((FormShowParameter)parameter2);
+        }
+    }
+
+    private Map<String, Object> getCustomParams(final DynamicObject rowData) {
+        final Map<String, Object> customParams = new HashMap<String, Object>(2);
+        final Map<String, Object> dimensionData = new HashMap<String, Object>(4);
+        customParams.put("isopenbyhyperlink", Boolean.TRUE);
+        dimensionData.put("org", rowData.get("org"));
+        dimensionData.put("orgs", rowData.get("org"));
+        dimensionData.put("asstacttype", rowData.get("asstacttype"));
+        dimensionData.put("asstact", rowData.get("asstact"));
+        dimensionData.put("currency", rowData.get("currency"));
+        final List<String> sysDimensions = new ArrayList<String>(Arrays.asList("org", "asstacttype", "asstact", "currency"));
+        final String showKeyCols = (String)this.getModel().getValue("showkeycols");
+        final List<String> showKeyColList = Stream.of(showKeyCols.split(",")).filter(EmptyUtils::isNotEmpty).collect(Collectors.toList());
+        for (String s : showKeyColList) {
+            if (sysDimensions.contains(s)) {
+                continue;
+            }
+            Object value = rowData.get(s);
+            if (value instanceof DynamicObject) {
+                s += ".number";
+                value = ((DynamicObject)value).getString("number");
+            }
+            dimensionData.put(s, value);
+        }
+        customParams.put("rowData", dimensionData);
+        return customParams;
+    }
+
+
+}

+ 1 - 19
src/main/java/fi/ar/formplugin/AcctagerptPlugin.java

@@ -30,34 +30,16 @@ public class AcctagerptPlugin extends AbstractReportFormPlugin implements Plugin
         super.afterCreateNewData(e);
         // 获取自定义参数
         FormShowParameter formShowParameter = this.getView().getFormShowParameter();
-        Object text = formShowParameter.getCustomParam("parentid");
         Object flag = formShowParameter.getCustomParam("flag");
-        if (flag.equals("1")) {
+        if (("1").equals(flag)) {
             Object qAsstacttype = formShowParameter.getCustomParam("q_asstacttype");
             if (!("").equals(qAsstacttype)) {
                 this.getModel().setValue("q_asstacttype",qAsstacttype);
-                this.getModel().setValue("standard","bizdate");
-
             }
         }
     }
 
 
-
-    @Override
-    public void propertyChanged(PropertyChangedArgs e){
-        super.beforePropertyChanged(e);
-        String name=e.getProperty().getName();
-        if (name.equals("standard"))
-        {
-            ChangeData[] changeData = e.getChangeSet();
-            Object newValue = changeData[0].getNewValue();
-            Object oldValue = changeData[0].getOldValue();
-            String str= (String) this.getModel().getValue("standard");
-            System.out.println(str);
-        }
-    }
-
     @Override
     public void afterBindData(EventObject e) {
         super.afterBindData(e);

+ 4 - 2
src/main/java/fi/ar/formplugin/FinarbillFormPlugin.java

@@ -19,7 +19,7 @@ import java.util.EventObject;
 /**
  * @author cjz
  * @date 2024/10/11 14:50
- * @description:跳转到报表
+ * @description:应收挂账跳转到报表
  */
 public class FinarbillFormPlugin extends AbstractFormPlugin implements Plugin {
 
@@ -29,7 +29,7 @@ public class FinarbillFormPlugin extends AbstractFormPlugin implements Plugin {
     public void afterBindData(EventObject e) {
         super.afterBindData(e);
         Object flag = this.getView().getFormShowParameter().getCustomParam("flag");
-        Object asstacttype=this.getView().getFormShowParameter().getCustomParam("asstacttype").toString();
+        Object asstacttype=this.getView().getFormShowParameter().getCustomParam("asstacttype");
         //如果为预警跳转的页面则自动点击跳转按钮到报表
         if (("1").equals(flag)) {
             //获取当前单据
@@ -53,6 +53,8 @@ public class FinarbillFormPlugin extends AbstractFormPlugin implements Plugin {
         }
     }
 
+
+    //账龄分析表关闭后,同时关闭应收挂账单
     @Override
     public void closedCallBack(ClosedCallBackEvent e) {
         super.closedCallBack(e);

+ 12 - 1
src/main/java/fi/fa/opplugin/AssetMidBillOpPlugin.java

@@ -63,6 +63,7 @@ public class AssetMidBillOpPlugin extends AbstractListPlugin {
                     Long relationIdout = ChangeDataUtils.getRelation(orgIdout);
 
                     busProcess.set("nckd_costcompany", relationIdin);//资产组织
+                    busProcess.set("nckd_orgfield", relationIdout);//核算组织
                     busProcess.set("nckd_orgfield1", relationIdout);//调出组织
                     busProcess.set("nckd_orgfield2", relationIdin);//调入组织
                     busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//调拨原因
@@ -82,6 +83,10 @@ public class AssetMidBillOpPlugin extends AbstractListPlugin {
                     DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real", "id", new QFilter[]{filter});
                     for (int c = 0; c < card.length; c++) {
                         DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
+                        String model = cardInfo.getString("model");
+                        String nckd_storeplace = cardInfo.getString("nckd_storeplace");
+                        String headusedept = cardInfo.getDynamicObject("headusedept").getString("name");
+                        DynamicObject headuseperson = cardInfo.getDynamicObject("headuseperson");
                         DynamicObject fin = ChangeDataUtils.queryFinCard(cardInfo.getLong("id"));
                         BigDecimal originalval = BigDecimal.ZERO;
                         BigDecimal accumdepre = BigDecimal.ZERO;
@@ -97,10 +102,16 @@ public class AssetMidBillOpPlugin extends AbstractListPlugin {
                             nckd_amountfield23 = originalval.subtract(accumdepre);//预计清理净值(nckd_amountfield23 = nckd_amountfield19 - nckd_amountfield20)
                             nckd_amountfield24 = nckd_amountfield23.subtract(decval);//预计净残值(nckd_amountfield24 = nckd_amountfield19 - nckd_amountfield20 - nckd_amountfield21)
                         }
+
                         //创建资产调拨分录
                         DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity216");
                         DynamicObject entry1 = entryEntity.addNew();
-                        entry1.set("nckd_basedatafield5", cardInfo);//资产编码
+                        entry1.set("nckd_basedatafield5", cardInfo);//实物资产编号
+                        entry1.set("nckd_basedatafield23", fin);//资产编号
+                        entry1.set("nckd_textfield54", model);
+                        entry1.set("nckd_user", headuseperson);
+                        entry1.set("nckd_textfield53", nckd_storeplace);
+                        entry1.set("nckd_textfield52", headusedept);
                         entry1.set("nckd_amountfield19", originalval);//预计清理原值
                         entry1.set("nckd_amountfield20", accumdepre);//预计清理累计折旧
                         entry1.set("nckd_amountfield21", decval);//预计清理减值准备

+ 40 - 1
src/main/java/fi/fa/opplugin/BusProcessBillOpPlugin.java

@@ -49,10 +49,29 @@ public class BusProcessBillOpPlugin extends AbstractOperationServicePlugIn {
                             DynamicObject[] cardObjects = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
                             DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[0].getPkValue(), cardObjects[0].getDynamicObjectType().getName());
                             //回写e管家实物清单字段
-                            cardInfo.set("nckd_storeplace", nckd_textfield45);//是否报废
+                            cardInfo.set("nckd_storeplace", nckd_textfield45);
                             SaveServiceHelper.save(new DynamicObject[]{cardInfo});
                         }
                     }
+                } else if ("E".equals(info.getString("nckd_detailtype"))) {
+                    //资产变更明细
+                    for (DynamicObject nckd_entryentity216 : info.getDynamicObjectCollection("nckd_entryentity216")) {
+                        //变更后存放地点
+                        String nckd_textfield10 = nckd_entryentity216.getString("nckd_textfield10");
+                        DynamicObject nckd_basedatafield11 = nckd_entryentity216.getDynamicObject("nckd_basedatafield11");
+                        DynamicObject card = nckd_entryentity216.getDynamicObject("nckd_basedatafield23").getDynamicObject("realcard");
+                        Long id = card.getLong("id");
+                        //查询e管家实物卡片清单
+                        QFilter filter = new QFilter("id", QCP.equals,id);
+                        DynamicObject[] cardObjects = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
+                        DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[0].getPkValue(), cardObjects[0].getDynamicObjectType().getName());
+                        //回写e管家实物清单字段
+                        if(!StringUtils.isEmpty(nckd_textfield10)) {
+                            cardInfo.set("nckd_storeplace", nckd_textfield10);
+                        }
+                        cardInfo.set("headuseperson", nckd_basedatafield11);
+                        SaveServiceHelper.save(new DynamicObject[]{cardInfo});
+                    }
                 }
 
                 //获取租赁合同分录
@@ -111,6 +130,26 @@ public class BusProcessBillOpPlugin extends AbstractOperationServicePlugIn {
                             SaveServiceHelper.save(new DynamicObject[]{cardInfo});
                         }
                     }
+                }else if ("E".equals(info.getString("nckd_detailtype"))) {
+                    //资产变更明细
+                    for (DynamicObject nckd_entryentity216 : info.getDynamicObjectCollection("nckd_entryentity216")) {
+                        //变更后存放地点
+                        String nckd_textfield10 = nckd_entryentity216.getString("nckd_textfield10");
+                        String nckd_textfield53 = nckd_entryentity216.getString("nckd_textfield53");
+                        DynamicObject nckd_user = nckd_entryentity216.getDynamicObject("nckd_user");
+                        DynamicObject card = nckd_entryentity216.getDynamicObject("nckd_basedatafield23").getDynamicObject("realcard");
+                        Long id = card.getLong("id");
+                        //查询e管家实物卡片清单
+                        QFilter filter = new QFilter("id", QCP.equals,id);
+                        DynamicObject[] cardObjects = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
+                        DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[0].getPkValue(), cardObjects[0].getDynamicObjectType().getName());
+                        //回写e管家实物清单字段
+                        if(!StringUtils.isEmpty(nckd_textfield10)) {
+                            cardInfo.set("nckd_storeplace", nckd_textfield53);
+                        }
+                        cardInfo.set("headuseperson", nckd_user);
+                        SaveServiceHelper.save(new DynamicObject[]{cardInfo});
+                    }
                 }
 
                 //获取租赁合同分录

+ 22 - 26
src/main/java/fi/fa/opplugin/FaChangeMidOpPlugin.java

@@ -59,6 +59,7 @@ public class FaChangeMidOpPlugin extends AbstractListPlugin {
                     Long orgIdin = ChangeDataUtils.getOrg(info.getString("nckd_org_in"));
                     Long relationIdin = ChangeDataUtils.getRelation(orgIdin);
                     busProcess.set("nckd_costcompany", relationIdin);//资产组织
+                    busProcess.set("nckd_orgfield", relationIdin);//核算组织
                     busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//调拨原因
                     busProcess.set("billstatus", "A");//暂存
                     busProcess.set("nckd_detailtype", "N");//业务类型(E:资产调拨)
@@ -73,34 +74,29 @@ public class FaChangeMidOpPlugin extends AbstractListPlugin {
                     DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
                     for (int c = 0; c < card.length; c++) {
                         DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
-                        DynamicObject fin = ChangeDataUtils.queryFinCard(cardInfo.getLong("id"));
-                        BigDecimal originalval = BigDecimal.ZERO;
-                        BigDecimal accumdepre = BigDecimal.ZERO;
-                        BigDecimal decval = BigDecimal.ZERO;
-                        BigDecimal preresidualval = BigDecimal.ZERO;
-                        BigDecimal nckd_amountfield23 = BigDecimal.ZERO;
-                        BigDecimal nckd_amountfield24 = BigDecimal.ZERO;
-                        if (fin != null) {
-                            originalval = fin.getBigDecimal("originalval");//资产原值(nckd_amountfield19)
-                            accumdepre = fin.getBigDecimal("accumdepre");//累计折旧(nckd_amountfield20)
-                            decval = fin.getBigDecimal("decval");//减值准备(nckd_amountfield21)
-                            preresidualval = fin.getBigDecimal("preresidualval");//预计净残值(nckd_amountfield22)
-                            nckd_amountfield23 = originalval.subtract(accumdepre);//预计清理净值(nckd_amountfield23 = nckd_amountfield19 - nckd_amountfield20)
-                            nckd_amountfield24 = nckd_amountfield23.subtract(decval);//预计净残值(nckd_amountfield24 = nckd_amountfield19 - nckd_amountfield20 - nckd_amountfield21)
-                        }
+                        String assetname = cardInfo.getString("assetname");//资产名称
+                        DynamicObject headusedept = cardInfo.getDynamicObject("headusedept");//变更前部门
+                        DynamicObject headuseperson = cardInfo.getDynamicObject("headuseperson");//变更前使用人
+                        String nckd_storeplace = cardInfo.getString("nckd_storeplace");//变更前存放地点
+                        DynamicObject supplier = cardInfo.getDynamicObject("supplier");//供应商
+                        DynamicObject assetcat = cardInfo.getDynamicObject("assetcat");//资产类别
+
                         //创建资产调拨分录
-                        DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity216");
+                        DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity681");
                         DynamicObject entry1 = entryEntity.addNew();
-                        entry1.set("nckd_basedatafield5", cardInfo);//资产编码
-                        entry1.set("nckd_amountfield19", originalval);//预计清理原值
-                        entry1.set("nckd_amountfield20", accumdepre);//预计清理累计折旧
-                        entry1.set("nckd_amountfield21", decval);//预计清理减值准备
-                        entry1.set("nckd_amountfield22", preresidualval);//预计清理残值
-                        entry1.set("nckd_amountfield23", nckd_amountfield23);//预计清理净值
-                        entry1.set("nckd_amountfield24", nckd_amountfield24);//预计清理净额
-                        entry1.set("nckd_basedatafield11", ChangeDataUtils.getUser(info.getString("nckd_used_user")));//调入使用人
-                        entry1.set("nckd_textfield10", info.getString("nckd_storeplace"));//调入存放地点
-                        entry1.set("nckd_orgfield4", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
+                        entry1.set("nckd_basedatafield21", cardInfo);//资产编码
+                        entry1.set("nckd_textfield43", assetname);
+                        entry1.set("nckd_textfield44", assetname);
+                        entry1.set("nckd_userfield", headuseperson);//调入使用人
+                        entry1.set("nckd_userfield1", ChangeDataUtils.getUser(info.getString("nckd_used_user")));//调入使用人
+                        entry1.set("nckd_textfield42", nckd_storeplace);
+                        entry1.set("nckd_textfield45", info.getString("nckd_storeplace"));//调入存放地点
+                        entry1.set("nckd_orgfield7", headusedept);//变更后使用部门
+                        entry1.set("nckd_orgfield8", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//变更后使用部门
+                        entry1.set("nckd_basedatafield24", supplier);
+                        entry1.set("nckd_basedatafield25", supplier);
+                        entry1.set("nckd_basedatafield26", assetcat);
+                        entry1.set("nckd_basedatafield27", assetcat);
                     }
 
                     //执行保存-提交-审核

+ 28 - 6
src/main/java/fi/fa/opplugin/FaDisCardMidOpPlugin.java

@@ -19,6 +19,7 @@ import kd.bos.servicehelper.operation.OperationServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 
 import javax.xml.crypto.Data;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.EventObject;
 import java.util.List;
@@ -62,6 +63,7 @@ public class FaDisCardMidOpPlugin extends AbstractListPlugin {
                     Long orgIdin = ChangeDataUtils.getOrg(info.getString("nckd_org_in"));
                     Long relationIdin = ChangeDataUtils.getRelation(orgIdin);
                     busProcess.set("nckd_costcompany", relationIdin);//资产组织
+                    busProcess.set("nckd_orgfield", relationIdin);//核算组织
                     busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//摘要事由
                     busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//制单人
 
@@ -76,20 +78,40 @@ public class FaDisCardMidOpPlugin extends AbstractListPlugin {
                     DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
                     for (int c = 0; c < card.length; c++) {
                         DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
+                        String model = cardInfo.getString("model");
+                        String headusedept = cardInfo.getDynamicObject("headusedept").getString("name");
                         DynamicObject fin = ChangeDataUtils.queryFinCard(cardInfo.getLong("id"));
-                        assert fin != null;
-                        DynamicObject curperiod = fin.getDynamicObject("curperiod");
-                        Date enddate = curperiod.getDate("enddate");
+                        BigDecimal originalval = BigDecimal.ZERO;
+                        BigDecimal accumdepre = BigDecimal.ZERO;
+                        BigDecimal decval = BigDecimal.ZERO;
+                        BigDecimal preresidualval = BigDecimal.ZERO;
+                        BigDecimal nckd_amountfield23 = BigDecimal.ZERO;
+                        BigDecimal nckd_amountfield24 = BigDecimal.ZERO;
+                        if (fin != null) {
+                            originalval = fin.getBigDecimal("originalval");//资产原值(nckd_amountfield19)
+                            accumdepre = fin.getBigDecimal("accumdepre");//累计折旧(nckd_amountfield20)
+                            decval = fin.getBigDecimal("decval");//减值准备(nckd_amountfield21)
+                            preresidualval = fin.getBigDecimal("preresidualval");//预计净残值(nckd_amountfield22)
+                            nckd_amountfield23 = originalval.subtract(accumdepre);//预计清理净值(nckd_amountfield23 = nckd_amountfield19 - nckd_amountfield20)
+                            nckd_amountfield24 = nckd_amountfield23.subtract(decval);//预计净残值(nckd_amountfield24 = nckd_amountfield19 - nckd_amountfield20 - nckd_amountfield21)
+                        }
                         //创建报废明细分录
                         DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity6");
                         DynamicObject entry1 = entryEntity.addNew();
                         entry1.set("nckd_basedatafield", cardInfo);//资产编码
+                        entry1.set("nckd_basedatafield22", fin);//资产编码
+                        entry1.set("nckd_textfield50", model);//规格型号
+                        entry1.set("nckd_textfield51", headusedept);//使用部门
+                        entry1.set("nckd_amountfield", originalval);//预计清理原值
+                        entry1.set("nckd_amountfield1", accumdepre);//预计清理累计折旧
+                        entry1.set("nckd_amountfield2", decval);//预计清理减值准备
+                        entry1.set("nckd_amountfield3", preresidualval);//预计清理残值
+                        entry1.set("nckd_amountfield4", nckd_amountfield23);//预计清理净值
+                        entry1.set("nckd_amountfield5", nckd_amountfield24);//预计清理净额
+
                         String nckd_count = info.getString("nckd_count").isEmpty() ? "1" : info.getString("nckd_count");
                         Integer count = Integer.valueOf(nckd_count);
                         entry1.set("nckd_integerfield", count);//报废数量
-                        entry1.set("nckd_datefield4", enddate);
-
-
                     }
                     //执行保存-提交-审核
                     OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());

+ 3 - 1
src/main/java/fi/fa/opplugin/RealCardBillOpPlugin.java

@@ -68,7 +68,9 @@ public class RealCardBillOpPlugin extends AbstractOperationServicePlugIn {
                 DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
                 long bxId = info.getLong("nckd_bz_id");
                 String srcbillentityname = info.getString("srcbillentityname");
-                if (!"fa_assetsplitbill".equals(srcbillentityname)) {
+                DynamicObject originmethod = info.getDynamicObject("originmethod");
+                String name = originmethod.getString("name");
+                if (!"fa_assetsplitbill".equals(srcbillentityname) && !StringUtils.equals("调入", name)) {
                     //反审核,e管家实物卡片清单三个字段置为空
                     String number = info.getString("number");//资产编码
                     //查询e管家实物清单

+ 40 - 31
src/main/java/fi/fa/opplugin/utils/ChangeDataUtils.java

@@ -10,6 +10,7 @@ import org.apache.commons.lang3.ObjectUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -20,9 +21,9 @@ public class ChangeDataUtils {
      */
     public static DynamicObject queryFinCard(Long realCardId) {
         QFilter cardFilter = new QFilter("realcardmasterid", QCP.equals,realCardId);
-        DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cardFilter});
+        DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cardFilter}, "endperiod.id DESC");
         for (int c = 0; c < card.length; c++) {
-            DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
+            DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[0].getPkValue(), card[0].getDynamicObjectType().getName());
             return cardInfo;
         }
         return null;
@@ -134,8 +135,6 @@ public class ChangeDataUtils {
         String billno = info.getString("number");//源单编号
         String dispatchType = info.getString("nckd_dispatch_type");//调拨类型
         String nckd_card_real_code = info.getString("nckd_card_number");
-        String nckd_storeplace = info.getString("nckd_storeplace");
-        String user = info.getString("nckd_used_user");
         String[] asset = nckd_card_real_code.split(",");
         if (nckd_card_real_code.isEmpty()) {
             return "单据" + billno + "未绑定资产信息,生成调拨单失败";
@@ -154,57 +153,62 @@ public class ChangeDataUtils {
         if (isSame) {
             //经费系统实物卡片编码
             List<String> cardNumberList = new ArrayList<>();
+            //中间表绑定的需要更新的资产信息
+            List<String> uploadNumberList = new ArrayList<>();
             //经费系统实物卡片关联的e管家实物卡片编码
             List<String> eCardNumberList = new ArrayList<>();
-            //numberList 中有而 eCardNumberList 中没有的元素
-            List<String> missingInECard = new ArrayList<>();
             String e_orgId = Arrays.stream(asset).map(item -> item.split(":")[1]).collect(Collectors.toList()).get(0);
-            //查询e管家实物卡片清单
+            //根据中间表关联的资产信息查询e管家实物卡片清单
             QFilter filter = new QFilter("number", QCP.in,numberList);
             DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id,nckd_card_real_code",new QFilter[] {filter});
-            //查询e管家实物卡片关联的经费系统实物卡片
+            //中间表绑定的资产信息有未同步至经费系统的直接报错
+            if(dynamicObjects.length != numberList.size()) {
+                return "单据"+billno+"绑定的资产有未同步至星瀚的数据,生成调拨单失败";
+            }
             for (DynamicObject eCard : dynamicObjects) {
                 String cardNumber = eCard.getString("nckd_card_real_code");
-                cardNumberList.add(cardNumber);
-            }
-            //再查经费系统实物卡片关联的e管家实物卡片
-            QFilter filter1 = new QFilter("nckd_card_real_code", QCP.in,cardNumberList);
-            DynamicObject[] edynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter1});
-            //获取e管家实物卡片编码
-            for (DynamicObject eCard : edynamicObjects) {
                 String number = eCard.getString("number");
-                eCardNumberList.add(number);
+                if (cardNumber != null && cardNumber != "") {
+                    //获取e管家实物卡片关联的经费系统实物卡片
+                    cardNumberList.add(cardNumber);
+                }else {
+                    //获取需要更新的资产信息
+                    uploadNumberList.add(number);
+                    numberList.remove(number);
+                }
+            }
+            if (cardNumberList.size() > 0) {
+                //再查经费系统实物卡片关联的e管家实物卡片-已经生成实物卡片的e管家实物卡片清单
+                QFilter filter1 = new QFilter("nckd_card_real_code", QCP.in,cardNumberList);
+                DynamicObject[] edynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter1});
+                //获取e管家实物卡片编码
+                for (DynamicObject eCard : edynamicObjects) {
+                    String number = eCard.getString("number");
+                    eCardNumberList.add(number);
+                }
             }
+
             //对比中间表关联的e管家实物卡片和查询到的e管家实物卡片
             if (eCardNumberList.size() > numberList.size()) {
                 return "单据"+billno+"绑定的资产有未同步至星瀚的数据,生成调拨单失败";
             } else if (eCardNumberList.size() == numberList.size()) {
+                Collections.sort(numberList);
+                Collections.sort(eCardNumberList);
                 boolean areEqual = areListsEqual(numberList, eCardNumberList);
                 if (!areEqual) {
                     return "单据"+billno+"绑定的资产与经费系统实物卡片绑定的资产不一致,生成调拨单失败";
                 }
-            }else {
-                // 检查 eCardNumberList 是否有 numberList 没有的元素
-                for (String eCard : eCardNumberList) {
-                    if (!numberList.contains(eCard)) {
-                        return "单据"+billno+"绑定的资产与经费系统实物卡片绑定的资产不一致,生成调拨单失败";
-                    }
-                }
-
-                for (String number : numberList) {
-                    if (!eCardNumberList.contains(number)) {
-                        missingInECard.add(number);
-                    }
-                }
             }
-            //查询未匹配到的e管家实物卡片做更新
-            QFilter filter2 = new QFilter("number", QCP.in,missingInECard);
+            //更新e管家实物卡片清单
+            QFilter filter2 = new QFilter("number", QCP.in,uploadNumberList);
             DynamicObject[] missingObject = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter2});
             Long deptId = getOrg(info.getString("nckd_dept_in"));
             Long orgId = getRelation(deptId);
             for (DynamicObject object : missingObject) {
                 DynamicObject eCardInfo = BusinessDataServiceHelper.loadSingle(object.getPkValue(), object.getDynamicObjectType().getName());
                 if ("0".equals(dispatchType)) {
+                    String nckd_storeplace = info.getString("nckd_storeplace");
+                    String user = info.getString("nckd_used_user");
                     //调出单更新组织部门人员存放地点
                     eCardInfo.set("nckd_orgfield", orgId);
                     eCardInfo.set("nckd_dept", deptId);
@@ -212,6 +216,8 @@ public class ChangeDataUtils {
                     eCardInfo.set("nckd_use_name", user);
 
                 } else if ("1".equals(dispatchType)) {
+                    String nckd_storeplace = info.getString("nckd_storeplace");
+                    String user = info.getString("nckd_used_user");
                     //变更单更新部门人员存放地点
                     eCardInfo.set("nckd_dept", deptId);
                     eCardInfo.set("nckd_local", nckd_storeplace);
@@ -221,6 +227,9 @@ public class ChangeDataUtils {
                     eCardInfo.set("nckd_discard", 1);
                 }
                 SaveServiceHelper.save(new DynamicObject[]{eCardInfo});
+                if (eCardNumberList.size() == 0 && uploadNumberList.size() > 0) {
+                    return "单据"+billno+"绑定的资产信息未生成经费系统实物卡片,已更新e管家实物卡片清单,下推失败";
+                }
             }
         }else {
             //资产信息组织不同

+ 20 - 1
src/main/java/sys/sc/formplugin/TestPlugin.java

@@ -43,6 +43,7 @@ import java.util.EventObject;
 import java.util.List;
 import java.util.Date;
 import java.util.*;
+import java.util.Random;
 
 public class TestPlugin  extends AbstractListPlugin {
 
@@ -365,7 +366,8 @@ public class TestPlugin  extends AbstractListPlugin {
                     DynamicObjectType userType = EntityMetadataCache.getDataEntityType("bos_user");
                     DynamicObject userinfo = new DynamicObject(userType);
                     ORM impl = ORM.create();
-                    userinfo.set("id", impl.genLongId("bos_user"));
+                    Long userid= impl.genLongId("bos_user");
+                    userinfo.set("id",userid);
                     userinfo.set("number", gonghao);
                     // 设置其他字段
                     userinfo.set("gender", personData.get("nckd_gender"));
@@ -429,6 +431,19 @@ public class TestPlugin  extends AbstractListPlugin {
                     // 保存新用户信息
                     SaveServiceHelper.save(new DynamicObject[]{userinfo});
                     msg+="工号为 " + gonghao + " 的用户已创建!";
+
+
+                    DBRoute dbRoute=new DBRoute("sys");
+                    //生成id
+                    long timestamp = System.currentTimeMillis();
+                    Random random = new Random();
+                    int randomNumber = random.nextInt(900000)+100000;
+                    int checksum = (int)((timestamp + randomNumber) %10);
+                    String fpkid = String.format("%d%d%d",timestamp,randomNumber,checksum);
+                    //获取人员的id
+                    String sql ="insert into t_sec_usertypes(fpkid,fid,fbasedataid) values(?,?,?)";
+                    //刷新新增人员的类型
+                    DB.update(dbRoute,sql,new Object[]{Long.valueOf(fpkid.substring(1)), userid,Long.valueOf("1")});
                 }
             }
             if("".equals(msg)){
@@ -798,6 +813,10 @@ public class TestPlugin  extends AbstractListPlugin {
         //
         if("testaaa".equals(e.getOperateKey()))
         {
+            QFilter filter=new QFilter("number",QCP.equals,"12");
+            DynamicObject dynamicObject=BusinessDataServiceHelper
+                    .loadSingle("bos_user",new QFilter[]{filter});
+
 
 
         }

+ 17 - 9
src/main/java/sys/sc/task/UpdateDataDailyTask.java

@@ -6,6 +6,8 @@ import kd.bos.context.RequestContext;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
 import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.exception.KDException;
@@ -408,7 +410,8 @@ public class UpdateDataDailyTask extends AbstractTask {
                 DynamicObjectType userType = EntityMetadataCache.getDataEntityType("bos_user");
                 DynamicObject userinfo = new DynamicObject(userType);
                 ORM impl = ORM.create();
-                userinfo.set("id", impl.genLongId("bos_user"));
+                Long userid= impl.genLongId("bos_user");
+                userinfo.set("id",userid);
                 userinfo.set("number", gonghao);
                 // 设置其他字段
                 userinfo.set("gender", personData.get("nckd_gender"));
@@ -469,22 +472,27 @@ public class UpdateDataDailyTask extends AbstractTask {
                         log.info("部门编码为 " + deptCode + " 的部门缺少组织结构信息,跳过该记录。");
                     }
                 }
-                String postName = personData.getString("nckd_posidname");;
+                String postName = personData.getString("nckd_posidname");
+                //职位
                 if (("").equals(postName)) {
                     bumeninfo.set("position", "无");
                 }else {
                     bumeninfo.set("position", postName);
                 }
-                //所在岗位名称
-                String positionnumber = personData.getString("nckd_posidname");
-                if (("").equals(positionnumber)) {
-                    bumeninfo.set("post", "无");
-                }else {
-                    bumeninfo.set("post", positionnumber);
-                }
                 // 保存新用户信息
                 SaveServiceHelper.save(new DynamicObject[]{userinfo});
                 msg+="工号为 " + gonghao + " 的用户已创建!";
+                DBRoute dbRoute=new DBRoute("sys");
+                //生成唯一19位id
+                long timestamp = System.currentTimeMillis();
+                Random random = new Random();
+                int randomNumber = random.nextInt(900000)+100000;
+                int checksum = (int)((timestamp + randomNumber) %10);
+                String fpkid = String.format("%d%d%d",timestamp,randomNumber,checksum);
+                //获取人员的id
+                String sql ="insert into t_sec_usertypes(fpkid,fid,fbasedataid) values(?,?,?)";
+                //刷新新增人员的类型
+                DB.update(dbRoute,sql,new Object[]{Long.valueOf(fpkid.substring(1)), userid,Long.valueOf("1")});
             }
         }
         if("".equals(msg)){