Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

徐昊 před 8 měsíci
rodič
revize
fbd51912c7

+ 69 - 2
src/main/java/fi/er/opplugin/FinapbillBeforeF7SelectSample.java

@@ -1,8 +1,10 @@
 package fi.er.opplugin;
 
 import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.serialization.SerializationUtils;
 import kd.bos.entity.datamodel.events.ChangeData;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.field.RefBillEdit;
@@ -15,8 +17,10 @@ import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.EventObject;
+import java.util.List;
 
 public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements BeforeF7SelectListener {
     private static String nckd_apfinapbill = "nckd_apfinapbill"; //应付挂账单字段
@@ -68,10 +72,73 @@ public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements
         if (StringUtils.equals("nckd_real_card", fieldKey)){
             ChangeData changeData = e.getChangeSet()[0];
             DynamicObjectCollection dynamicObjectCollection = (DynamicObjectCollection) changeData.getNewValue();
+            List<Long> ids = new ArrayList<>();
+            Integer index = 0;
             for(DynamicObject  object : dynamicObjectCollection) {
-                DynamicObject realcard = object.getDynamicObject("nckd_real_card");
+                Long id = (Long) object.get(2);
+                ids.add(id);
+                this.getModel().setValue("nckd_card_list_str","1");
+            }
+           //查询实物卡片清单
+            QFilter filter = new QFilter("id", QCP.in,ids);
+            DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
+            if (dynamicObjects.length > 0) {
+                this.getModel().deleteEntryData("nckd_realcard_list");
+                for (int i = 0; i < dynamicObjects.length; i++) {
+                    DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                    String number = info.getString("number");//资产编码
+                    String name = info.getString("name");//资产名称
+                    String nckd_card_type = info.getString("nckd_card_type");//资产类别
+                    String nckd_card_status = info.getString("nckd_card_status");//资产状态
+                    DynamicObject nckd_orgfield = info.getDynamicObject("nckd_orgfield");//归属机构
+                    DynamicObject nckd_dept = info.getDynamicObject("nckd_dept");//归属部门
+                    String nckd_use_name = info.getString("nckd_use_name");//使用人
+                    Date nckd_start_date = info.getDate("nckd_start_date");//开始使用日期
+                    String nckd_local = info.getString("nckd_local");//存放地点
+                    String nckd_card_brand = info.getString("nckd_card_brand");//品牌
+                    String nckd_card_model = info.getString("nckd_card_model");//型号
+                    String nckd_serial_number = info.getString("nckd_serial_number");//序列号
+
+                    //实物卡片清单分录赋值
+                    int rowIndex = this.getModel().createNewEntryRow("nckd_realcard_list");
+
+                    this.getModel().setValue("nckd_card_code",number,rowIndex);
+                    this.getModel().setValue("nckd_card_name",name,rowIndex);
+                    this.getModel().setValue("nckd_card_type",nckd_card_type,rowIndex);
+                    this.getModel().setValue("nckd_card_status",nckd_card_status,rowIndex);
+                    this.getModel().setValue("nckd_orgfield",nckd_orgfield,rowIndex);
+                    this.getModel().setValue("nckd_dept",nckd_dept,rowIndex);
+                    this.getModel().setValue("nckd_use_name",nckd_use_name,rowIndex);
+                    this.getModel().setValue("nckd_start_date",nckd_start_date,rowIndex);
+                    this.getModel().setValue("nckd_local",nckd_local,rowIndex);
+                    this.getModel().setValue("nckd_card_brand",nckd_card_brand,rowIndex);
+                    this.getModel().setValue("nckd_card_model",nckd_card_model,rowIndex);
+                    this.getModel().setValue("nckd_serial_number",nckd_serial_number,rowIndex);
+
+                    if (index.equals(0)) {
+                        //资产信息分录赋值
+                        this.getModel().setValue("asset_name",name);
+                        //资产类别赋值
+                        //规格型号
+                        this.getModel().setValue("asset_model",nckd_card_model);
+                        //使用部门
+                        this.getModel().setValue("asset_costdept",nckd_dept);
+                        //使用人
+                        //根据姓名name查询用户,工号是number
+                        QFilter userFilter = new QFilter("name", QCP.equals,nckd_use_name);
+                        DynamicObject[] userDynamicObjects = BusinessDataServiceHelper.load("bos_user","id",new QFilter[] {userFilter});
+                        for (int d=0;d<userDynamicObjects.length;d++) {
+                            DynamicObject userInfo = BusinessDataServiceHelper.loadSingle(userDynamicObjects[i].getPkValue(), userDynamicObjects[i].getDynamicObjectType().getName());
+                            this.getModel().setValue("asset_user",userInfo);
+                        }
+                        //存放地点
+                    }
+                    index++;
+                }
+                //刷新实物卡片清单分录
+                this.getView().updateView("nckd_realcard_list");
+                this.getView().updateView("assetentry");
             }
-            DynamicObject dynamicObject = dynamicObjectCollection.get(0);
         } else if (StringUtils.equals("nckd_apfinapbill", fieldKey)) {
             ChangeData changeData = e.getChangeSet()[0];
             DynamicObject dynamicObject = (DynamicObject) changeData.getNewValue();

+ 63 - 30
src/main/java/fi/er/opplugin/PublicreimburOpPlugin.java

@@ -3,8 +3,10 @@ package fi.er.opplugin;
 import com.alibaba.druid.util.StringUtils;
 import fi.cas.common.SettlementStatusEnum;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.exception.KDBizException;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
@@ -38,6 +40,24 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
                 info.set("nckd_unsettleamount",totalUnsettleamount);
                 info.set("nckd_settleamount",BigDecimal.ZERO);
                 info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+
+                //反写实物卡片清单
+                if (info.getDynamicObjectCollection("nckd_realcard_list") != null ) {
+                    List<String > codeList = new ArrayList<>();
+                    for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_realcard_list")) {
+                        //取当前循环付款明细分录的源单分录id
+                        String cardCode = entryentity.getString("nckd_card_code");
+                        //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
+                        QFilter filter = new QFilter("number", QCP.equals,cardCode);
+                        DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
+                        for (int j = 0; j < cardObjects.length; j++) {
+                            DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName());
+                            //资产报账单审核通过后,实物卡片清单标记为1
+                            cardInfo.set("nckd_flag", "1");
+                            SaveServiceHelper.save(new DynamicObject[]{cardInfo});
+                        }
+                    }
+                }
                 SaveServiceHelper.save(new DynamicObject[]{info});
             } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
                 //当前单头数据包
@@ -48,43 +68,56 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
                 }
                 info.set("nckd_unsettleamount",BigDecimal.ZERO);
                 info.set("nckd_settlestatus", null);
+
+                //反审核反写实物卡片清单
+                if (info.getDynamicObjectCollection("nckd_realcard_list") != null ) {
+                    List<String > codeList = new ArrayList<>();
+                    for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_realcard_list")) {
+                        //取当前循环付款明细分录的源单分录id
+                        String cardCode = entryentity.getString("nckd_card_code");
+                        //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
+                        QFilter filter = new QFilter("number", QCP.equals,cardCode);
+                        DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
+                        for (int j = 0; j < cardObjects.length; j++) {
+                            DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName());
+                            //资产报账单审核通过后,实物卡片清单标记为1
+                            cardInfo.set("nckd_flag", "0");
+                            SaveServiceHelper.save(new DynamicObject[]{cardInfo});
+                        }
+                    }
+                }
                 SaveServiceHelper.save(new DynamicObject[]{info});
             } else if (StringUtils.equals(e.getOperationKey(),"save")) {
-                List<DynamicObject> dynamicObjectList = new ArrayList<>();
+                List<Long> cardList = new ArrayList<>();
+                List<Long> totalList = new ArrayList<>();
                 //获取当前页面数据
                 DynamicObject info = dynamicObjects[i];
-                //获取当前单据数据库保存数据
-                DynamicObject saveInfo = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
-                if (saveInfo == null) {
-                    DynamicObject apfinapbill = info.getDynamicObject("nckd_apfinapbill");
-                    if (apfinapbill != null) {
-                        //所选应付挂帐单更新标识
-                        Long id =  apfinapbill.getLong("id");
-                        QFilter gzFilter = new QFilter("id", QCP.equals,id);
-                        DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter});
-                        DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName());
-                        gzInfo.set("nckd_selectflag","1");
-                        SaveServiceHelper.save(new DynamicObject[]{gzInfo});
+                Long fid = info.getLong("id");
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) {
+                    DynamicObjectCollection dynamicObjectCollection = entryentity.getDynamicObjectCollection("nckd_real_card");
+                    for(DynamicObject  object : dynamicObjectCollection) {
+                        Long id = (Long) object.get(2);
+                        cardList.add(id);
                     }
-                }else {
-                    DynamicObject apfinapbill = info.getDynamicObject("nckd_apfinapbill");
-                    DynamicObject saveApfinapbill = saveInfo.getDynamicObject("nckd_apfinapbill");
-                    Long oldId = saveApfinapbill.getLong("id");
-                    //释放原应付挂账单
-                    QFilter oldFilter = new QFilter("id", QCP.equals,oldId);
-                    DynamicObject[] oldDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {oldFilter});
-                    DynamicObject oldInfo = BusinessDataServiceHelper.loadSingle(oldDynamicObjects[0].getPkValue(), oldDynamicObjects[0].getDynamicObjectType().getName());
-                    oldInfo.set("nckd_selectflag","");
-                    SaveServiceHelper.save(new DynamicObject[]{oldInfo});
-                    if (apfinapbill !=null) {
-                        Long id =  apfinapbill.getLong("id");
-                        QFilter gzFilter = new QFilter("id", QCP.equals,id);
-                        DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter});
-                        DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName());
-                        gzInfo.set("nckd_selectflag","1");
-                        SaveServiceHelper.save(new DynamicObject[]{gzInfo});
+                }
+                //查询报销单
+                QFilter bxFilter = new QFilter("id", QCP.not_equals,fid);
+                bxFilter.and("nckd_card_list_str", QCP.equals, "1");
+                DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load("er_publicreimbursebill","id",new QFilter[] {bxFilter});
+                for (int j = 0; j < bxDynamicObjects.length; j++) {
+                    DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
+                    for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("assetentry")) {
+                        DynamicObjectCollection dynamicObjectCollection = entryentity.getDynamicObjectCollection("nckd_real_card");
+                        for(DynamicObject  dynamicObject : dynamicObjectCollection) {
+                            Long id = (Long) dynamicObject.get(2);
+                            totalList.add(id);
+                        }
                     }
                 }
+                boolean hasCommonElements = cardList.stream().anyMatch(totalList::contains);
+                if (hasCommonElements) {
+                    throw new KDBizException("实物卡片清单已经生成资产清单,请重新选择!");
+                }
             }
         }
     }