Bladeren bron

Merge branch 'master' of http://111.75.220.136:10030/13246659623/jxyh

13246659623 6 maanden geleden
bovenliggende
commit
85b1f0d6a5

+ 44 - 0
src/main/java/fi/ar/formplugin/AcctagerptPlugin.java

@@ -0,0 +1,44 @@
+package fi.ar.formplugin;
+
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.report.plugin.AbstractReportFormPlugin;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.time.LocalDate;
+import java.util.EventObject;
+
+/**
+ * @author cjz
+ * @date 2024/10/11 17:26
+ * @description:跳转后报表初始化参数
+ */
+public class AcctagerptPlugin extends AbstractReportFormPlugin implements Plugin {
+
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
+        // 获取自定义参数
+        FormShowParameter formShowParameter = this.getView().getFormShowParameter();
+        Object text = formShowParameter.getCustomParam("parentid");
+        Object flag = formShowParameter.getCustomParam("flag");
+        if (flag.equals("1")) {
+            Object qAsstacttype = formShowParameter.getCustomParam("q_asstacttype");
+            if (!("").equals(qAsstacttype)) {
+                this.getModel().setValue("q_asstacttype",qAsstacttype);
+            }
+        }
+
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+    }
+}

+ 49 - 0
src/main/java/fi/ar/formplugin/EarlyWarnHandlerPlugin.java

@@ -0,0 +1,49 @@
+package fi.ar.formplugin;
+
+import com.alibaba.druid.support.logging.Log;
+import com.alibaba.druid.support.logging.LogFactory;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.earlywarn.EarlyWarnContext;
+import kd.bos.entity.earlywarn.warn.EarlyWarnMessageInfo;
+import kd.bos.entity.earlywarn.warn.YzjPublicNumberInfo;
+import kd.bos.entity.earlywarn.warn.plugin.IEarlyWarnMessageHandler;
+import kd.bos.service.earlywarn.impl.DefaultWarnMessageHandler;
+import kd.bos.url.UrlService;
+
+import java.util.List;
+
+/**
+ * @author cjz
+ * @date 2024/10/10 17:42
+ * @description:预警自定义消息插件,设置跳转的报表url
+ */
+public class EarlyWarnHandlerPlugin implements IEarlyWarnMessageHandler {
+    private final Log logger= LogFactory.getLog(DefaultWarnMessageHandler.class);
+    private String clientPath="";//客户端地址
+    private String formId = "";//pc端表单标识
+
+
+    @Override
+    public EarlyWarnMessageInfo singleMessageBuilder(DynamicObject dynamicObject, EarlyWarnContext earlyWarnContext) {
+        RequestContext ctx = RequestContext.get();
+        this.clientPath = UrlService.getDomainContextUrlByTenantCode(ctx.getTenantCode());//拿到完整的客户端网址
+        this.formId = earlyWarnContext.getEarlyWarn().getDataSourceId();//表单标识
+        EarlyWarnMessageInfo info = new EarlyWarnMessageInfo();
+        String pkId = dynamicObject.get("id").toString();//对应单据的内码
+        String contentUrl = clientPath+"?formId="+formId+"&pkId="+pkId+"&flag=1";//pc端跳转单据路径
+        info.setContentUrl(contentUrl);
+        return info;
+    }
+
+
+    @Override
+    public EarlyWarnMessageInfo mergeMessageBuilder(EarlyWarnContext earlyWarnContext) {
+        return null;
+    }
+
+    @Override
+    public YzjPublicNumberInfo getYZJMessagePublicNumber(List<YzjPublicNumberInfo> publicNumberInfos) {
+        return IEarlyWarnMessageHandler.super.getYZJMessagePublicNumber(publicNumberInfos);
+    }
+}

+ 64 - 0
src/main/java/fi/ar/formplugin/FinarbillFormPlugin.java

@@ -0,0 +1,64 @@
+package fi.ar.formplugin;
+
+import com.alibaba.druid.util.StringUtils;
+import kd.bos.bill.BillShowParameter;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.form.*;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.ClosedCallBackEvent;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.list.ListShowParameter;
+import kd.bos.report.ReportShowParameter;
+import kd.bos.report.plugin.AbstractReportFormPlugin;
+import kd.imc.sim.formplugin.report.AbstractReportPlugin;
+import kd.sdk.plugin.Plugin;
+
+import java.util.EventObject;
+
+/**
+ * @author cjz
+ * @date 2024/10/11 14:50
+ * @description:跳转到报表
+ */
+public class FinarbillFormPlugin extends AbstractFormPlugin implements Plugin {
+
+
+    //初始化自动点击跳转按钮
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        Object flag = this.getView().getFormShowParameter().getCustomParam("flag");
+        //如果为预警跳转的页面则自动点击跳转按钮到报表
+        if (("1").equals(flag)) {
+            //获取当前单据
+            DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+            Long id=dynamicObject.getLong("id");
+            //往来类型
+            String asstacttype=dynamicObject.getString("asstacttype");
+            ReportShowParameter showParameter = new ReportShowParameter();
+            //设置参数传给子界面
+            showParameter.setCustomParam("parentid",id);
+            showParameter.setCustomParam("flag","1");
+            showParameter.setCustomParam("q_asstacttype","bd_supplier");
+            showParameter.setFormId("ar_acctagerpt_n");
+            showParameter.setCaption("账龄分析表");
+            showParameter.getOpenStyle().setShowType(ShowType.Modal);
+            StyleCss inlineStyleCss = new StyleCss();
+            inlineStyleCss.setHeight("1800");
+            inlineStyleCss.setWidth("1500");
+            showParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss);
+            showParameter.setCloseCallBack(new CloseCallBack(this,"ar_acctagerpt_n"));
+            this.getView().showForm(showParameter);
+        }
+    }
+
+    @Override
+    public void closedCallBack(ClosedCallBackEvent e) {
+        super.closedCallBack(e);
+        if (StringUtils.equals("ar_acctagerpt_n",e.getActionId())) {
+            this.getModel().setDataChanged(false);
+            this.getView().close();
+        }
+    }
+}

+ 61 - 0
src/main/java/fi/em/formPlugin/BxdF7ListtenerFromPlugin.java

@@ -0,0 +1,61 @@
+package fi.em.formPlugin;
+
+import kd.bos.bill.AbstractBillPlugIn;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.exception.KDBizException;
+import kd.bos.form.field.BasedataEdit;
+import kd.bos.form.field.events.BeforeF7SelectEvent;
+import kd.bos.form.field.events.BeforeF7SelectListener;
+import kd.bos.list.ListShowParameter;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.EventObject;
+import java.util.HashSet;
+import java.util.Map;
+
+public class BxdF7ListtenerFromPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
+    private final static String paycompany="paycompany";//支付组织
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        // 侦听基础资料字段的事件
+        BasedataEdit fieldEdit1 = this.getView().getControl(paycompany);
+        fieldEdit1.addBeforeF7SelectListener(this);
+    }
+    @Override
+    public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
+        String fieldKey = beforeF7SelectEvent.getProperty().getName();
+        int row = beforeF7SelectEvent.getRow();
+        if (StringUtils.equals(fieldKey, paycompany)){
+            this.getQFilter(beforeF7SelectEvent,paycompany);
+        }
+    }
+    private void getQFilter(BeforeF7SelectEvent arg0, String type) {
+        if (type.equals(paycompany)) {
+            DynamicObject fkdata = (DynamicObject)this.getModel().getValue("costcompany") ;
+            if(fkdata ==null){
+                throw new KDBizException("费用承担组织为空!");
+            }
+            long orgid = fkdata.getLong("id");
+            QFilter banks = new QFilter("fromorg.id", QCP.equals, orgid);
+            banks.and("typerelation.id", QCP.equals, Long.valueOf("633138469186574336"));
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bos_org_orgrelation", new QFilter[]{banks});
+            HashSet<Long> objects = new HashSet<>();
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
+                //当前单头
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
+                DynamicObject fromorg1 = dynamicObject.getDynamicObject("toorg");
+                long id = fromorg1.getLong("id");
+                objects.add(id);
+            }
+            QFilter nckd_skzjFilter = new QFilter("id", QCP.in,objects);
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(nckd_skzjFilter);
+        }
+    }
+}

+ 44 - 20
src/main/java/fi/em/formPlugin/CostAllocationEditPlugin.java

@@ -140,24 +140,48 @@ public class CostAllocationEditPlugin extends AbstractListPlugin implements Plug
         this.getView().showForm(ShowParameter);
     }
 
-//    @Override
-//    public void propertyChanged(PropertyChangedArgs e) {
-//        super.beforePropertyChanged(e);
-//        String name = e.getProperty().getName();//获取字段标识
-//        if ("nckd_textfield2".equals(name)) {
-//            ChangeData[] changeSet = e.getChangeSet();//获取值
-//            for (ChangeData changeData : changeSet) {
-//                int rowIndex = changeData.getRowIndex();
-//                Object newValue = changeData.getNewValue();
-//                Object oldValue = changeData.getOldValue();
-//                String nckdTextfield2 = this.getModel().getValue("nckd_textfield2", rowIndex).toString();
-//                QFilter nckd_orgamountFilter = new QFilter("im_purinbill.billentry.lotnumber", QCP.equals,nckdTextfield2);
-//                //组织实体
-//                DynamicObject im_purinbill = BusinessDataServiceHelper.loadSingle("im_purinbill","id,billentry.price",new QFilter[] {nckd_orgamountFilter});
-//                BigDecimal price = im_purinbill.getBigDecimal("price");
-//                this.getModel().setValue("nckd_pricefield1", price, rowIndex);
-//
-//            }
-//        }
-//    }
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.beforePropertyChanged(e);
+        String name = e.getProperty().getName();//获取字段标识
+        if ("tripstdshow".equals(name)) {
+            ChangeData[] changeSet = e.getChangeSet();//获取值
+            for (ChangeData changeData : changeSet) {
+                int rowIndex = changeData.getRowIndex();
+                Object newValue = changeData.getNewValue();
+                Object oldValue = changeData.getOldValue();
+                String nckdAmountfield4 = this.getModel().getValue("approveamount").toString();
+                BigDecimal bigDecimal = new BigDecimal(nckdAmountfield4);
+                BigDecimal bigDecimal1 = new BigDecimal(0);
+                DynamicObjectCollection nckdClearloanentry = this.getModel().getEntryEntity("nckd_clearloanentry");
+                for(int i=0;i<nckdClearloanentry.size();i++){
+                    DynamicObject dynamicObject = nckdClearloanentry.get(i);
+                    BigDecimal nckdUnexporiusedamount = dynamicObject.getBigDecimal("nckd_unexporiusedamount");
+                    bigDecimal1=bigDecimal1.add(nckdUnexporiusedamount);
+                }
+                if(bigDecimal1.compareTo(bigDecimal) == 1){
+                    DynamicObjectCollection accountentry = this.getModel().getEntryEntity("accountentry");
+                    DynamicObject dynamicObject = accountentry.get(0);
+                    if(dynamicObject!=null){
+                        this.getModel().setValue("orireceiveamount",new BigDecimal(0),0);
+
+                    }
+                } else if (bigDecimal1.compareTo(bigDecimal) == 0) {
+                    DynamicObjectCollection accountentry = this.getModel().getEntryEntity("accountentry");
+                    DynamicObject dynamicObject = accountentry.get(0);
+                    if(dynamicObject!=null){
+                        this.getModel().setValue("orireceiveamount",new BigDecimal(0),0);
+                    }
+                }else {
+                    DynamicObjectCollection accountentry = this.getModel().getEntryEntity("accountentry");
+                    DynamicObject dynamicObject = accountentry.get(0);
+                   if(dynamicObject!=null){
+                       bigDecimal=bigDecimal.subtract(bigDecimal1);
+                       this.getModel().setValue("orireceiveamount",bigDecimal,0);
+
+                   }
+                }
+            }
+        }
+    }
 }

+ 75 - 0
src/main/java/fi/em/formPlugin/SalaryBankNumEditPlugin.java

@@ -0,0 +1,75 @@
+package fi.em.formPlugin;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+
+/**
+ * @author cjz
+ * @date 2024/10/25 16:37
+ * @description:根据人力薪酬分录自动带出人员银行账户
+ */
+public class SalaryBankNumEditPlugin extends AbstractFormPlugin {
+
+    private static String nckd_sae_jobid="nckd_sae_jobid";//人力薪酬一般员工工号标识
+    private static String nckd_sae_banknumber="nckd_sae_banknumber";//人力薪酬一般员工银行账号标识
+    private static String nckd_see_jobid="nckd_see_jobid";//人力薪酬内退工号标识
+    private static String nckd_see_banknumber="nckd_see_banknumber";//人力薪酬内退银行账号标识
+    private static String nckd_salaryentry="nckd_salaryentry";//人力薪酬一般员工分录标识
+    private static String nckd_salaryentryre="nckd_salaryentryre";//人力薪酬内退分录标识
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.beforePropertyChanged(e);
+        String name = e.getProperty().getName();//获取字段标识
+        //获取当前单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        //人力薪酬一般员工工号带出银行账号
+        if (nckd_sae_jobid.equals(name)) {
+            //人力一般分录
+            DynamicObjectCollection dynamicObjectCollection=dynamicObject.getDynamicObjectCollection(nckd_salaryentry);
+            for (DynamicObject item:dynamicObjectCollection) {
+                //人力一般工号
+                String sae_jobid=item.getString(nckd_sae_jobid);
+                QFilter qFilter=new QFilter("nckd_payeenum.number", QCP.equals,sae_jobid);
+                //数据状态为启用
+                qFilter.and("nckd_datastatus",QCP.equals,"A");
+                //查询员工收款信息表
+                DynamicObject dynamicObjects= BusinessDataServiceHelper
+                        .loadSingle("nckd_payinformation","id,nckd_payaccount",new QFilter[]{qFilter});
+                //存在数据则设值
+                if (dynamicObjects!=null) {
+                    //设置银行账号
+                    this.getModel().setValue(nckd_sae_banknumber,dynamicObjects.getString("nckd_payaccount"));
+                }
+            }
+        }
+
+        //人力薪酬内退工号带出银行账号
+        if (nckd_see_jobid.equals(name)) {
+            //人力内退分录
+            DynamicObjectCollection dynamicObjectCollection=dynamicObject.getDynamicObjectCollection(nckd_salaryentryre);
+            for (DynamicObject item:dynamicObjectCollection) {
+                //人力一般工号
+                String sae_jobid=item.getString(nckd_see_jobid);
+                QFilter qFilter=new QFilter("nckd_payeenum.number", QCP.equals,sae_jobid);
+                //数据状态为启用
+                qFilter.and("nckd_datastatus",QCP.equals,"A");
+                //查询员工收款信息表
+                DynamicObject dynamicObjects= BusinessDataServiceHelper
+                        .loadSingle("nckd_payinformation","id,nckd_payaccount",new QFilter[]{qFilter});
+                //存在数据则设值
+                if (dynamicObjects!=null) {
+                    //设置银行账号
+                    this.getModel().setValue(nckd_see_banknumber,dynamicObjects.getString("nckd_payaccount"));
+                }
+            }
+        }
+    }
+
+
+}

+ 65 - 7
src/main/java/fi/em/formPlugin/YwclF7ListtenerFromPlugin.java

@@ -84,6 +84,10 @@ public class YwclF7ListtenerFromPlugin extends AbstractBillPlugIn implements Plu
         fieldEdit17.addBeforeF7SelectListener(this);
         BasedataEdit fieldEdit18 = this.getView().getControl(nckd_basedatafield6);
         fieldEdit18.addBeforeF7SelectListener(this);
+        BasedataEdit fieldEdit19 = this.getView().getControl(nckd_orgv);
+        fieldEdit19.addBeforeF7SelectListener(this);
+        BasedataEdit fieldEdit20 = this.getView().getControl(nckd_orgvs);
+        fieldEdit20.addBeforeF7SelectListener(this);
     }
 
     @Override
@@ -138,6 +142,12 @@ public class YwclF7ListtenerFromPlugin extends AbstractBillPlugIn implements Plu
         if (StringUtils.equals(fieldKey, nckd_basedatafield6)){
             this.getQFilterdczc(beforeF7SelectEvent,nckd_basedatafield6);
         }
+        if (StringUtils.equals(fieldKey, nckd_orgv)){
+            this.getQFilter(beforeF7SelectEvent,nckd_orgv);
+        }
+        if (StringUtils.equals(fieldKey, nckd_orgvs)){
+            this.getQFilter(beforeF7SelectEvent,nckd_orgvs);
+        }
     }
 
     private void getQFilter(BeforeF7SelectEvent arg0, String type) {
@@ -150,7 +160,54 @@ public class YwclF7ListtenerFromPlugin extends AbstractBillPlugIn implements Plu
             long orgid = skdata.getLong("id");
             QFilter nckd_skzjFilter = new QFilter("id", QCP.equals,orgid);
             data= BusinessDataServiceHelper.loadSingle("bos_org","id",new QFilter[] {nckd_skzjFilter});
-        } else if (type.equals(nckd_skzhs)) {
+            QFilter filter;
+            //给基础资料添加过滤
+            filter = new QFilter("acctstatus", QCP.equals, "normal");
+            filter.and("company.id", QCP.equals,data.getLong("id"));
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(filter);
+        } else if (type.equals(nckd_orgvs)) {
+            DynamicObject fkdata = (DynamicObject)this.getModel().getValue("nckd_orgfield") ;
+            if(fkdata ==null){
+                throw new KDBizException("核算组织为空!");
+            }
+            long orgid = fkdata.getLong("id");
+            QFilter banks = new QFilter("fromorg.id", QCP.equals, orgid);
+            banks.and("typerelation.id", QCP.equals, Long.valueOf("633138469186574336"));
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bos_org_orgrelation", new QFilter[]{banks});
+            HashSet<Long> objects = new HashSet<>();
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
+                //当前单头
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
+                DynamicObject fromorg1 = dynamicObject.getDynamicObject("toorg");
+                long id = fromorg1.getLong("id");
+                objects.add(id);
+            }
+            QFilter nckd_skzjFilter = new QFilter("id", QCP.in,objects);
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(nckd_skzjFilter);
+        }else if (type.equals(nckd_orgv)) {
+            DynamicObject fkdata = (DynamicObject)this.getModel().getValue("nckd_orgfield") ;
+            if(fkdata ==null){
+                throw new KDBizException("核算组织为空!");
+            }
+            long orgid = fkdata.getLong("id");
+            QFilter banks = new QFilter("fromorg.id", QCP.equals, orgid);
+            banks.and("typerelation.id", QCP.equals, Long.valueOf("633138469186574336"));
+            Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bos_org_orgrelation", new QFilter[]{banks});
+            HashSet<Long> objects = new HashSet<>();
+            for (Object idkey:nckd_cas_arbilMap.keySet()) {
+                //当前单头
+                DynamicObject dynamicObject = nckd_cas_arbilMap.get(idkey);
+                DynamicObject fromorg1 = dynamicObject.getDynamicObject("toorg");
+                long id = fromorg1.getLong("id");
+                objects.add(id);
+            }
+            QFilter nckd_skzjFilter = new QFilter("id", QCP.in,objects);
+            data= BusinessDataServiceHelper.loadSingle("bos_org","id",new QFilter[] {nckd_skzjFilter});
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(nckd_skzjFilter);
+        }else if (type.equals(nckd_skzhs)) {
             DynamicObject fkdata = (DynamicObject)this.getModel().getValue(nckd_orgvs) ;
             if(fkdata ==null){
                 throw new KDBizException("付款信息资金组织为空!");
@@ -158,13 +215,14 @@ public class YwclF7ListtenerFromPlugin extends AbstractBillPlugIn implements Plu
             long orgid = fkdata.getLong("id");
             QFilter nckd_skzjFilter = new QFilter("id", QCP.equals,orgid);
             data= BusinessDataServiceHelper.loadSingle("bos_org","id",new QFilter[] {nckd_skzjFilter});
+            QFilter filter;
+            //给基础资料添加过滤
+            filter = new QFilter("acctstatus", QCP.equals, "normal");
+            filter.and("company.id", QCP.equals,data.getLong("id"));
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(filter);
         }
-        QFilter filter;
-        //给基础资料添加过滤
-        filter = new QFilter("acctstatus", QCP.equals, "normal");
-        filter.and("company.id", QCP.equals,data.getLong("id"));
-        ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
-        showParameter.getListFilterParameter().setFilter(filter);
+
     }
     private void getQFilters(BeforeF7SelectEvent arg0, String type) {
         DynamicObject data = (DynamicObject)this.getModel().getValue("nckd_costcompany") ;

+ 3 - 4
src/main/java/fi/em/opplugin/AmountOpPlugin.java

@@ -10,6 +10,7 @@ import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
 import kd.bos.exception.KDBizException;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.AttachmentServiceHelper;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 
@@ -37,10 +38,8 @@ public class AmountOpPlugin extends AbstractOperationServicePlugIn {
             DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
              DynamicObjectCollection writeoffapply = info.getDynamicObjectCollection("writeoffapply");
             if(writeoffapply.size()<=0){
-                QFilter nckd_orgamountFilter = new QFilter("fbilltype", QCP.equals, "er_tripreimburse");
-                nckd_orgamountFilter.and("finterid", QCP.equals, info.getString("id"));
-                Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bos_attachment", new QFilter[]{nckd_orgamountFilter});
-                if(nckd_cas_arbilMap.size()<=0){
+                List<Map<String, Object>> attachments = AttachmentServiceHelper.getAttachments("er_tripreimbursebill", info.getLong("id"), "nckd_attachmentpanelsq", true);
+                if(attachments.size()<=0){
                     throw new KDBizException("请上传出差申请附件!");
                 }
             }

+ 4 - 5
src/main/java/fi/em/opplugin/ExpenseAccountFileOpPlugin.java

@@ -9,6 +9,7 @@ import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
 import kd.bos.exception.KDBizException;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.AttachmentServiceHelper;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 
 import java.math.BigDecimal;
@@ -27,12 +28,10 @@ public class ExpenseAccountFileOpPlugin extends AbstractOperationServicePlugIn {
             JSONObject object = new JSONObject();
             //当前单头数据包
             DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
-            DynamicObjectCollection writeoffapply = info.getDynamicObjectCollection("contractentry");
+            DynamicObjectCollection writeoffapply = info.getDynamicObjectCollection("writeoffapply");
             if(writeoffapply.size()<=0){
-                QFilter nckd_orgamountFilter = new QFilter("fbilltype", QCP.equals, "er_publicreimbursebill");
-                nckd_orgamountFilter.and("finterid", QCP.equals, info.getString("id"));
-                Map<Object, DynamicObject> nckd_cas_arbilMap = BusinessDataServiceHelper.loadFromCache("bos_attachment", new QFilter[]{nckd_orgamountFilter});
-                if(nckd_cas_arbilMap.size()<=0){
+                List<Map<String, Object>> attachments = AttachmentServiceHelper.getAttachments("er_publicreimbursebill", info.getLong("id"), "nckd_attachmentpanelsq", true);
+                if(attachments.size()<=0){
                     throw new KDBizException("请上传费用申请附件!");
                 }
             }

+ 90 - 0
src/main/java/fi/er/formPlugin/TripreimbursePlugin.java

@@ -0,0 +1,90 @@
+package fi.er.formPlugin;
+
+import com.alibaba.druid.util.StringUtils;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+public class TripreimbursePlugin extends AbstractFormPlugin {
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        String fieldKey = e.getProperty().getName();
+        if (StringUtils.equals("nckd_amountfield1", fieldKey)) {
+            ChangeData changeData = e.getChangeSet()[0];
+            BigDecimal newAmount = (BigDecimal) changeData.getNewValue();
+            BigDecimal oldAmount = (BigDecimal) changeData.getOldValue();
+            BigDecimal amount = newAmount.subtract(oldAmount);
+            DynamicObjectCollection entryentity = this.getModel().getEntryEntity("entryentity");
+            for (int i = 0; i < entryentity.size(); i++) {
+                if (entryentity.get(i).getDynamicObject("expenseitem").getString("number").equals("009")) {
+                    BigDecimal orientryamount = (BigDecimal) this.getModel().getValue("orientryamount", i);
+                    orientryamount = orientryamount.add(amount);
+                    this.getModel().setValue("orientryamount", orientryamount, i);
+                }
+            }
+        }else if (StringUtils.equals("nckd_daterangefield_enddate", fieldKey)) {
+            ChangeData changeData = e.getChangeSet()[0];
+            Date nckd_daterangefield_enddate = (Date) changeData.getNewValue();
+            if (nckd_daterangefield_enddate == null) {
+                this.getModel().setValue("nckd_amountfield2", null);
+            }else {
+                Date nckd_daterangefield_startdate = (Date) this.getModel().getValue("nckd_daterangefield_startdate");
+                SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
+                long differenceInMillies = nckd_daterangefield_enddate.getTime() - nckd_daterangefield_startdate.getTime();
+                long hoursDifference = TimeUnit.MILLISECONDS.toHours(differenceInMillies);
+                // 基础补助金额
+                long baseSubsidy = 60;
+                // 超过每小时补助10元
+                long additionalSubsidy = 10;
+                // 计算总补助
+                long totalSubsidy = 0;
+                if (hoursDifference >=  5) {
+                    totalSubsidy = baseSubsidy;
+                    // 计算超过5小时的部分
+                    long extraHours = hoursDifference - 5;
+                    totalSubsidy += additionalSubsidy * extraHours;
+                }
+                BigDecimal newAmount = BigDecimal.valueOf(totalSubsidy);
+                BigDecimal oldAmount = (BigDecimal) this.getModel().getValue("nckd_amountfield2") == null ? BigDecimal.ZERO : (BigDecimal) this.getModel().getValue("nckd_amountfield2");
+                BigDecimal amount = newAmount.subtract(oldAmount);
+                DynamicObjectCollection entryentity = this.getModel().getEntryEntity("entryentity");
+                for (int i = 0; i < entryentity.size(); i++) {
+                    if (entryentity.get(i).getDynamicObject("expenseitem").getString("number").equals("009")) {
+                        BigDecimal orientryamount = (BigDecimal) this.getModel().getValue("orientryamount", i);
+                        orientryamount = orientryamount.add(amount);
+                        this.getModel().setValue("orientryamount", orientryamount, i);
+                    }
+                }
+                this.getModel().setValue("nckd_amountfield2", newAmount);
+            }
+        }else if (StringUtils.equals("nckd_checkboxfield1", fieldKey)) {
+            ChangeData changeData = e.getChangeSet()[0];
+            boolean nckd_checkboxfield1 = (boolean) changeData.getNewValue();
+            if (!nckd_checkboxfield1) {
+                this.getModel().setValue("nckd_amountfield1", BigDecimal.ZERO);
+            }
+        }else if (StringUtils.equals("nckd_checkboxfield2", fieldKey)) {
+            ChangeData changeData = e.getChangeSet()[0];
+            boolean nckd_checkboxfield2 = (boolean) changeData.getNewValue();
+            if (!nckd_checkboxfield2) {
+                BigDecimal nckd_amountfield2 = (BigDecimal) this.getModel().getValue("nckd_amountfield2");
+                DynamicObjectCollection entryentity = this.getModel().getEntryEntity("entryentity");
+                for (int i = 0; i < entryentity.size(); i++) {
+                    if (entryentity.get(i).getDynamicObject("expenseitem").getString("number").equals("009")) {
+                        BigDecimal orientryamount = (BigDecimal) this.getModel().getValue("orientryamount", i);
+                        orientryamount = orientryamount.subtract(nckd_amountfield2);
+                        this.getModel().setValue("orientryamount", orientryamount, i);
+                    }
+                }
+                this.getModel().setValue("nckd_amountfield2", BigDecimal.ZERO);
+                this.getModel().setValue("nckd_daterangefield_startdate", null);
+                this.getModel().setValue("nckd_daterangefield_enddate", null);
+            }
+        }
+    }
+}

+ 220 - 0
src/main/java/fi/er/opplugin/TripreimburseOpPlugin.java

@@ -0,0 +1,220 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+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.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+
+public class TripreimburseOpPlugin extends AbstractOperationServicePlugIn {
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取报销单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            if (StringUtils.equals(e.getOperationKey(),"save")) {
+                DynamicObject info = dynamicObjects[i];
+                //反写预付借款单
+                DynamicObjectCollection nckd_clearloanentrys = info.getDynamicObjectCollection("nckd_clearloanentry");
+                Boolean exist = QueryServiceHelper.exists(info.getDynamicObjectType().getName(),  info.getPkValue());
+                if (!exist) {
+                    // 如果没有保存的信息,直接反写
+                    writeBackFinarbill(nckd_clearloanentrys);
+                }else {
+                    DynamicObject saveInfo = BusinessDataServiceHelper.loadSingle(info.getPkValue(), info.getDynamicObjectType().getName());
+                    DynamicObjectCollection saveClearloanentrys = saveInfo.getDynamicObjectCollection("nckd_clearloanentry");
+                    // 处理在 saveWriteoffmoneys 中但不在 writeoffmoneys 中的元素
+                    DynamicObjectCollection toDelete = getDifference(saveClearloanentrys, nckd_clearloanentrys);
+                    if (toDelete.size() != 0) {
+                        deleteBackFinarbill(toDelete);
+                    }
+                    // 处理在 writeoffmoneys 中但不在 saveWriteoffmoneys 中的元素
+                    DynamicObjectCollection toWriteBack = getDifference(nckd_clearloanentrys, saveClearloanentrys);
+                    if (toWriteBack.size() != 0) {
+                        writeBackFinarbill(toWriteBack);
+                    }
+                    // 获取在 writeoffmoneys 和 saveWriteoffmoneys 中都有的元素并执行反写
+                    DynamicObjectCollection commonItems = getCommonItems(nckd_clearloanentrys, saveClearloanentrys);
+                    if (commonItems.size() != 0) {
+                        commonBackFinarbill(commonItems);
+                    }
+                }
+            } else if (StringUtils.equals(e.getOperationKey(),"delete")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                DynamicObjectCollection writeoffmoneys = info.getDynamicObjectCollection("nckd_clearloanentry");
+                deleteBackFinarbill(writeoffmoneys);
+            }
+        }
+    }
+
+    public void writeBackFinarbill(DynamicObjectCollection writeoffmoneys) {
+        //报销单冲预付借款分录
+        for (DynamicObject writeoffmoney : writeoffmoneys) {
+            //预付借款单id
+            Long nckd_bigintfield2 = writeoffmoney.getLong("nckd_bigintfield2");
+            String sourcebillid = String.valueOf(nckd_bigintfield2);
+            //预付借款单预付借款信息分录id
+            Long srcofsrcentryid = writeoffmoney.getLong("nckd_bigintfield1");
+            //冲销金额
+            BigDecimal accloanamount = writeoffmoney.getBigDecimal("nckd_unexporiusedamount");
+            //查询应收挂账单
+            QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
+            DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
+            for (DynamicObject finarbill : finarbills) {
+                DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
+                //应收挂账单明细分录
+                DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
+                for (DynamicObject entry : entrys) {
+                    //预付借款单预付借款信息分录id
+                    Long e_srcentryid = entry.getLong("e_srcentryid");
+                    //销账金额
+                    BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
+                    //已结算金额
+                    BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
+                    //未结算金额
+                    BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
+                    //已结算金额(本位币)
+                    BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
+                    //未结算金额(本位币)
+                    BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
+                    if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
+                        entry.set("nckd_e_settledamt", nckd_e_settledamt.add(accloanamount));
+                        entry.set("e_settledamt", e_settledamt.add(accloanamount));
+                        entry.set("e_unsettleamt", e_unsettleamt.subtract(accloanamount));
+                    }
+                }
+                SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
+            }
+        }
+    }
+
+    public void deleteBackFinarbill(DynamicObjectCollection writeoffmoneys) {
+        //报销单冲预付借款分录
+        for (DynamicObject writeoffmoney : writeoffmoneys) {
+            //预付借款单id
+            Long nckd_bigintfield2 = writeoffmoney.getLong("nckd_bigintfield2");
+            String sourcebillid = String.valueOf(nckd_bigintfield2);
+            //预付借款单预付借款信息分录id
+            Long srcofsrcentryid = writeoffmoney.getLong("nckd_bigintfield1");
+            //冲销金额
+            BigDecimal accloanamount = writeoffmoney.getBigDecimal("nckd_unexporiusedamount");
+            //查询应收挂账单
+            QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
+            DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
+            for (DynamicObject finarbill : finarbills) {
+                DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
+                //应收挂账单明细分录
+                DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
+                for (DynamicObject entry : entrys) {
+                    //预付借款单预付借款信息分录id
+                    Long e_srcentryid = entry.getLong("e_srcentryid");
+                    //销账金额
+                    BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
+                    //已结算金额
+                    BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
+                    //未结算金额
+                    BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
+                    //已结算金额(本位币)
+                    BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
+                    //未结算金额(本位币)
+                    BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
+                    if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
+                        entry.set("nckd_e_settledamt", nckd_e_settledamt.subtract(accloanamount));
+                        entry.set("e_settledamt", e_settledamt.subtract(accloanamount));
+                        entry.set("e_unsettleamt", e_unsettleamt.add(accloanamount));
+                    }
+                }
+                SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
+            }
+        }
+    }
+
+    public void commonBackFinarbill(DynamicObjectCollection writeoffmoneys) {
+        //报销单冲预付借款分录
+        for (DynamicObject writeoffmoney : writeoffmoneys) {
+            //预付借款单id
+            Long nckd_bigintfield2 = writeoffmoney.getLong("nckd_bigintfield2");
+            String sourcebillid = String.valueOf(nckd_bigintfield2);
+            //预付借款单预付借款信息分录id
+            Long srcofsrcentryid = writeoffmoney.getLong("nckd_bigintfield1");
+            //冲销金额
+            BigDecimal nckd_amountfield13 = writeoffmoney.getBigDecimal("nckd_amountfield13");
+            //查询应收挂账单
+            QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
+            DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
+            for (DynamicObject finarbill : finarbills) {
+                DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
+                //应收挂账单明细分录
+                DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
+                for (DynamicObject entry : entrys) {
+                    //预付借款单预付借款信息分录id
+                    Long e_srcentryid = entry.getLong("e_srcentryid");
+                    //销账金额
+                    BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
+                    //已结算金额
+                    BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
+                    //未结算金额
+                    BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
+                    //已结算金额(本位币)
+                    BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
+                    //未结算金额(本位币)
+                    BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
+                    if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
+                        entry.set("nckd_e_settledamt", nckd_e_settledamt.add(nckd_amountfield13));
+                        entry.set("e_settledamt", e_settledamt.add(nckd_amountfield13));
+                        entry.set("e_unsettleamt", e_unsettleamt.subtract(nckd_amountfield13));
+                    }
+                }
+                SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
+            }
+        }
+    }
+
+    // 获取在 source 中但不在 target 中的元素集合
+    private DynamicObjectCollection getDifference(DynamicObjectCollection source, DynamicObjectCollection target) {
+        DynamicObjectCollection difference = new DynamicObjectCollection();
+        for (DynamicObject sourceItem : source) {
+            boolean existsInTarget = false;
+            for (DynamicObject targetItem : target) {
+                // 根据某个唯一标识符判断是否存在
+                if (sourceItem.getPkValue().equals(targetItem.getPkValue())) {
+                    existsInTarget = true;
+                    break;
+                }
+            }
+            if (!existsInTarget) {
+                difference.add(sourceItem);
+            }
+        }
+        return difference;
+    }
+
+    // 获取在 source 和 target 中都有的元素集合
+    private DynamicObjectCollection getCommonItems(DynamicObjectCollection source, DynamicObjectCollection target) {
+        DynamicObjectCollection commonItems = new DynamicObjectCollection();
+        for (DynamicObject sourceItem : source) {
+            for (DynamicObject targetItem : target) {
+                // 根据某个唯一标识符判断是否存在
+                if (sourceItem.getPkValue().equals(targetItem.getPkValue())) {
+                    BigDecimal sourceAmount = sourceItem.getBigDecimal("nckd_unexporiusedamount");
+                    BigDecimal targetAmount = targetItem.getBigDecimal("nckd_unexporiusedamount");
+                    BigDecimal nckd_amountfield13 = sourceAmount.subtract(targetAmount);
+                    if (nckd_amountfield13.compareTo(BigDecimal.ZERO) != 0) {
+                        sourceItem.set("nckd_amountfield13", nckd_amountfield13);
+                        commonItems.add(sourceItem);
+                        break; // 找到共同项后跳出内层循环
+                    }
+                }
+            }
+        }
+        return commonItems;
+    }
+}

+ 112 - 0
src/main/java/sys/sc/formplugin/PayInfoImportPlugin.java

@@ -0,0 +1,112 @@
+package sys.sc.formplugin;
+
+import com.grapecity.documents.excel.Q;
+import com.icbc.api.internal.util.internal.util.fastjson.JSON;
+import com.icbc.api.internal.util.internal.util.fastjson.JSONObject;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.api.ApiResult;
+import kd.bos.entity.plugin.ImportLogger;
+import kd.bos.form.plugin.impt.BatchImportPlugin;
+import kd.bos.form.plugin.impt.ImportBillData;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cjz
+ * @date 2024/10/25 9:38
+ * @description:引入数据前校验插件
+ */
+public class PayInfoImportPlugin extends BatchImportPlugin {
+
+    //保存前校验
+    @Override
+    protected ApiResult save(List<ImportBillData> rowdatas, ImportLogger logger) {
+        Iterator<ImportBillData> it = rowdatas.iterator();
+        //工号list
+        List<String> payeenumlist=new ArrayList<>();
+        //银行账号list
+        List<String> payaccountlist=new ArrayList<>();
+        //获取所有工号的list
+        for (ImportBillData item:rowdatas) {
+            Map<String,Object> billData = item.getData();
+            //收款人工号
+            String str=billData.get("nckd_payeenum").toString();
+            JSONObject jsonObject = JSON.parseObject(str);
+            String payeenum=jsonObject.getString("number");
+            //使用状态
+            String nckd_datastatus = (String) billData.get("nckd_datastatus");
+            payeenumlist.add(payeenum+nckd_datastatus);
+
+            //银行账号
+            String nckd_payaccount= (String) billData.get("nckd_payaccount");
+            payaccountlist.add(nckd_payaccount);
+
+        }
+        //文件校验
+        while (it.hasNext()) {
+            ImportBillData data = it.next();
+            Map<String,Object> billData = data.getData();
+            String temp = "";
+            //校验是否有银行账号重复
+            for (int i = 0; i <payeenumlist.size()-1; i++) {
+                temp = payeenumlist.get(i);
+                for (int j = i + 1; j < payeenumlist.size(); j++) {
+                    if (temp.equals(payeenumlist.get(j))) {
+                        String validMsg =("第" + (i + 1) + "行与第" + (j + 1) + "行重复,同一个工号不能有两条启用数据,值是:" + temp.substring(0,temp.length()-1));
+                        // 有校验提示,校验不通过,记录日志,移除数据
+                        logger.log(data.getStartIndex(), validMsg).fail();
+                        it.remove();
+                    }
+                }
+            }
+            //检验是否有相同的银行账号
+            String tmp="";
+            for (int i=0;i<payaccountlist.size();i++) {
+                tmp=payaccountlist.get(i);
+                for (int j=i+1;j< payaccountlist.size();j++) {
+                    if (tmp.equals(payaccountlist.get(j))) {
+                        String validMsg="第"+(i+1)+"行与第"+(j+1)+"行银行账号重复,值为"+tmp;
+                        logger.log(data.getStartIndex(),validMsg).fail();
+                        it.remove();
+                    }
+                }
+            }
+            //收款人工号
+            String str=billData.get("nckd_payeenum").toString();
+            JSONObject jsonObject = JSON.parseObject(str);
+            String payeenum=jsonObject.getString("number");
+            //使用状态
+            String nckd_datastatus = (String) billData.get("nckd_datastatus");
+            //与表中已存在的数据进行校验,相同工号只能有一个启用数据
+            QFilter qFilter=new QFilter("nckd_payeenum.number",QCP.equals,payeenum);
+            qFilter.and("nckd_datastatus",QCP.equals,nckd_datastatus);
+            DynamicObject[] dynamicObjects=BusinessDataServiceHelper
+                    .load("nckd_payinformation","id",new QFilter[]{qFilter});
+            if (dynamicObjects.length>0) {
+                String validMsg="同一个工号存在多个已启用的数据,工号为:"+payeenum;
+                logger.log(data.getStartIndex(),validMsg).fail();
+                it.remove();
+            }
+            //银行账号
+            String nckd_payaccount= (String) billData.get("nckd_payaccount");
+            payaccountlist.add(nckd_payaccount);
+            QFilter filter=new QFilter("nckd_payaccount",QCP.equals,nckd_payaccount);
+            DynamicObject[] dylist=BusinessDataServiceHelper
+                    .load("nckd_payinformation","id",new QFilter[]{filter});
+            if (dylist.length>0) {
+                String validMsg="存在相同的银行账号:"+nckd_payaccount;
+                logger.log(data.getStartIndex(),validMsg).fail();
+                it.remove();
+            }
+        }
+        return super.save(rowdatas, logger);
+    }
+
+
+}

+ 93 - 0
src/main/java/sys/sc/formplugin/PayInformationPlugin.java

@@ -0,0 +1,93 @@
+package sys.sc.formplugin;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.operate.AbstractOperate;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+
+/**
+ * @author cjz
+ * @date 2024/10/24 15:09
+ * @description:员工收款信息表(人力薪酬)
+ */
+public class PayInformationPlugin extends AbstractFormPlugin {
+
+    private static String nckd_payeenum="nckd_payeenum";//收款人工号标识
+    private static String nckd_adminnum="nckd_adminnum";//管理员工号标识
+    private static String bos_user="bos_user";//人员表标识
+
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.beforePropertyChanged(e);
+        String name = e.getProperty().getName();//获取字段标识
+        //获取当前单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        //选择收款人工号后自动带出收款人姓名
+        if (nckd_payeenum.equals(name))
+        {
+            ChangeData[] changeSet = e.getChangeSet();//获取值
+            ChangeData changeData = changeSet[0];
+            DynamicObject payObj= (DynamicObject) changeData.getNewValue();
+            QFilter filter=new QFilter("number", QCP.equals,payObj.get("number"));
+            DynamicObject payeeuser= BusinessDataServiceHelper.loadSingle(bos_user,QCP.equals,new QFilter[]{filter});
+            //设置收款人姓名
+            this.getModel().setValue("nckd_payeename",payeeuser);
+        }
+        //选择管理员工号后自动带出管理人姓名
+        if (nckd_adminnum.equals(name))
+        {
+            ChangeData[] changeSet = e.getChangeSet();//获取值
+            ChangeData changeData = changeSet[0];
+            DynamicObject payObj= (DynamicObject) changeData.getNewValue();
+            QFilter filter=new QFilter("number", QCP.equals,payObj.get("number"));
+            DynamicObject adminuser= BusinessDataServiceHelper.loadSingle(bos_user,QCP.equals,new QFilter[]{filter});
+            //设置收款人姓名
+            this.getModel().setValue("nckd_adminname",adminuser);
+        }
+
+    }
+
+    //保存前校验
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        AbstractOperate op = (AbstractOperate)args.getSource();
+        String operateKey = op.getOperateKey();
+        //获取当前单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        //获取工号
+        DynamicObject payeenumDy=dynamicObject.getDynamicObject("nckd_payeenum");
+        String payeenum=payeenumDy.getString("number");
+        //数据状态
+        String nckd_datastatus=dynamicObject.getString("nckd_datastatus");
+        //银行账号
+        String nckd_payaccount=dynamicObject.getString("nckd_payaccount");
+        //保存前加校验,每个工号只有一个启用数据
+        if ("bar_save".equals(operateKey)) {
+            //工号启用校验
+            QFilter qFilter=new QFilter("nckd_payeenum.number",QCP.equals,payeenum);
+            qFilter.and("nckd_datastatus",QCP.equals,nckd_datastatus);
+            DynamicObject[] dynamicObjects=BusinessDataServiceHelper
+                    .load("nckd_payinformation","id",new QFilter[]{qFilter});
+            if (dynamicObjects.length>0) {
+                this.getView().showMessage("同一个工号存在多个已启用的数据,工号为:"+payeenum);
+                //取消保存操作
+                args.setCancel(true);
+            }
+            //银行账号校验
+            QFilter filter=new QFilter("nckd_payaccount",QCP.equals,nckd_payaccount);
+            DynamicObject[] dylist=BusinessDataServiceHelper
+                    .load("nckd_payinformation","id",new QFilter[]{filter});
+            if (dylist.length>0) {
+                this.getView().showMessage("存在相同的银行账号:"+nckd_payaccount);
+                //取消保存操作
+                args.setCancel(true);
+            }
+        }
+    }
+}

+ 3 - 11
src/main/java/sys/sc/formplugin/TestPlugin.java

@@ -70,10 +70,6 @@ public class TestPlugin  extends AbstractListPlugin {
         //转换日期格式
         SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
         String datestr=sf.format(newDate);
-        //真实路径
-        if (nckd_url.equals("/var/appstatic/")) {
-            nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/";
-        }
         //文件完整路径
         String realPath = nckd_url+datestr+File.separator+nckd_filename;
         return realPath;
@@ -88,7 +84,7 @@ public class TestPlugin  extends AbstractListPlugin {
                     "nckd_employeeid", "nckd_name", "nckd_gender", "nckd_nl", "nckd_zzmm",
                     "nckd_zgxl", "nckd_szdwname", "nckd_szdwcode", "nckd_orgidname", "nckd_orgidcode",
                     "nckd_yjbmname", "nckd_yjbmcode", "nckd_posidname", "nckd_posidcode", "nckd_yggxlb",
-                    "nckd_status", "nckd_sjh"
+                    "nckd_status","nckd_sjh"
             );
             List<DynamicObject> createdataList = new ArrayList<>();
             List<DynamicObject> updatedataList = new ArrayList<>();
@@ -107,10 +103,6 @@ public class TestPlugin  extends AbstractListPlugin {
                     line = line.replace("|$|", "");
                     //空格符号,根据这个符号分割
                     String[] fields = line.split("\u0001",-1);
-                    //如果获取的数据行不等于预设字段的行,则跳过这行数据
-//                    if (fields.length != selector.size()) {
-//                        continue;
-//                    }
                     //获取工号
                     String gonghao = fields[0];
                     boolean isUpdated = false;
@@ -584,7 +576,7 @@ public class TestPlugin  extends AbstractListPlugin {
         }
         //生成数据
         else if ("scsj".equals(e.getOperateKey())) {//从文件读取数据插入基础资料
-            generateDataFile(filePath);
+            generateDataFile("D:/test.dat");
 //            try {
 //                generateDataFile(getFileUrl("organduserurl"));
 //
@@ -874,7 +866,7 @@ public class TestPlugin  extends AbstractListPlugin {
                 //客户号
                 data.set("number",dataList.getString("nckd_cust_id"));
                 //客户名
-                data.set("name",dataList.getString("nckd_cust_id"));
+                data.set("name",dataList.getString("nckd_cust_name"));
                 //设置状态为可用
                 data.set("enable","1");
                 //设置状态为已审核

+ 9 - 5
src/main/java/sys/sc/task/UpdateBankDailyTask.java

@@ -67,7 +67,7 @@ public class UpdateBankDailyTask extends AbstractTask {
             List<DynamicObject> createdataList = new ArrayList<>();
             List<DynamicObject> updatedataList = new ArrayList<>();
             //文件路径
-            String fileurl = getFileUrl();
+            String fileurl = getFileUrl("hmhhurl");
             //基础资料
             DynamicObjectType dynamicObjectType = EntityMetadataCache.getDataEntityType(bd_bebank);
             //国家基础资料(中国)
@@ -186,12 +186,15 @@ public class UpdateBankDailyTask extends AbstractTask {
     }
 
     //根据接口配置信息获取组织人员,拼接服务器文件路径url,参数为urlcode接口配置信息编码
-    public String getFileUrl()
+    public String getFileUrl(String urlcode)
     {
+        //组织人员接口配置信息获取
+        DynamicObject nckd_jkpzxx= BusinessDataServiceHelper
+                .loadSingle("nckd_jkpzxx", new QFilter[]{new QFilter("number", "=", urlcode)});
         //取文件名
-        String nckd_filename=interFaceImgUtils.getFileName();
+        String nckd_filename= nckd_jkpzxx.getString("nkcd_filename");
         //获取文件路径
-        String nckd_url=interFaceImgUtils.getServerUrl();
+        String nckd_url=nckd_jkpzxx.getString("nckd_url");
         //当前日期
         Date currentDate=new Date();
         Calendar calendar = Calendar.getInstance();
@@ -203,7 +206,8 @@ public class UpdateBankDailyTask extends AbstractTask {
         SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
         String datestr=sf.format(newDate);
         //文件路径拼接
-        String realPath = nckd_url+datestr+"/"+nckd_filename;
+        //文件完整路径
+        String realPath = nckd_url+datestr+"/"+nckd_filename+"_"+datestr+".dat";
         return realPath;
     }
 }

+ 4 - 1
src/main/java/sys/sc/task/UpdateDataDailyTask.java

@@ -433,6 +433,9 @@ public class UpdateDataDailyTask extends AbstractTask {
                 userinfo.set("pswstrategy", "338333884850648064");
                 userinfo.set("psweffectivedate", new Date());
                 userinfo.set("useenddate", c.getTime());
+                userinfo.set("creator","1");
+                userinfo.set("modifier","1");
+                userinfo.set("usertype","1");
                 // 设置姓名和拼音
                 String name = personData.getString("nckd_name");
                 userinfo.set("name", name);
@@ -512,7 +515,7 @@ public class UpdateDataDailyTask extends AbstractTask {
         String datestr=sf.format(newDate);
         //文件路径拼接
         //真实路径
-        String realPath = nckd_url+datestr+File.separator+nckd_filename;
+        String realPath = nckd_url+datestr+"/"+nckd_filename+"_"+datestr+".dat";
         return realPath;
     }
     @Override

+ 7 - 10
src/main/java/sys/sc/task/UpdateImpairmentDailyTask.java

@@ -18,6 +18,7 @@ import sys.sc.opplugin.utils.InterFaceImgUtils;
 import sys.sc.opplugin.utils.SftpClient;
 
 import java.io.*;
+import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -72,17 +73,15 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
             DynamicObject[] existingData = BusinessDataServiceHelper
                     .load(dynamicObjectType.getName(), String.join(",", selector) + ",nckd_isdelete", new QFilter[]{filter});
             Set<String> processeddubilidSet = new HashSet<>();
-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(sftpClient.fileInputStream(filelocation)))) {
+            //设置编码格式
+            InputStreamReader isr=new InputStreamReader(sftpClient.fileInputStream(filelocation),StandardCharsets.UTF_8);
+            try (BufferedReader reader = new BufferedReader(isr)) {
                 String line;
                 while ((line = reader.readLine()) != null) {
                     //去掉换行符|$|
                     line = line.replace(endsign, "");
                     //空格符号,根据这个符号分割
                     String[] fields = line.split(splitsign,-1);
-                    //如果获取的数据行不等于预设字段的行,则跳过这行数据
-//                    if (fields.length != selector.size()) {
-//                        continue;
-//                    }
                     //获取单据号
                     String dubil_id = fields[0];
                     DynamicObject data;
@@ -101,21 +100,19 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
             sftpClient.disconnect();
             //读取的文件数据转化成DynamicObject
             DynamicObject[] dynamicObjectlist=createdataList.toArray(new DynamicObject[0]);
+            //删除所有的数据,再新增
+            DeleteServiceHelper.delete(dynamicObjectType.getName(),null);
             //新增数据不为空则更新到数据库中
             if (!createdataList.isEmpty()) {
                 //转换list为DynamicObject类型
                 SaveServiceHelper.save(dynamicObjectType,dynamicObjectlist);
             }
-            //删除所有的数据,再新增
-            DeleteServiceHelper.delete(dynamicObjectType.getName(),null);
             log.info("-----------------------减值数据已成功保存---------------------");
             custSave(dynamicObjectlist);
             log.info("------------------------客户数据已成功保存----------------------");
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-
-
     }
 
     @Override
@@ -143,7 +140,7 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
         SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
         String datestr=sf.format(newDate);
         //文件完整路径
-        String realPath = nckd_url+datestr+ File.separator+nckd_filename;
+        String realPath = nckd_url+datestr+"/"+nckd_filename+"_"+datestr+".dat";
         return realPath;
     }