瀏覽代碼

Merge branch 'master' of http://111.75.220.136:10030/turborao/jyyy

wangjun 1 天之前
父節點
當前提交
cf0504a1d6

+ 33 - 3
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/task/SynSupplierFromSAPTask.java

@@ -292,6 +292,9 @@ public class SynSupplierFromSAPTask extends AbstractTask implements StopTask {
 //        DynamicObject groupstandard = BusinessDataServiceHelper.loadSingleFromCache("bd_suppliergroupstandard", "id, number, name", qFilter.toArray());
         //子分录--默认分类(支持多分类)
         DynamicObjectCollection groupstandardCol = supplier.getDynamicObjectCollection("entry_groupstandard");
+        //先清除分类
+        groupstandardCol.clear();
+
         DynamicObjectType billtype = groupstandardCol.getDynamicObjectType();
         DynamicObject groupdetail = new DynamicObject(billtype);
         groupdetail.set("standardid", suppliergroup.getDynamicObject("standard"));
@@ -332,8 +335,35 @@ public class SynSupplierFromSAPTask extends AbstractTask implements StopTask {
             }
             DynamicObject customerObj = BusinessDataServiceHelper.loadSingle(supplierId, "bd_supplier");
 
-            OperationServiceHelper.executeOperate("submit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
-            OperationServiceHelper.executeOperate("audit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
+            OperationResult resultSubmit = OperationServiceHelper.executeOperate("submit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
+            err.setLength(0);
+
+            if (resultSubmit.getSuccessPkIds().size() <= 0) {
+                for (int i = 0; i < resultSubmit.getAllErrorOrValidateInfo().size(); i++) {
+                    String message = resultSubmit.getAllErrorOrValidateInfo().get(i).getMessage();
+                    err.append("/").append(message);
+                }
+
+                returnMap.put("code", "500");
+                returnMap.put("msg", err.toString());
+
+                return returnMap;
+            }
+
+            OperationResult resultAudit = OperationServiceHelper.executeOperate("audit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
+            err.setLength(0);
+
+            if (resultAudit.getSuccessPkIds().size() <= 0) {
+                for (int i = 0; i < resultAudit.getAllErrorOrValidateInfo().size(); i++) {
+                    String message = resultAudit.getAllErrorOrValidateInfo().get(i).getMessage();
+                    err.append("/").append(message);
+                }
+
+                returnMap.put("code", "500");
+                returnMap.put("msg", err.toString());
+
+                return returnMap;
+            }
         }
 
         //组织分配
@@ -367,7 +397,7 @@ public class SynSupplierFromSAPTask extends AbstractTask implements StopTask {
                     if(differenceList.size() > 0){
                         String unAssignOrgString = String.join(",", differenceList);
 
-                        logger.info("同步成功、部分组织分配失败:" + unAssignOrgString + ", 这些组织在星瀚中匹配到!");
+                        logger.info("同步成功、部分组织分配失败:" + unAssignOrgString + ", 这些组织在星瀚中匹配到!");
                     }
                 }
             }

+ 34 - 2
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/webapi/SynSupplierApiPlugin.java

@@ -224,6 +224,9 @@ public class SynSupplierApiPlugin implements Serializable {
 
         //子分录--默认分类(支持多分类)
         DynamicObjectCollection groupstandardCol = supplier.getDynamicObjectCollection("entry_groupstandard");
+        //先清除分类
+        groupstandardCol.clear();
+
         DynamicObjectType billtype = groupstandardCol.getDynamicObjectType();
         DynamicObject groupdetail = new DynamicObject(billtype);
         groupdetail.set("standardid", supplierGroup.getDynamicObject("standard"));
@@ -362,8 +365,37 @@ public class SynSupplierApiPlugin implements Serializable {
 
                 DynamicObject customerObj = BusinessDataServiceHelper.loadSingle(supplierId, "bd_supplier");
 
-                OperationServiceHelper.executeOperate("submit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
-                OperationServiceHelper.executeOperate("audit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
+                OperationResult resultSubmit = OperationServiceHelper.executeOperate("submit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
+
+                err.setLength(0);
+
+                if (resultSubmit.getSuccessPkIds().size() <= 0) {
+                    for (int i = 0; i < resultSubmit.getAllErrorOrValidateInfo().size(); i++) {
+                        String message = resultSubmit.getAllErrorOrValidateInfo().get(i).getMessage();
+                        err.append("/").append(message);
+                    }
+
+                    returnMap.put("code", "500");
+                    returnMap.put("msg", err.toString());
+
+                    return returnMap;
+                }
+
+                OperationResult resultAudit = OperationServiceHelper.executeOperate("audit", ENTITY_SUPPLIER, new DynamicObject[]{customerObj}, OperateOption.create());
+
+                err.setLength(0);
+
+                if (resultAudit.getSuccessPkIds().size() <= 0) {
+                    for (int i = 0; i < resultAudit.getAllErrorOrValidateInfo().size(); i++) {
+                        String message = resultAudit.getAllErrorOrValidateInfo().get(i).getMessage();
+                        err.append("/").append(message);
+                    }
+
+                    returnMap.put("code", "500");
+                    returnMap.put("msg", err.toString());
+
+                    return returnMap;
+                }
             }
 
         } catch(Exception e){

+ 57 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/fi/cas/task/AgentPayUpadteStatusTask.java

@@ -0,0 +1,57 @@
+package fi.cas.task;
+
+import com.alibaba.druid.support.logging.Log;
+import com.alibaba.druid.support.logging.LogFactory;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.OperateOption;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.exception.KDException;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.OperationServiceHelper;
+
+import java.util.Map;
+
+public class AgentPayUpadteStatusTask extends AbstractTask {
+    private static final Log log = LogFactory.getLog(AgentPayUpadteStatusTask.class);
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        //获取要查询的数据。状态为已审批,支付状态为支付成功。
+        QFilter filter = new QFilter("billstatus", QCP.equals, "C");
+        filter.and("nckd_paystatus", QCP.equals, "3");
+        filter.and("nckd_fkcs", QCP.large_equals, 0);
+        DynamicObject[] payinfos = BusinessDataServiceHelper.load("cas_agentpaybill","billno", new QFilter[] {filter});
+        if(payinfos.length>0){
+            for (int i = 0; i <payinfos.length ; i++) {
+                DynamicObject payinfo = BusinessDataServiceHelper.loadSingle(payinfos[i].getPkValue(),"cas_agentpaybill");
+                try {
+                    OperationServiceHelper.executeOperate("pay","cas_agentpaybill",new DynamicObject[]{payinfo}, OperateOption.create());
+                }catch (Exception e){
+                    log.info("代发单变更状态报错:"+payinfo.get("billno"));
+                }
+            }
+
+
+        }
+
+        //获取要查询的数据。状态为已审批,支付状态为支付成功。
+        QFilter filter_bfcg = new QFilter("billstatus", QCP.equals, "C");
+        filter_bfcg.and("nckd_paystatus", QCP.equals, "7");
+        filter_bfcg.and("nckd_fkcs", QCP.large_equals, 0);
+        DynamicObject[] payinfos_bfcg = BusinessDataServiceHelper.load("cas_agentpaybill","billno", new QFilter[] {filter_bfcg});
+        if(payinfos_bfcg.length>0){
+            for (int i = 0; i <payinfos_bfcg.length ; i++) {
+                DynamicObject payinfo_bfcg = BusinessDataServiceHelper.loadSingle(payinfos_bfcg[i].getPkValue(),"cas_agentpaybill");
+                try {
+                    OperationServiceHelper.executeOperate("paynew","cas_agentpaybill",new DynamicObject[]{payinfo_bfcg}, OperateOption.create());
+                }catch (Exception e){
+                    log.info("代发单变更状态报错:"+payinfo_bfcg.get("billno"));
+                }
+            }
+
+
+        }
+
+    }
+}

+ 1 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/fi/cas/task/PayUpadteStatusTask.java

@@ -20,7 +20,7 @@ public class PayUpadteStatusTask  extends AbstractTask {
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
         //获取要查询的数据。状态为已审批,支付状态为支付成功。
         QFilter filter = new QFilter("billstatus", QCP.equals, "C");
-        filter.and("nckd_paystatus", QCP.equals, 3);
+        filter.and("nckd_paystatus", QCP.equals, "3");
         filter.and("nckd_fkcs", QCP.large_equals, 0);
         DynamicObject[] payinfos = BusinessDataServiceHelper.load("cas_paybill","billno", new QFilter[] {filter});
         if(payinfos.length>0){

+ 320 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/kd/fi/business/opservice/helper/AgentPayServiceHelperEx.java

@@ -0,0 +1,320 @@
+
+package kd.fi.cas.business.opservice.helper;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.MetadataServiceHelper;
+import kd.bos.servicehelper.botp.BFTrackerServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.fi.cas.business.journal.AgentPayBookJournalBuilder;
+import kd.fi.cas.business.journal.JournalServiceAdapter;
+import kd.fi.cas.business.pojo.PayEntryStatusInfo;
+import kd.fi.cas.business.pojo.PayStatusInfo;
+import kd.fi.cas.business.pojo.PayStatusInfo.PayMode;
+import kd.fi.cas.business.writeback.AgentWriteBackConsumer;
+import kd.fi.cas.business.writeback.WriteBackTaskHelper;
+import kd.fi.cas.business.writeback.consts.WriteBackOperateEnum;
+import kd.fi.cas.enums.BeBillStatusEnum;
+import kd.fi.cas.enums.BillStatusEnum;
+import kd.fi.cas.helper.CasHelper;
+import kd.fi.cas.util.EmptyUtil;
+
+public class AgentPayServiceHelperEx {
+    public AgentPayServiceHelperEx() {
+    }
+
+    public static void updateAcutalPayInfo(PayStatusInfo payStatus, DynamicObject agentPayBill) {
+        updateAgentPayBill(payStatus, agentPayBill);
+        if (BillStatusEnum.PAY.getValue().equals(agentPayBill.getString("billstatus"))) {
+           // if (isNeedBookJournal(agentPayBill)) {
+                bookJournal(agentPayBill);
+           // }
+
+            SaveServiceHelper.save(new DynamicObject[]{agentPayBill});
+            if (payStatus.isNeedWriteback()) {
+                writeBack(agentPayBill);
+            }
+        } else {
+            SaveServiceHelper.save(new DynamicObject[]{agentPayBill});
+        }
+
+    }
+
+    public static void updateAgentPayBill(PayStatusInfo payStatus, DynamicObject agentPayBill) {
+        if (PayMode.OffLine == payStatus.getPayMode()) {
+            agentPayBill.set("cashier", Long.valueOf(RequestContext.get().getUserId()));
+            updateBillPayInfo(agentPayBill, payStatus.getEntryStatus());
+        } else {
+            BeBillStatusEnum bankAgentStatus = payStatus.getBankBillStatus();
+            if (BeBillStatusEnum.TS == bankAgentStatus || BeBillStatusEnum.TF == bankAgentStatus) {
+                if (PayMode.BeSync == payStatus.getPayMode()) {
+                    agentPayBill.set("batchseqid", payStatus.getBatchSeq());
+                }
+
+                updateBillPayInfo(agentPayBill, payStatus.getEntryStatus());
+            }
+
+            agentPayBill.set("bankagentpaystatus", bankAgentStatus.getValue());
+            if (PayMode.BeSync == payStatus.getPayMode()) {
+                agentPayBill.set("bankcheckflag", CasHelper.subFlag(payStatus.getBankCheckFlag()));
+                agentPayBill.set("bankcheckflag_tag", payStatus.getBankCheckFlag());
+            }
+        }
+
+    }
+
+    private static void updateBillPayInfo(DynamicObject agentPayBill, List<PayEntryStatusInfo> entryStatus) {
+        agentPayBill.set("billstatus", BillStatusEnum.PAY.getValue());
+        agentPayBill.set("paytime", new Date());
+        BigDecimal actPayAmount = BigDecimal.ZERO;
+        int actPayCount = 0;
+        DynamicObjectCollection agentEntry = agentPayBill.getDynamicObjectCollection("entry");
+        Iterator var5 = agentEntry.iterator();
+
+        while(var5.hasNext()) {
+            DynamicObject agentRow = (DynamicObject)var5.next();
+            Iterator var7 = entryStatus.iterator();
+
+            while(var7.hasNext()) {
+                PayEntryStatusInfo rowStatus = (PayEntryStatusInfo)var7.next();
+                if (rowStatus.getEntryId() == agentRow.getLong("id")) {
+                    //agentRow.set("e_issuccess", rowStatus.isSuccess());
+                    //agentRow.set("bankreturnmsg", rowStatus.getBankReturnMsg());
+                    agentRow.set("e_isrefund", !agentRow.getBoolean("e_issuccess"));
+                }
+            }
+
+            if (agentRow.getBoolean("e_issuccess")) {
+                actPayAmount = actPayAmount.add(agentRow.getBigDecimal("e_amount"));
+                ++actPayCount;
+            }
+        }
+
+        agentPayBill.set("actpayamount", actPayAmount);
+        agentPayBill.set("actcount", actPayCount);
+    }
+
+    public static boolean isNeedBookJournal(DynamicObject agentPayBill) {
+        DynamicObject settleType = (DynamicObject)agentPayBill.get("settletype");
+        if (EmptyUtil.isNoEmpty(settleType)) {
+            String settlementtype = settleType.getString("settlementtype");
+            Set<String> draftTypeList = (Set)Stream.of("2", "5", "6").collect(Collectors.toSet());
+            if (draftTypeList.contains(settlementtype)) {
+                return false;
+            }
+        }
+
+        DynamicObjectCollection entry = agentPayBill.getDynamicObjectCollection("entry");
+        Iterator var6 = entry.iterator();
+
+        DynamicObject row;
+        do {
+            if (!var6.hasNext()) {
+                return false;
+            }
+
+            row = (DynamicObject)var6.next();
+        } while(!row.getBoolean("e_issuccess") && !row.getBoolean("e_isrefund"));
+
+        return true;
+    }
+
+    public static void bookJournal(DynamicObject agentPayBill) {
+        JournalServiceAdapter journalServiceAdapter = new JournalServiceAdapter();
+        journalServiceAdapter.validateBook(new AgentPayBookJournalBuilder(), agentPayBill);
+        journalServiceAdapter.book(agentPayBill);
+    }
+
+    private static void writeBack(DynamicObject agentPayBill) {
+        String source = agentPayBill.getString("source");
+        if ("BOTP".equals(source)) {
+            WriteBackTaskHelper.addRealtimeTask(agentPayBill, agentPayBill.getString("sourcebilltype"), WriteBackOperateEnum.PAY, AgentWriteBackConsumer.class);
+        }
+    }
+
+    public static List<String> getSelector() {
+        List<String> lst = new ArrayList(59);
+        lst.add("billstatus");
+        lst.add("org");
+        lst.add("bizdate");
+        lst.add("payeracctbank");
+        lst.add("currency");
+        lst.add("basecurrency");
+        lst.add("payamount");
+        lst.add("localamt");
+        lst.add("exchangerate");
+        lst.add("expectdealtime");
+        lst.add("settletype");
+        lst.add("count");
+        lst.add("billtype");
+        lst.add("org");
+        lst.add("sourcebillnumber");
+        lst.add("accountcash");
+        lst.add("openorg");
+        lst.add("modifier");
+        lst.add("ispersonpay");
+        lst.add("payeetype");
+        lst.add("e_encryptamount");
+        lst.add("e_amount");
+        lst.add("paymentterm");
+        lst.add("paymentfps");
+        lst.add("paymentareacode");
+        lst.add("informrecemail");
+        lst.add("inforpayment");
+        lst.add("payeename");
+        lst.add("payeeacctbank");
+        lst.add("payeebankname");
+        lst.add("e_amount");
+        lst.add("e_encryptamount");
+        lst.add("payeebanknumber");
+        lst.add("e_localamt");
+        lst.add("e_encryptlocalamt");
+        lst.add("sourcebillid");
+        lst.add("isencryption");
+        lst.add("e_encryptamount");
+        lst.add("e_amount");
+        lst.add("paymentchannel");
+        lst.add("isdiffcur");
+        lst.add("dpcurrency");
+        lst.add("dpexchangerate");
+        lst.add("dpamt");
+        lst.add("dplocalamt");
+        lst.add("lossamt");
+        lst.add("agreedrate");
+        lst.add("iscrosspay");
+        lst.add("contractno");
+        lst.add("crosstrantype");
+        lst.add("paycountry");
+        lst.add("reccountry");
+        lst.add("payerbank");
+        lst.add("recswiftcode");
+        lst.add("paymenttype");
+        lst.add("description");
+        lst.add("delegorg");
+        lst.add("feepayer");
+        lst.add("feeactbank");
+        lst.add("feecurrency");
+        lst.add("fee");
+        lst.add("actpayamount");
+        lst.add("exratedate");
+        lst.add("exratetable");
+        lst.add("payquotation");
+        lst.add("dppayquotation");
+        lst.add("agreedquotation");
+        lst.add("basecurrency");
+        lst.add("e_dpamt");
+        lst.add("e_dplocalamt");
+        lst.add("matchflag");
+        lst.add("matchamount");
+        lst.add("unmatchamount");
+        lst.add("entrymatchamount");
+        lst.add("entryunmatchamount");
+        lst.add("entrymatchflag");
+        lst.add("businesstype");
+        return lst;
+    }
+
+    public static List<String> getSelectors() {
+        List<String> selectors = new ArrayList(70);
+        selectors.add("billno");
+        selectors.add("billstatus");
+        selectors.add("source");
+        selectors.add("payeracctbank");
+        selectors.add("accountcash");
+        selectors.add("org");
+        selectors.add("bizdate");
+        selectors.add("description");
+        selectors.add("currency");
+        selectors.add("exchangerate");
+        selectors.add("settletype");
+        selectors.add("settletnumber");
+        selectors.add("localamt");
+        selectors.add("payamount");
+        selectors.add("sourcebilltype");
+        selectors.add("count");
+        selectors.add("paytime");
+        selectors.add("actpayamount");
+        selectors.add("actcount");
+        selectors.add("cashier");
+        selectors.add("iscommitbe");
+        selectors.add("bankcheckflag");
+        selectors.add("bankcheckflag_tag");
+        selectors.add("delegorg");
+        selectors.add("payeename");
+        selectors.add("e_amount");
+        selectors.add("e_localamt");
+        selectors.add("e_encryptamount");
+        selectors.add("e_encryptlocalamt");
+        selectors.add("e_fundflowitem");
+        selectors.add("e_issuccess");
+        selectors.add("bankreturnmsg");
+        selectors.add("settletnumber");
+        selectors.add("batchseqid");
+        selectors.add("bankagentpaystatus");
+        selectors.add("e_isrefund");
+        selectors.add("billtype");
+        selectors.add("isencryption");
+        selectors.add("sourcebillid");
+        selectors.add("sourceentryid");
+        selectors.add("paymentchannel");
+        selectors.add("isdiffcur");
+        selectors.add("dpcurrency");
+        selectors.add("dpamt");
+        selectors.add("iscrosspay");
+        selectors.add("dplocalamt");
+        selectors.add("agreedrate");
+        selectors.add("dpexchangerate");
+        selectors.add("fee");
+        selectors.add("feecurrency");
+        selectors.add("feeactbank");
+        selectors.add("e_bankcheckflag");
+        selectors.add("lossamt");
+        selectors.add("isagencypersonpay");
+        selectors.add("basecurrency");
+        selectors.add("e_dpamt");
+        selectors.add("e_dplocalamt");
+        selectors.add("e_fee");
+        selectors.add("payeebankname");
+        selectors.add("payeeacctbank");
+        selectors.add("e_fee");
+        selectors.add("feepayer");
+        selectors.add("acttradedate");
+        selectors.add("createtime");
+        selectors.add("e_paytime");
+        selectors.add("payquotation");
+        selectors.add("dppayquotation");
+        selectors.add("agreedquotation");
+        return selectors;
+    }
+
+    public static DynamicObject[] getSourceAgentBillList(List<Long> agentIdList) {
+        List<Long> agentPaySourceBillIdList = new ArrayList(10);
+        Map<String, HashSet<Long>> srcBills = BFTrackerServiceHelper.findSourceBills("cas_agentpaybill", (Long[])agentIdList.toArray(new Long[0]));
+        Set<Map.Entry<String, HashSet<Long>>> entrySet = srcBills.entrySet();
+        Iterator var4 = entrySet.iterator();
+
+        while(var4.hasNext()) {
+            Map.Entry<String, HashSet<Long>> entry = (Map.Entry)var4.next();
+            String key = (String)entry.getKey();
+            HashSet<Long> value = (HashSet)entry.getValue();
+            if ("cas_agentpaybill".equals(key)) {
+                agentPaySourceBillIdList.addAll(value);
+            }
+        }
+
+        DynamicObject[] agentPaySourceBills = BusinessDataServiceHelper.load(agentPaySourceBillIdList.toArray(new Object[0]), MetadataServiceHelper.getDataEntityType("cas_agentpaybill"));
+        return agentPaySourceBills;
+    }
+}

+ 325 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/kd/fi/cas/opplugin/AgentPayPayOPEx.java

@@ -0,0 +1,325 @@
+
+package kd.fi.cas.opplugin;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import kd.bos.dataentity.OperateOption;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.plugin.PreparePropertysEventArgs;
+import kd.bos.entity.plugin.args.AfterOperationArgs;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.exception.KDBizException;
+import kd.bos.extplugin.PluginProxy;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.MetadataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.fi.cas.business.helper.VoucherCheckHepler;
+import kd.fi.cas.business.journal.book.jourrnalbook.book.BookJournalService;
+import kd.fi.cas.business.opservice.helper.AgentPayServiceHelperEx;
+import kd.fi.cas.business.pojo.PayEntryStatusInfo;
+import kd.fi.cas.business.pojo.PayStatusInfo;
+import kd.fi.cas.business.pojo.PayStatusInfo.PayMode;
+import kd.fi.cas.business.writeback.AgentWriteBackConsumer;
+import kd.fi.cas.business.writeback.WriteBackTaskHelper;
+import kd.fi.cas.business.writeback.consts.WriteBackOperateEnum;
+import kd.fi.cas.enums.BillStatusEnum;
+import kd.fi.cas.helper.AgentPayBillHelper;
+import kd.fi.cas.helper.CasHelper;
+import kd.fi.cas.helper.OperateServiceHelper;
+import kd.fi.cas.helper.QuotationHelper;
+import kd.fi.cas.helper.RefundHelper;
+import kd.fi.cas.helper.SystemParameterHelper;
+import kd.fi.cas.pojo.book.BookCheckResult;
+import kd.fi.cas.util.EmptyUtil;
+import kd.fi.cas.util.StringUtils;
+import kd.fi.cas.validator.AgentPayBillIsFreezeValidator;
+import kd.fi.cas.validator.AgentPayBillWriteValidator;
+import kd.fi.cas.validator.AgentPayValidator;
+import kd.sdk.fi.cas.extpoint.recbill.IAgentPayField;
+
+public class AgentPayPayOPEx extends AbstractOperationServicePlugIn {
+    public AgentPayPayOPEx() {
+    }
+
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        super.onPreparePropertys(e);
+        List<String> fieldKeys = e.getFieldKeys();
+        fieldKeys.addAll(AgentPayServiceHelperEx.getSelectors());
+    }
+
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        super.beginOperationTransaction(e);
+        DynamicObject[] agentPayBillDts = e.getDataEntities();
+        List<Long> agentIdList = (List)Arrays.stream(agentPayBillDts).map((o) -> {
+            return o.getLong("id");
+        }).collect(Collectors.toList());
+        Set<String> sourceBillNoList = (Set)Arrays.stream(agentPayBillDts).filter((o) -> {
+            return !StringUtils.isBlank(o.getString("sourcebillnumber"));
+        }).map((o) -> {
+            return o.getString("sourcebillnumber");
+        }).collect(Collectors.toSet());
+        List<DynamicObject> agentPayBillList = new ArrayList(10);
+        DynamicObject[] agentPaySourceBillList = AgentPayServiceHelperEx.getSourceAgentBillList(agentIdList);
+        List<Long> agentErrSourceBillIdList = (List)Arrays.stream(agentPaySourceBillList).filter((o) -> {
+            return !"repay".equals(o.getString("sourcebilltype"));
+        }).map((o) -> {
+            return o.getLong("id");
+        }).collect(Collectors.toList());
+        DynamicObject[] var8 = agentPaySourceBillList;
+        int var9 = agentPaySourceBillList.length;
+
+        for(int var10 = 0; var10 < var9; ++var10) {
+            DynamicObject agentPaySourceBill = var8[var10];
+            if (sourceBillNoList.contains(agentPaySourceBill.getString("billno"))) {
+                agentPayBillList.add(agentPaySourceBill);
+            }
+        }
+
+        Set<Long> orgIds = (Set)((Stream)Arrays.stream(agentPayBillDts).parallel()).filter((d1) -> {
+            DynamicObject d = (DynamicObject)d1;
+            return CasHelper.isNotEmpty(d.getDynamicObject("org")) && CasHelper.isNotEmpty(d.getDynamicObject("org").getLong("id"));
+        }).map((d1) -> {
+            DynamicObject d = (DynamicObject)d1;
+            return d.getDynamicObject("org").getLong("id");
+        }).collect(Collectors.toSet());
+        Map<String, Object> pushMap = SystemParameterHelper.getSystemParamsByOrgIds(new ArrayList(orgIds), "cs088");
+        List<DynamicObject> pushBills = new ArrayList();
+        DynamicObject[] agentPaySourceBills = BusinessDataServiceHelper.load(agentIdList.toArray(), EntityMetadataCache.getDataEntityType("cas_agentpaybill"));
+        agentPayBillList.addAll(Arrays.asList(agentPaySourceBills));
+        DynamicObject[] var12 = e.getDataEntities();
+        int var13 = var12.length;
+
+        for(int var14 = 0; var14 < var13; ++var14) {
+            DynamicObject info = var12[var14];
+            if (AgentPayBillHelper.isDelegPush(info)) {
+                String orgId = info.getDynamicObject("org").getString("id");
+                boolean isPush = EmptyUtil.isEmpty(orgId) ? false : (Boolean)pushMap.get(orgId);
+                if (isPush) {
+                    pushBills.add(info);
+                }
+            }
+        }
+
+        Map<String, String> params = this.getOption().getVariables();
+        Iterator var43 = agentPayBillList.iterator();
+
+        while(var43.hasNext()) {
+            DynamicObject info = (DynamicObject)var43.next();
+            DynamicObject basecurrency;
+            if (info.getBoolean("isdiffcur")) {
+                Object agreeRate = params.get("agreedrate");
+                if (agreeRate != null) {
+                    BigDecimal dpAmt = new BigDecimal((String)params.get("dpamt"));
+                    BigDecimal fee = new BigDecimal((String)params.get("fee"));
+                    info.set("dpamt", dpAmt);
+                    info.set("agreedrate", agreeRate);
+                    info.set("fee", fee);
+                    BigDecimal dpExchangeRate = info.getBigDecimal("dpexchangerate");
+                    basecurrency = info.getDynamicObject("basecurrency");
+                    String dppayquotation = info.getString("dppayquotation");
+                    String agreedquotation = info.getString("agreedquotation");
+                    BigDecimal dpLocalAmt = QuotationHelper.callToCurrency(dpAmt, dpExchangeRate, dppayquotation, basecurrency.getInt("amtprecision"));
+                    BigDecimal localAmt = info.getBigDecimal("localamt");
+                    info.set("dplocalamt", dpLocalAmt);
+                    info.set("lossamt", localAmt.subtract(dpLocalAmt));
+                    BigDecimal payAmount = info.getBigDecimal("payamount");
+                    BigDecimal agreedrate = info.getBigDecimal("agreedrate");
+                    DynamicObject dpcurrency = info.getDynamicObject("dpcurrency");
+                    BigDecimal sumDpamt = BigDecimal.ZERO;
+                    BigDecimal sumDpLocalamt = BigDecimal.ZERO;
+                    BigDecimal sumEFee = BigDecimal.ZERO;
+                    DynamicObjectCollection entry = info.getDynamicObjectCollection("entry");
+
+                    for(int i = 0; i < entry.size(); ++i) {
+                        DynamicObject row = (DynamicObject)entry.get(i);
+                        BigDecimal edpamt = BigDecimal.ZERO;
+                        BigDecimal edplocalamt = BigDecimal.ZERO;
+                        BigDecimal efee = BigDecimal.ZERO;
+                        if (i == entry.size() - 1) {
+                            edpamt = dpAmt.subtract(sumDpamt);
+                            edplocalamt = dpLocalAmt.subtract(sumDpLocalamt);
+                            efee = fee.subtract(sumEFee);
+                        } else {
+                            String encryptAmt = row.getString("e_encryptamount");
+                            BigDecimal eamount = AgentPayBillHelper.decodeAmount(encryptAmt);
+                            if (dpcurrency != null) {
+                                edpamt = QuotationHelper.callToCurrency(eamount, agreedrate, agreedquotation, dpcurrency.getInt("amtprecision"));
+                            } else {
+                                edpamt = QuotationHelper.callToCurrency(eamount, agreedrate, agreedquotation, 10);
+                            }
+
+                            sumDpamt = sumDpamt.add(edpamt);
+                            edplocalamt = QuotationHelper.callToCurrency(edpamt, dpExchangeRate, dppayquotation, basecurrency.getInt("amtprecision"));
+                            sumDpLocalamt = sumDpLocalamt.add(edplocalamt);
+                            if (dpcurrency != null) {
+                                efee = fee.multiply(eamount.divide(payAmount, 10, 4)).setScale(dpcurrency.getInt("amtprecision"), 4);
+                            }
+
+                            sumEFee = sumEFee.add(efee);
+                        }
+
+                        row.set("e_dpamt", edpamt);
+                        row.set("e_dplocalamt", edplocalamt);
+                        row.set("e_fee", efee);
+                        row.set("e_paytime", new Date());
+                    }
+                }
+            }
+
+            PayStatusInfo payStatus = new PayStatusInfo();
+            payStatus.setId((Long)info.getPkValue());
+            payStatus.setPayMode(PayMode.OffLine);
+            List<PayEntryStatusInfo> entryStatus = new ArrayList();
+            DynamicObjectCollection entry = info.getDynamicObjectCollection("entry");
+            Iterator var57 = entry.iterator();
+
+            while(var57.hasNext()) {
+                basecurrency = (DynamicObject)var57.next();
+                entryStatus.add(new PayEntryStatusInfo((Long)basecurrency.getPkValue(), true, (String)null));
+            }
+
+            payStatus.setEntryStatus(entryStatus);
+            AgentPayBillHelper.decodeAmount(info);
+            AgentPayServiceHelperEx.updateAgentPayBill(payStatus, info);
+            this.setAgentPayField(info);
+            boolean isencryption = info.getBoolean("isencryption");
+            Iterator var59 = entry.iterator();
+
+            while(var59.hasNext()) {
+                DynamicObject r = (DynamicObject)var59.next();
+                if (isencryption) {
+                    r.set("e_amount", (Object)null);
+                    r.set("e_localamt", (Object)null);
+                }
+            }
+        }
+
+        this.batchUpdatePayDate(agentPayBillList, orgIds);
+        RefundHelper.setSomeRefundAmtFields((DynamicObject[])agentPayBillList.toArray(new DynamicObject[0]), "cas_agentpaybill");
+        SaveServiceHelper.save((DynamicObject[])agentPayBillList.toArray(new DynamicObject[0]));
+        List<DynamicObject> agentPayBillBookList = (List)agentPayBillList.stream().filter((o) -> {
+            return !agentErrSourceBillIdList.contains(o.getLong("id"));
+        }).collect(Collectors.toList());
+        List<BookCheckResult> results = BookJournalService.getInstance().doBook(agentPayBillBookList);
+        if (results != null && results.size() > 0) {
+            StringBuilder strInfos = new StringBuilder();
+            results.forEach((o) -> {
+                strInfos.append(o.getBizBillNo()).append(o.getInfo()).append("\r\n");
+            });
+            throw new KDBizException(strInfos.toString());
+        } else {
+            Iterator var49 = agentPayBillList.iterator();
+
+            while(var49.hasNext()) {
+                DynamicObject agentPayBill = (DynamicObject)var49.next();
+                String source = agentPayBill.getString("source");
+                if ("BOTP".equals(source)) {
+                    WriteBackTaskHelper.addRealtimeTask(agentPayBill, agentPayBill.getString("sourcebilltype"), WriteBackOperateEnum.PAY, AgentWriteBackConsumer.class);
+                }
+            }
+
+            if (pushBills.size() > 0) {
+                OperateServiceHelper.execOperate("genotherarbill", "cas_agentpaybill", (DynamicObject[])pushBills.toArray(new DynamicObject[0]), OperateOption.create());
+            }
+
+        }
+    }
+
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+        e.addValidator(new AgentPayValidator());
+        e.addValidator(new AgentPayBillWriteValidator(WriteBackOperateEnum.PAYVALIDATE));
+        e.getValidators().add(new AgentPayBillIsFreezeValidator());
+    }
+
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+        super.afterExecuteOperationTransaction(e);
+        List<DynamicObject> checkBills = new ArrayList();
+        List<Object> agentIdList = (List)Arrays.stream(e.getDataEntities()).map((o) -> {
+            return o.getPkValue();
+        }).collect(Collectors.toList());
+        DynamicObject[] agentDts = BusinessDataServiceHelper.load(agentIdList.toArray(new Object[0]), MetadataServiceHelper.getDataEntityType("cas_agentpaybill"));
+        Map<Object, DynamicObject> agentDtsMap = (Map)Arrays.stream(agentDts).collect(Collectors.toMap((o) -> {
+            return o.getPkValue();
+        }, Function.identity()));
+        DynamicObject[] var6 = e.getDataEntities();
+        int var7 = var6.length;
+
+        for(int var8 = 0; var8 < var7; ++var8) {
+            DynamicObject info = var6[var8];
+            DynamicObject bill = (DynamicObject)agentDtsMap.get(info.getPkValue());
+            if (null != bill && BillStatusEnum.AUDIT.getValue().equals(bill.getString("billstatus"))) {
+                checkBills.add(info);
+            }
+        }
+
+        if (EmptyUtil.isNoEmpty(checkBills)) {
+            VoucherCheckHepler.batchDoVoucherCheck(checkBills);
+        }
+
+        OperateServiceHelper.execOperate("synctrigger", "cas_agentpaybill", e.getDataEntities(), OperateOption.create());
+    }
+
+    private void batchUpdatePayDate(List<DynamicObject> agentPayBills, Set<Long> orgIds) {
+        Map<String, Object> payDateMap = SystemParameterHelper.getSystemParamsByOrgIds(new ArrayList(orgIds), "selectpaydate");
+        Iterator var5 = agentPayBills.iterator();
+
+        while(var5.hasNext()) {
+            DynamicObject agentPayBill = (DynamicObject)var5.next();
+            DynamicObjectCollection agentEntry = agentPayBill.getDynamicObjectCollection("entry");
+            String orgId = agentPayBill.getDynamicObject("org").getString("id");
+            Object value = payDateMap.get(orgId);
+            Date payDate;
+            switch (value == null ? "sysdate" : value.toString()) {
+                case "expectdate":
+                    payDate = agentPayBill.getDate("expectdealtime");
+                    break;
+                case "bizdate":
+                    payDate = agentPayBill.getDate("bizdate");
+                    break;
+                case "auditdate":
+                    payDate = agentPayBill.getDate("auditdate");
+                    break;
+                case "sysdate":
+                    payDate = new Date();
+                    break;
+                default:
+                    payDate = null;
+            }
+
+            Iterator var11 = agentEntry.iterator();
+
+            while(var11.hasNext()) {
+                DynamicObject agentRow = (DynamicObject)var11.next();
+                if (agentRow.getBoolean("e_issuccess")) {
+                    agentRow.set("e_paytime", payDate);
+                }
+            }
+            agentPayBill.set("paytime", payDate);
+
+        }
+
+    }
+
+    private void setAgentPayField(DynamicObject info) {
+        PluginProxy<IAgentPayField> pluginProxy = PluginProxy.create(IAgentPayField.class, "fi.cas.agentpay.IAgentPayField");
+        pluginProxy.callReplace((proxy) -> {
+            proxy.setAgentPayField(info);
+            return null;
+        });
+    }
+}

+ 80 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hom/formplugin/OnbrdInfoEditEx.java

@@ -0,0 +1,80 @@
+package nckd.jimin.jyyy.hr.hom.formplugin;
+
+import kd.bos.algo.DataSet;
+import kd.bos.algo.Row;
+import kd.bos.dataentity.entity.OrmLocaleValue;
+import kd.bos.dataentity.utils.ObjectUtils;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.hr.hom.common.util.PinyinUtil;
+import kd.sdk.plugin.Plugin;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Module           :核心人力云-入职管理-入职人员管理-入职申请
+ * Description      :入职申请/办理表单插件
+ * @author Tyx
+ * @date  2025/5/13
+ * 标识 hom_onbrdinfo
+ */
+public class OnbrdInfoEditEx extends AbstractFormPlugin implements Plugin {
+
+    private static String email_ex = "@jeyoupharma.com";    //邮箱后缀
+
+    /**
+     * 值改变事件
+     * @param e
+     */
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+        //姓名变化后,生成邮箱
+        if(e.getProperty().getName().equals("name")){
+            Object newValue = e.getChangeSet()[0].getNewValue();
+            if(ObjectUtils.isEmpty(newValue)) {
+                this.getModel().setValue("nckd_companyemail.zh_CN", null);
+            }
+            else {
+                OrmLocaleValue orm = (OrmLocaleValue) this.getModel().getValue("name");
+                String name = orm.getLocaleValue_zh_CN().trim();
+                try {
+                    //转换成拼音
+                    String py = PinyinUtil.converterToSpell(name).replaceAll("\\s", "");
+                    py = py.toLowerCase();
+                    //查询是否有重复
+                    String sql = " /*dialect*/ select distinct fbusemail from t_hrpi_percontact where fbusemail like '"+py+"%"+email_ex+"'";
+                    DataSet dataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("hr"), sql);
+                    String email = "";
+                    int maxSerial = 0;
+                    while(dataSet.hasNext()) {
+                        Row rowData = dataSet.next();
+                        email = rowData.getString("fbusemail");
+                        Pattern pat = Pattern.compile(py + "([0-9]+)"+email_ex);
+                        Matcher matcher = pat.matcher(email);
+                        while(matcher.find()) {
+                            String serial = email.substring(matcher.start(1), matcher.end(1));
+                            if(maxSerial < java.lang.Integer.valueOf(serial)){
+                                maxSerial = java.lang.Integer.valueOf(serial);
+                            }
+                        }
+                        if(maxSerial == 0){
+                            //找到了一个同名,但是没有序号的邮箱
+                            maxSerial ++;
+                        }
+                    }
+                    if(maxSerial > 0){
+                        maxSerial++;
+                        py = py + maxSerial;
+                    }
+                    this.getModel().setValue("nckd_companyemail", py + email_ex);
+                } catch (Exception ex) {
+                    throw new RuntimeException(ex);
+                }
+            }
+        }
+    }
+}