Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

zhouger 7 mesiacov pred
rodič
commit
7ad2ef15fe

+ 100 - 80
src/main/java/fi/fa/opplugin/AssetMidBillOpPlugin.java

@@ -5,102 +5,122 @@ import fi.fa.opplugin.utils.ChangeDataUtils;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.entity.operate.result.OperationResult;
-import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
-import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
-import kd.bos.exception.KDBizException;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 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 java.math.BigDecimal;
+import java.util.EventObject;
 import java.util.List;
 import java.util.List;
 
 
 //资产调出单中间表下推资产调出单
 //资产调出单中间表下推资产调出单
-public class AssetMidBillOpPlugin extends AbstractOperationServicePlugIn {
+public class AssetMidBillOpPlugin extends AbstractListPlugin {
+
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addItemClickListeners(new String[]{"toolbarap"});
+    }
+
     @Override
     @Override
-    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
-        super.beginOperationTransaction(e);
-        DynamicObject[] dynamicObjects = e.getDataEntities();
-        for (int i = 0; i < dynamicObjects.length; i++) {
-            if (StringUtils.equals(e.getOperationKey(), "push")) {
-                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
-                String nckd_flag = info.getString("nckd_flag");
-                if ("1".equals(nckd_flag)) {
-                    throw new KDBizException("单据" + info.getString("number") + "已经下推生成了资产调拨单,不允许重复下推!");
-                }else {
-                    String dispatchType = info.getString("nckd_dispatch_type");
+    public void itemClick(ItemClickEvent evt) {
+        String itemKey = evt.getItemKey();
+        if ("nckd_push".equals(itemKey)) {
+            StringBuilder errMsg = new StringBuilder();
+            BillList billList = (BillList) this.getControl("billlistap");
+            ListSelectedRowCollection list = billList.getSelectedRows();
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            if (primaryKeyValues.length > 0) {
+                for (Object pk : primaryKeyValues) {
+                    DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_e_dispatch_mid");
+                    String nckd_flag = info.getString("nckd_flag");
                     String direction = info.getString("nckd_direction");
                     String direction = info.getString("nckd_direction");
+                    if ("1".equals(nckd_flag)) {
+                        errMsg.append("单据号: ").append(info.getString("number")).append("已经下推生成了业务处理单,不允许重复下推!");
+                        errMsg.append("\r\n");
+                        continue;
+                    }
                     String error = ChangeDataUtils.check(info);
                     String error = ChangeDataUtils.check(info);
                     if (!StringUtils.isEmpty(error)) {
                     if (!StringUtils.isEmpty(error)) {
-                        this.operationResult.setShowMessage(true);
-                        this.operationResult.setSuccess(false);
-                        this.operationResult.setMessage(error);
-                    }else {
-                        List<String> codeList = ChangeDataUtils.getCardNumber(info);
-                        if ("0".equals(dispatchType)) {
-                            QFilter filter = new QFilter("number", QCP.in,codeList);
-                            filter.and("isbak",  QCP.equals, "0");
-                            DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
-                            DynamicObject dispatch = BusinessDataServiceHelper.newDynamicObject("fa_dispatch");
-                            //单据头
-                            dispatch.set("dispatchdate", info.getDate("nckd_date_out"));//调出日期
-                            dispatch.set("assetunit", ChangeDataUtils.getOrg(info.getString("nckd_org_out")));//调出组织
-                            dispatch.set("inassetunit", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//调入组织
-                            dispatch.set("org", ChangeDataUtils.getOrg(info.getString("nckd_org_out")));//调出核算组织
-                            dispatch.set("inorg", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//调入核算组织
-                            dispatch.set("reason", info.getString("nckd_reason"));//调出原因
-                            dispatch.set("dispatchtype", "A");//调拨类型 A="平价调拨",B="非平价调拨"
-                            dispatch.set("changemode", 14);//减少方式默认"调出"
-                            dispatch.set("currency", 1);//币种
-                            dispatch.set("currencyrate", 1);//结算汇率
-                            //制单信息
-                            dispatch.set("billstatus", "A");//暂存
-                            //调出方向
-                            if("0".equals(direction)){
-                                dispatch.set("outuser", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调出申请人
-                                dispatch.set("inuser", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调入负责人
-                                dispatch.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
-                                dispatch.set("modifier", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//修改人
-                                dispatch.set("auditor", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//审核人
-                                dispatch.set("appliant", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调拨申请人
-                            }//调入方向
-                            else if ("1".equals(direction)) {
-                                dispatch.set("outuser", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调出申请人
-                                dispatch.set("inuser", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调入负责人
-                                dispatch.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//创建人
-                                dispatch.set("modifier", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//修改人
-                                dispatch.set("auditor", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//审核人
-                                dispatch.set("appliant", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调拨申请人
-                            }
-                            for (int c = 0; c < card.length; c++) {
-                                DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
-                                //创建调出单分录
-                                DynamicObjectCollection entryEntity = dispatch.getDynamicObjectCollection("dispatchentry");
-                                DynamicObject entry1 = entryEntity.addNew();
-                                entry1.set("realcard", cardInfo);//资产编码
-                                entry1.set("measurement", cardInfo.getDynamicObject("unit").getLong("id"));//计量单位
-                                entry1.set("dispatchqty", cardInfo.getInt("assetamount"));//数量
-                                entry1.set("inusedept", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
-                            }
-                            //执行保存-提交-审核
-                            OperationResult saveResult = SaveServiceHelper.saveOperate("fa_dispatch", new DynamicObject[]{dispatch}, OperateOption.create());
-                            if (saveResult.isSuccess()){
-                                info.set("nckd_flag", "1");
-                                SaveServiceHelper.save(new DynamicObject[]{info});
-                                this.operationResult.setSuccess(true);
-                                this.operationResult.setMessage("下推资产调出单成功");
-                                this.operationResult.setShowMessage(true);
-                                OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "fa_dispatch",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
-                                OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "fa_dispatch",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
-                            }else {
-                                this.operationResult.setShowMessage(true);
-                                this.operationResult.setSuccess(false);
-                                this.operationResult.setMessage("下推资产调出单单失败");
-                            }
+                        errMsg.append(error);
+                        errMsg.append("\r\n");
+                        continue;
+                    }
+                    DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
+                    busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
+                    busProcess.set("nckd_orgfield1", ChangeDataUtils.getOrg(info.getString("nckd_org_out")));//调出组织
+                    busProcess.set("nckd_orgfield2", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//调入组织
+                    busProcess.set("nckd_orgfield3", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
+                    busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//调拨原因
+                    busProcess.set("billstatus", "A");//暂存
+                    busProcess.set("nckd_detailtype", "E");//业务类型(E:资产调拨)
+                    busProcess.set("nckd_combofield2", "1");//调拨类型(1:跨组织)
+                    //调出方向
+                    if ("0".equals(direction)) {
+                        busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调出申请人
+                        busProcess.set("nckd_basedatafield4", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调入负责人
+                        busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
+                    }//调入方向
+                    else if ("1".equals(direction)) {
+                        busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调出申请人
+                        busProcess.set("nckd_basedatafield4", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调入负责人
+                        busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//创建人
+                    }
+
+                    List<String> codeList = ChangeDataUtils.getCardNumber(info);
+                    QFilter filter = new QFilter("number", QCP.in, codeList);
+                    filter.and("isbak", QCP.equals, "0");
+                    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)
                         }
                         }
+                        //创建资产调拨分录
+                        DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity216");
+                        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);//预计清理净额
+                    }
+
+                    //执行保存-提交-审核
+                    OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
+                    if (saveResult.isSuccess()){
+                        info.set("nckd_flag", "1");
+                        SaveServiceHelper.save(new DynamicObject[]{info});
+                        errMsg.append("单据号: ").append(info.getString("number")).append("下推生成业务处理单成功!");
+                        errMsg.append("\r\n");
+                        OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "nckd_ywcld",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
+                        OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "nckd_ywcld",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
+                    }else {
+                        errMsg.append(saveResult.getMessage());
+                        errMsg.append("\r\n");
                     }
                     }
                 }
                 }
+            } else {
+                this.getView().showMessage("请至少选择一条数据");
             }
             }
         }
         }
     }
     }

+ 96 - 115
src/main/java/fi/fa/opplugin/FaChangeMidOpPlugin.java

@@ -5,138 +5,119 @@ import fi.fa.opplugin.utils.ChangeDataUtils;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.entity.operate.result.OperationResult;
-import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
-import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
-import kd.bos.exception.KDBizException;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 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 java.math.BigDecimal;
+import java.util.EventObject;
 import java.util.List;
 import java.util.List;
 
 
 //资产变更单中间表下推资产变更单
 //资产变更单中间表下推资产变更单
-public class FaChangeMidOpPlugin extends AbstractOperationServicePlugIn {
+public class FaChangeMidOpPlugin extends AbstractListPlugin {
+
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addItemClickListeners(new String[]{"toolbarap"});
+    }
+
     @Override
     @Override
-    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
-        super.beginOperationTransaction(e);
-        DynamicObject[] dynamicObjects = e.getDataEntities();
-        for (int i = 0; i < dynamicObjects.length; i++) {
-            if (StringUtils.equals(e.getOperationKey(), "push")) {
-                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
-                String nckd_flag = info.getString("nckd_flag");
-                if ("1".equals(nckd_flag)) {
-                    throw new KDBizException("单据" + info.getString("number") + "已经下推生成了资产调拨单,不允许重复下推!");
-                }else {
-                    String dispatchType = info.getString("nckd_dispatch_type");
+    public void itemClick(ItemClickEvent evt) {
+        String itemKey = evt.getItemKey();
+        if ("nckd_push".equals(itemKey)) {
+            StringBuilder errMsg = new StringBuilder();
+            BillList billList = (BillList)this.getControl("billlistap");
+            ListSelectedRowCollection list =  billList.getSelectedRows();
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            if (primaryKeyValues.length > 0) {
+                for (Object pk : primaryKeyValues) {
+                    DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_e_change_mid");
+                    String nckd_flag = info.getString("nckd_flag");
                     String direction = info.getString("nckd_direction");
                     String direction = info.getString("nckd_direction");
+                    if ("1".equals(nckd_flag)) {
+                        errMsg.append("单据号: ").append(info.getString("number")).append("已经下推生成了业务处理单,不允许重复下推!");
+                        errMsg.append("\r\n");
+                        continue;
+                    }
                     String error = ChangeDataUtils.check(info);
                     String error = ChangeDataUtils.check(info);
                     if (!StringUtils.isEmpty(error)) {
                     if (!StringUtils.isEmpty(error)) {
-                        this.operationResult.setShowMessage(true);
-                        this.operationResult.setSuccess(false);
-                        this.operationResult.setMessage(error);
-                    }else {
-
-                        if ("1".equals(dispatchType)) {
-                            DynamicObject changeDept = BusinessDataServiceHelper.newDynamicObject("fa_change_dept");
-                            //单据头
-                            DynamicObject orgInfo = ChangeDataUtils.queryOrg(ChangeDataUtils.getOrg(info.getString("nckd_org_in")));
-                            changeDept.set("org", orgInfo);//核算组织
-                            changeDept.set("changedate", info.getDate("nckd_date_out"));//记账日期
-                            changeDept.set("appliantid", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//变更申请人
-                            changeDept.set("remark", info.getString("nckd_reason"));//调出原因
-                            changeDept.set("sourcetype", 2);//来源方式(5:API生成)
-                            changeDept.set("changetype", ChangeDataUtils.queryChangeType(Long.parseLong("733953285719123968")));//变更类型,默认部门变更
-                            changeDept.set("chtypedetail", "1");//变更类型明细默认实物变更1
-                            changeDept.set("voucherflag", "A");//记账标识默认无需记账A
-                            changeDept.set("billstatus", "A");//暂存
-                            //调出方向
-                            if("0".equals(direction)){
-                                changeDept.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
-                                changeDept.set("appliantid", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调拨申请人
-                            }//调入方向
-                            else if ("1".equals(direction)) {
-                                changeDept.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//创建人
-                                changeDept.set("appliantid", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调拨申请人
-                            }
-                            List<String> codeList =ChangeDataUtils.getCardNumber(info);
-                            QFilter filter = new QFilter("number", QCP.in,codeList);
-                            filter.and("isbak",  QCP.equals, "0");
-                            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"));//财务卡片id
-                                //创建变更字段分录
-                                DynamicObjectCollection fieldentry = changeDept.getDynamicObjectCollection("fieldentry");
-
-                                String deptAftervalue = ChangeDataUtils.getOrg(info.getString("nckd_dept_in")) == null ? null : ChangeDataUtils.getOrg(info.getString("nckd_dept_in")).toString();
-                                String deptBeforevalue =  cardInfo.getDynamicObject("headusedept") == null ? null : String.valueOf(cardInfo.getDynamicObject("headusedept").getLong("id"));
-                                if (!StringUtils.equals(deptBeforevalue, deptAftervalue)) {
-                                    DynamicObject entry1 = fieldentry.addNew();
-                                    entry1.set("realcard1", cardInfo);//资产编码
-                                    entry1.set("depreuse1", ChangeDataUtils.queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认
-                                    entry1.set("currency1", 1);//币别
-                                    entry1.set("basecurrency1", 1);//本币位
-                                    entry1.set("assetnumber",cardInfo.getString("number"));//资产编码
-                                    entry1.set("bizdate1", info.getDate("nckd_date_out"));//业务日期
-                                    entry1.set("field", "fa_card_real.headusedept");//变更字段-部门
-                                    entry1.set("beforevalue", deptBeforevalue);//变更前值
-                                    entry1.set("aftervalue", deptAftervalue);//变更后值
-                                    entry1.set("realcardmasterid", cardInfo);//实物卡片id
-                                    entry1.set("fincard1", fin);//财务卡片
-                                }
-
-                                String userAftervalue = info.getString("nckd_used_user") == null ? null : String.valueOf(ChangeDataUtils.getUser(info.getString("nckd_used_user")).getLong("id"));
-                                String userBeforevalue  = cardInfo.getDynamicObject("headuseperson") == null ? null : String.valueOf(ChangeDataUtils.getUser(info.getString("nckd_used_user")).getLong("id"));
-                                if (!StringUtils.equals(userBeforevalue, userAftervalue)) {
-                                    DynamicObject entry2 = fieldentry.addNew();
-                                    entry2.set("realcard1", cardInfo);//资产编码
-                                    entry2.set("depreuse1", ChangeDataUtils.queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认
-                                    entry2.set("currency1", 1);//币别
-                                    entry2.set("basecurrency1", 1);//本币位
-                                    entry2.set("assetnumber",cardInfo.getString("number"));//资产编码
-                                    entry2.set("bizdate1", info.getDate("nckd_date_out"));//业务日期
-                                    entry2.set("field", "fa_card_real.headuseperson");//变更字段-使用人
-                                    entry2.set("beforevalue", userBeforevalue);//变更前值
-                                    entry2.set("aftervalue", userAftervalue);//变更后值
-                                    entry2.set("realcardmasterid", cardInfo);//实物卡片id
-                                    entry2.set("fincard1", fin);//财务卡片
-                                }
-
-
-                                //创建实物变更分录
-                                DynamicObjectCollection realentry = changeDept.getDynamicObjectCollection("realentry");
-                                DynamicObject realentry1 = realentry.addNew();
-                                realentry1.set("realcard", cardInfo.getLong("id"));//资产编码
-
-                                //创建财务变更分录
-                                DynamicObjectCollection finentry = realentry1.getDynamicObjectCollection("finentry");
-                                DynamicObject finentry1 = finentry.addNew();
-                                finentry1.set("depreuse", ChangeDataUtils.queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认
-                                finentry1.set("fincard", fin);
-                                finentry1.set("bizdate", info.getDate("nckd_date_out"));
+                        errMsg.append(error);
+                        errMsg.append("\r\n");
+                        continue;
+                    }
+                    DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
+                    busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
+                    busProcess.set("nckd_orgfield3", ChangeDataUtils.getOrg(info.getString("nckd_dept_in")));//调入使用部门
+                    busProcess.set("nckd_userfield", ChangeDataUtils.getUser(info.getString("nckd_used_user")));//调入使用人
+                    busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//调拨原因
+                    busProcess.set("billstatus", "A");//暂存
+                    busProcess.set("nckd_detailtype", "E");//业务类型(E:资产调拨)
+                    busProcess.set("nckd_combofield2", "2");//调拨类型(2:组织内)
+                    //调出方向
+                    if("0".equals(direction)){
+                        busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
+                        busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//调拨申请人
+                    }//调入方向
+                    else if ("1".equals(direction)) {
+                        busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//创建人
+                        busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_in")));//调拨申请人
+                    }
 
 
-                            }
-                            //执行保存-提交-审核
-                            OperationResult saveResult = SaveServiceHelper.saveOperate("fa_change_dept", new DynamicObject[]{changeDept}, OperateOption.create());
-                            if (saveResult.isSuccess()) {
-                                info.set("nckd_flag", "1");
-                                SaveServiceHelper.save(new DynamicObject[]{info});
-                                this.operationResult.setShowMessage(true);
-                                this.operationResult.setSuccess(true);
-                                this.operationResult.setMessage("下推资产变更单成功");
-                                OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "fa_change_dept",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
-                                OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "fa_change_dept",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
-                            }else {
-                                this.operationResult.setShowMessage(true);
-                                this.operationResult.setSuccess(false);
-                                this.operationResult.setMessage("下推资产变更单失败");
-                            }
+                    List<String> codeList =ChangeDataUtils.getCardNumber(info);
+                    QFilter filter = new QFilter("number", QCP.in,codeList);
+                    filter.and("isbak",  QCP.equals, "0");
+                    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)
                         }
                         }
+                        //创建资产调拨分录
+                        DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity216");
+                        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);//预计清理净额
+                    }
+
+                    //执行保存-提交-审核
+                    OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
+                    if (saveResult.isSuccess()){
+                        info.set("nckd_flag", "1");
+                        SaveServiceHelper.save(new DynamicObject[]{info});
+                        errMsg.append("单据号: ").append(info.getString("number")).append("下推生成业务处理单成功!");
+                        errMsg.append("\r\n");
+                        OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "nckd_ywcld",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
+                        OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "nckd_ywcld",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
+                    }else {
+                        errMsg.append(saveResult.getMessage());
+                        errMsg.append("\r\n");
                     }
                     }
                 }
                 }
+            }else {
+                this.getView().showMessage("请至少选择一条数据");
             }
             }
         }
         }
     }
     }

+ 72 - 60
src/main/java/fi/fa/opplugin/FaDisCardMidOpPlugin.java

@@ -5,82 +5,94 @@ import fi.fa.opplugin.utils.ChangeDataUtils;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.entity.operate.result.OperationResult;
-import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
-import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
-import kd.bos.exception.KDBizException;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 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 java.util.EventObject;
 import java.util.List;
 import java.util.List;
 
 
 //资产报废单中间表下推业务处理单
 //资产报废单中间表下推业务处理单
-public class FaDisCardMidOpPlugin extends AbstractOperationServicePlugIn {
+public class FaDisCardMidOpPlugin extends AbstractListPlugin {
+
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addItemClickListeners(new String[]{"toolbarap"});
+    }
+
     @Override
     @Override
-    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
-        super.beginOperationTransaction(e);
-        DynamicObject[] dynamicObjects = e.getDataEntities();
-        for (int i = 0; i < dynamicObjects.length; i++) {
-            if (StringUtils.equals(e.getOperationKey(), "push")) {
-                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
-                String nckd_flag = info.getString("nckd_flag");
-                if ("1".equals(nckd_flag)) {
-                    throw new KDBizException("单据" + info.getString("number") + "已经下推生成了资产调拨单,不允许重复下推!");
-                }else {
-                    String dispatchType = info.getString("nckd_dispatch_type");
+    public void itemClick(ItemClickEvent evt) {
+        String itemKey = evt.getItemKey();
+        if ("nckd_push".equals(itemKey)) {
+            StringBuilder errMsg = new StringBuilder();
+            BillList billList = (BillList)this.getControl("billlistap");
+            ListSelectedRowCollection list =  billList.getSelectedRows();
+            Object[] primaryKeyValues = list.getPrimaryKeyValues();
+            if (primaryKeyValues.length > 0) {
+                for (Object pk : primaryKeyValues) {
+                    DynamicObject info = BusinessDataServiceHelper.loadSingle(pk, "nckd_e_discard_mid");
+                    String nckd_flag = info.getString("nckd_flag");
+                    if ("1".equals(nckd_flag)) {
+                        errMsg.append("单据号: ").append(info.getString("number")).append("已经下推生成了业务处理单,不允许重复下推!");
+                        errMsg.append("\r\n");
+                        continue;
+                    }
                     String error = ChangeDataUtils.check(info);
                     String error = ChangeDataUtils.check(info);
                     if (!StringUtils.isEmpty(error)) {
                     if (!StringUtils.isEmpty(error)) {
-                        this.operationResult.setShowMessage(true);
-                        this.operationResult.setSuccess(false);
-                        this.operationResult.setMessage(error);
-                    }else {
-                        List<String> codeList = ChangeDataUtils.getCardNumber(info);
-                        if ("2".equals(dispatchType)) {
-                            DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
-                            busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
-                            busProcess.set("nckd_detailtype", "D");//业务类型 D:报废
-                            busProcess.set("nckd_costcompany", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//资产组织
-                            busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//摘要事由
-                            busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//制单人
+                        errMsg.append(error);
+                        errMsg.append("\r\n");
+                        continue;
+                    }
+
+                    List<String> codeList = ChangeDataUtils.getCardNumber(info);
+                    DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
+                    busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
+                    busProcess.set("nckd_detailtype", "D");//业务类型 D:报废
+                    busProcess.set("nckd_costcompany", ChangeDataUtils.getOrg(info.getString("nckd_org_in")));//资产组织
+                    busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//摘要事由
+                    busProcess.set("nckd_applierv", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//制单人
 
 
-                            //制单信息
-                            busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
-                            busProcess.set("createtime", info.getDate("nckd_date_out"));//创建时间
-                            busProcess.set("billstatus", "A");//状态
-                            QFilter filter = new QFilter("number", QCP.in,codeList);
-                            filter.and("isbak",  QCP.equals, "0");
-                            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());
-                                //创建报废明细分录
-                                DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity6");
-                                DynamicObject entry1 = entryEntity.addNew();
-                                entry1.set("nckd_basedatafield", cardInfo);//资产编码
-                                String nckd_count = info.getString("nckd_count").isEmpty() ? "1" : info.getString("nckd_count");
-                                Integer count = Integer.valueOf(nckd_count);
-                                entry1.set("nckd_integerfield", count);//报废数量
-                            }
-                            //执行保存-提交-审核
-                            OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
-                            if (saveResult.isSuccess()){
-                                info.set("nckd_flag", "1");
-                                SaveServiceHelper.save(new DynamicObject[]{info});
-                                this.operationResult.setShowMessage(true);
-                                this.operationResult.setSuccess(true);
-                                this.operationResult.setMessage("下推业务处理单成功");
-                                OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "nckd_ywcld",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
-                                OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "nckd_ywcld",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
-                            }else {
-                                this.operationResult.setShowMessage(true);
-                                this.operationResult.setSuccess(false);
-                                this.operationResult.setMessage("下推业务处理单失败");
-                            }
-                        }
+                    //制单信息
+                    busProcess.set("creator", ChangeDataUtils.getUser(info.getString("nckd_user_out")));//创建人
+                    busProcess.set("createtime", info.getDate("nckd_date_out"));//创建时间
+                    busProcess.set("billstatus", "A");//状态
+                    QFilter filter = new QFilter("number", QCP.in,codeList);
+                    filter.and("isbak",  QCP.equals, "0");
+                    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());
+                        //创建报废明细分录
+                        DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity6");
+                        DynamicObject entry1 = entryEntity.addNew();
+                        entry1.set("nckd_basedatafield", cardInfo);//资产编码
+                        String nckd_count = info.getString("nckd_count").isEmpty() ? "1" : info.getString("nckd_count");
+                        Integer count = Integer.valueOf(nckd_count);
+                        entry1.set("nckd_integerfield", count);//报废数量
+                    }
+                    //执行保存-提交-审核
+                    OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
+                    if (saveResult.isSuccess()){
+                        info.set("nckd_flag", "1");
+                        SaveServiceHelper.save(new DynamicObject[]{info});
+                        errMsg.append("单据号: ").append(info.getString("number")).append("下推生成业务处理单成功!");
+                        errMsg.append("\r\n");
+                        OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "nckd_ywcld",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
+                        OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "nckd_ywcld",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
+                    }else {
+                        errMsg.append(saveResult.getMessage());
+                        errMsg.append("\r\n");
                     }
                     }
                 }
                 }
+            }else {
+                this.getView().showMessage("请至少选择一条数据");
             }
             }
+            this.getView().showMessage(errMsg.toString());
         }
         }
     }
     }
 }
 }