Explorar el Código

费用分摊单

徐昊 hace 9 meses
padre
commit
fbe4554b05

+ 116 - 22
src/main/java/fi/em/editPlugin/BusinessProcessingEditPlugin.java

@@ -1,5 +1,7 @@
 package fi.em.editPlugin;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.exception.KDBizException;
@@ -7,50 +9,63 @@ import kd.bos.form.CloseCallBack;
 import kd.bos.form.FormShowParameter;
 import kd.bos.form.ShowType;
 import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.ClosedCallBackEvent;
 import kd.bos.list.plugin.AbstractListPlugin;
+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.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
 
 public class BusinessProcessingEditPlugin extends AbstractListPlugin implements Plugin {
-    public static String btn_NOTICE = "fkf"; //操作
-    public static String btn_NOTICES = "skf"; //操作
+    public static String btn_cysgzmx = "cysgzmx"; //冲应收挂账
+    public static String btn_cyfgzmx = "cyfgzmx"; //操作
     public static String nckd_agentparameterf7 = "nckd_ywclskf";//动态列表
     private static String bos_org = "bos_org"; //组织金额标识
 
     @Override
     public void afterDoOperation(AfterDoOperationEventArgs e) {
         String operateKey = e.getOperateKey();
-        if (btn_NOTICE.equals(e.getOperateKey())) {
-            Object value = this.getModel().getValue("nckd_costcompany");//获取当前单据费用公司
-            DynamicObject entrycostcompanyWait = (DynamicObject)value;
-            String orgnumber = entrycostcompanyWait.getString("number");//公司编码
-            String orgid = entrycostcompanyWait.getString("id");//公司id
-            if (orgnumber == null){
-                throw new KDBizException("费用承担公司为空!");
+        if (btn_cysgzmx.equals(e.getOperateKey())) {
+            Object value = this.getModel().getValue("nckd_payeenamev");//获取当前单据付款人
+            String payeenamev = value.toString();//当前单据付款人
+            if (payeenamev == null){
+                throw new KDBizException("收款处理付款人为空!");
             }
-            showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
-        }else if (btn_NOTICES.equals(e.getOperateKey())) {
-            Object value = this.getModel().getValue("nckd_costcompany");//获取当前单据费用公司
-            DynamicObject entrycostcompanyWait = (DynamicObject)value;
-            String orgnumber = entrycostcompanyWait.getString("number");//公司编码
-            String orgid = entrycostcompanyWait.getString("id");//公司id
-            if (orgnumber == null){
-                throw new KDBizException("付费承担公司为空!");
+            nckd_agentparameterf7="nckd_cyfgzmxf7";
+            showParameter(nckd_agentparameterf7, btn_cysgzmx,payeenamev,btn_cysgzmx);//调用弹出页面
+        }else if (btn_cyfgzmx.equals(e.getOperateKey())) {
+            Object value = this.getModel().getValue("nckd_payeenamevs");//获取当前单据付款人
+            DynamicObject dynamicObject = (DynamicObject)value;
+            String payeenamev = dynamicObject.getString("billno");//当前单据付款供应商编码
+            if (payeenamev == null){
+                throw new KDBizException("付款处理付款人为空!");
             }
-            showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
+            nckd_agentparameterf7="nckd_cysgzmxf7";
+            showParameter(nckd_agentparameterf7, btn_cysgzmx,payeenamev,btn_cyfgzmx);//调用弹出页面
         }
     }
 
-    public void showParameter(String formId, String actionId,String orgnumber,String orgid) {
+    public void showParameter(String formId, String actionId,String payeenamev,String controls) {
         //创建弹出页面对象,FormShowParameter表示弹出页面为动态表单
         FormShowParameter ShowParameter = new FormShowParameter();
         //ListShowParameter ShowParameter = new ListShowParameter();
-        ShowParameter.setCustomParam("orgnumber", orgnumber);
-        ShowParameter.setCustomParam("orgid", orgid);
+        ShowParameter.setCustomParam("payeenamev", payeenamev);
+        ShowParameter.setCustomParam("controls", controls);
+        ShowParameter.setCustomParam("billtype", formId);
         //设置弹出页面的编码
         ShowParameter.setFormId(formId);
 //        ShowParameter.setCaption();
         //设置弹出页面标题
-        ShowParameter.setCaption("动因参数选择");
+        if("cysgzmx".equals(actionId)){
+            ShowParameter.setCaption("冲应收挂账");
+        } else if ("cyfgzmx".equals(actionId)) {
+            ShowParameter.setCaption("冲应付挂账");
+        }
         //设置页面关闭回调方法
         //CloseCallBack参数:回调插件,回调标识  btnok
         ShowParameter.setCloseCallBack(new CloseCallBack(this, actionId));
@@ -59,4 +74,83 @@ public class BusinessProcessingEditPlugin extends AbstractListPlugin implements
         //弹出页面对象赋值给父页面
         this.getView().showForm(ShowParameter);
     }
+    @Override
+    public void closedCallBack(ClosedCallBackEvent e) {
+        super.closedCallBack(e);
+        if (StringUtils.equals(btn_cysgzmx, e.getActionId()) && null != e.getReturnData()) {
+            String billtype="";
+            String controls="";
+            //父页面返回参数
+            HashMap<String, String> returnData = (HashMap<String, String>) e.getReturnData();
+            String reJaStr = returnData.get("reJaStr");
+            //判断空
+            if (StringUtils.isNotBlank(reJaStr)) {
+                JSONArray reJa = JSONArray.parseArray(reJaStr);//返回信息数组
+                //循环返回数组插入分录
+                for(int i =0;i<reJa.size();i++){
+                    //当前循环行
+                    JSONObject reJo = reJa.getJSONObject(i);
+                    billtype = reJo.getString("billtype");
+                    controls = reJo.getString("controls");
+                    if(btn_cysgzmx.equals(controls)){
+                    //删除分录信息
+                    this.getModel().deleteEntryData(billtype);
+                    String billno = reJo.getString("nckd_cysnumber");
+                    String cysorgnumber = reJo.getString("nckd_cysorg");
+                    QFilter applyorgFilter = new QFilter("number", QCP.equals,cysorgnumber);
+                    applyorgFilter.and("enable", QCP.equals,"1");
+                    //组织实体
+                    DynamicObject applyorgaccount = BusinessDataServiceHelper.loadSingle("bos_org","id",new QFilter[] {applyorgFilter});
+                    //往来单位
+                    String wldw = reJo.getString("nckd_cyswldw");
+                    QFilter wldwFilter = new QFilter("name", QCP.like,wldw);
+                    DynamicObject[] wldwDynamicObject = BusinessDataServiceHelper.load("nckd_cas_arbill","id,number",new QFilter[] {wldwFilter});
+                    DynamicObject wldwDynamicObjects = BusinessDataServiceHelper.loadSingle(wldwDynamicObject[0].getPkValue(), wldwDynamicObject[0].getDynamicObjectType().getName());
+                    Date bizdate = reJo.getDate("nckd_cysdata");
+                    BigDecimal settleamount = reJo.getBigDecimal("nckd_cysgzbalance");
+                    //新增分录行
+                    int rowIndex = this.getModel().createNewEntryRow(billtype);
+                    //set分录字段
+                    this.getModel().setValue("nckd_cysnumber", billno, rowIndex);
+                    this.getModel().setValue("nckd_cysorg", applyorgaccount, rowIndex);
+                    this.getModel().setValue("nckd_cyssection", applyorgaccount, rowIndex);
+                    this.getModel().setValue("nckd_cyswldw", wldwDynamicObjects, rowIndex);
+                    this.getModel().setValue("nckd_cysdata", bizdate, rowIndex);
+                    this.getModel().setValue("nckd_cysgzbalance", settleamount, rowIndex);
+                    this.getModel().setValue("nckd_cyscxbalance", settleamount, rowIndex);
+
+                    //刷新分录
+                     this.getView().updateView(billtype);
+                    } else if (btn_cyfgzmx.equals(controls)) {
+                        //删除分录信息
+                        this.getModel().deleteEntryData(billtype);
+                        String billno = reJo.getString("nckd_cyfnumber");
+                        String cysorgnumber = reJo.getString("nckd_cyforg");
+                        QFilter applyorgFilter = new QFilter("number", QCP.equals,cysorgnumber);
+                        applyorgFilter.and("enable", QCP.equals,"1");
+                        //组织实体
+                        DynamicObject applyorgaccount = BusinessDataServiceHelper.loadSingle("bos_org","id",new QFilter[] {applyorgFilter});
+                        //往来单位
+                        String wldw = reJo.getString("nckd_cyfwldw");
+                        QFilter wldwFilter = new QFilter("name", QCP.like,wldw);
+                        DynamicObject[] wldwDynamicObject = BusinessDataServiceHelper.load("nckd_cas_arbill","id,number",new QFilter[] {wldwFilter});
+                        DynamicObject wldwDynamicObjects = BusinessDataServiceHelper.loadSingle(wldwDynamicObject[0].getPkValue(), wldwDynamicObject[0].getDynamicObjectType().getName());
+                        Date bizdate = reJo.getDate("nckd_cyfdata");
+                        BigDecimal settleamount = reJo.getBigDecimal("nckd_cyfgzbalance");
+                        //新增分录行
+                        int rowIndex = this.getModel().createNewEntryRow(billtype);
+                        //set分录字段
+                        this.getModel().setValue("nckd_cyfnumber", billno, rowIndex);
+                        this.getModel().setValue("nckd_cyforg", applyorgaccount, rowIndex);
+                        this.getModel().setValue("nckd_cyfwldw", wldwDynamicObjects, rowIndex);
+                        this.getModel().setValue("nckd_cyfdata", bizdate, rowIndex);
+                        this.getModel().setValue("nckd_cyfgzbalance", settleamount, rowIndex);
+                        this.getModel().setValue("nckd_cyfcxbalance", settleamount, rowIndex);
+                        //刷新分录
+                        this.getView().updateView(billtype);
+                    }
+                }
+            }
+        }
+    }
 }

+ 252 - 0
src/main/java/fi/em/formPlugin/BusinessProcessingPlugin.java

@@ -0,0 +1,252 @@
+package fi.em.formPlugin;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.serialization.SerializationUtils;
+import kd.bos.exception.KDBizException;
+import kd.bos.form.control.Control;
+import kd.bos.form.control.EntryGrid;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+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.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plugin {
+    private final static String KEY_OK = "btnok";//页面取消按钮标识
+    private final static String KEY_CANCEL = "btncancel";//页面取消按钮标识
+    private final static String KEY_SEARCH = "search";//动态表单查询按钮操作
+    private final static String FORMID_ENTRY = "nckd_cyfgzmxf7";//动态表单单据体标识
+    private static String nckd_agentparameter = "nckd_agentparameter";//动因参数基础资料
+
+    /**
+     * 页面点击事件
+     *
+     * @param evt
+     */
+    @Override
+    public void click(EventObject evt) {
+        super.click(evt);
+        //获取被点击的控件对象
+        Control source = (Control) evt.getSource();
+        String pageId = this.getView().getPageId();
+        if (StringUtils.equals(source.getKey(), KEY_OK)) {
+            String listStr = this.getPageCache().get(pageId);
+            if (StringUtils.isNotBlank(listStr)){
+                JSONArray reJa = new JSONArray();
+                EntryGrid entryGrid = this.getView().getControl(FORMID_ENTRY);
+                int[] selectRows = entryGrid.getSelectRows();
+                if (selectRows.length<=0){
+                    this.getView().showMessage("请先选择一条数据!");
+                    return;
+                }
+                JSONArray infoJa = SerializationUtils.fromJsonString(listStr, JSONArray.class);
+                for(int i=0;i<selectRows.length;i++){
+                    JSONObject reJo = infoJa.getJSONObject(selectRows[i]);
+                    reJa.add(reJo);
+                }
+                HashMap<String, String> map = new HashMap<>();
+                map.put("reJaStr", reJa.toJSONString());
+
+                this.getView().returnDataToParent(map);
+            }
+
+            this.getView().close();
+        } else if (StringUtils.equals(source.getKey(), KEY_CANCEL)) {
+            //被点击控件为取消则设置返回值为空并关闭页面(在页面关闭回调方法中必须验证返回值不为空,否则会报空指针)
+            this.getView().returnDataToParent(null);
+            this.getView().close();
+        } else {
+            this.getView().returnDataToParent(null);
+            this.getView().close();
+        }
+    }
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        //页面确认按钮和取消按钮添加监听
+        this.addClickListeners(KEY_OK, KEY_CANCEL);
+    }
+
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterBindData(e);
+//        DynamicObject period = (DynamicObject) this.getModel().getValue("nckd_typeagent");
+        //获取父页面传入数据
+        Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
+        String payeenamev = (String) customParams.get("payeenamev");
+        String controls = (String) customParams.get("controls");
+        String billtype = (String) customParams.get("billtype");
+        if (payeenamev == null) {
+            throw new KDBizException("收款处理付款人为空!");
+        }
+        if("cysgzmx".equals(controls)) {
+            List<JSONObject> resdate = new ArrayList<>();
+            //历史数据清除
+            this.getModel().deleteEntryData(billtype);
+            //构建查询应收挂账单参数
+            QFilter nckd_orgamountFilter = new QFilter("payeenamev", QCP.like, payeenamev);
+            nckd_orgamountFilter.and("status", QCP.equals, "C");
+            nckd_orgamountFilter.and("unsettleamount", QCP.large_than, new BigDecimal(0));
+            DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("nckd_cas_arbill", "id", new QFilter[]{nckd_orgamountFilter});
+            for (int c = 0; c < nckd_cas_arbill.length; c++) {
+                //当前单头
+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[c].getPkValue(), nckd_cas_arbill[c].getDynamicObjectType().getName());
+                //单据编号
+                String billno = dynamicObject.getString("billno");
+                //费用承担组织部门
+                DynamicObject applyorg = dynamicObject.getDynamicObject("applyorg");
+                //往来单位
+                String wldw = dynamicObject.getString("payeenamev");
+                QFilter wldwFilter = new QFilter("name", QCP.like, wldw);
+                DynamicObject[] wldwDynamicObject = BusinessDataServiceHelper.load("nckd_cas_arbill", "id,number", new QFilter[]{wldwFilter});
+                DynamicObject wldwDynamicObjects = BusinessDataServiceHelper.loadSingle(wldwDynamicObject[0].getPkValue(), wldwDynamicObject[0].getDynamicObjectType().getName());
+                String wldwnumber = wldwDynamicObjects.getString("number");
+                //应收挂账日期
+                Date bizdate = dynamicObject.getDate("bizdate");
+                //应收挂账金额/冲销金额
+                BigDecimal settleamount = dynamicObject.getBigDecimal("settleamount");
+                int rowIndex = this.getModel().createNewEntryRow(billtype);
+                //赋值给新增分录
+                this.getModel().setValue("nckd_cysnumber", billno, rowIndex);
+                this.getModel().setValue("nckd_cysorg", applyorg, rowIndex);
+                this.getModel().setValue("nckd_cyssection", applyorg, rowIndex);
+                this.getModel().setValue("nckd_cyswldw", wldwDynamicObjects, rowIndex);
+                this.getModel().setValue("nckd_cysdata", bizdate, rowIndex);
+                this.getModel().setValue("nckd_cysgzbalance", settleamount, rowIndex);
+                this.getModel().setValue("nckd_cyscxbalance", settleamount, rowIndex);
+                //将选中的数据放到缓存中
+                JSONObject obj = new JSONObject();
+                obj.put("nckd_cysnumber", billno);
+                obj.put("nckd_cysorg", applyorg.getString("number"));
+                obj.put("nckd_cyswldw", wldwnumber);
+                obj.put("nckd_cysdata", bizdate);
+                obj.put("nckd_cysgzbalance", settleamount);
+                obj.put("controls", controls);
+                obj.put("billtype", billtype);
+                resdate.add(obj);
+            }
+
+            String pageId = this.getView().getPageId();
+            String listStr = SerializationUtils.toJsonString(resdate);
+            this.getPageCache().put(pageId, listStr);
+        }else if("cyfgzmx".equals(controls)){
+            List<JSONObject> resdate = new ArrayList<>();
+            //历史数据清除
+            this.getModel().deleteEntryData(billtype);
+            //构建查询应收挂账单参数
+            QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, payeenamev);
+            nckd_orgamountFilter.and("status", QCP.equals, "C");
+            nckd_orgamountFilter.and("unsettleamount", QCP.large_than, new BigDecimal(0));
+            DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("nckd_ap_finapbill_gz", "id", new QFilter[]{nckd_orgamountFilter});
+            for (int c = 0; c < nckd_cas_arbill.length; c++) {
+                //当前单头
+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[c].getPkValue(), nckd_cas_arbill[c].getDynamicObjectType().getName());
+                //单据编号
+                String billno = dynamicObject.getString("billno");
+                //费用承担组织部门
+                DynamicObject applyorg = dynamicObject.getDynamicObject("org");
+                //往来单位
+                String wldw = dynamicObject.getString("asstact");
+                QFilter wldwFilter = new QFilter("name", QCP.like, wldw);
+                DynamicObject[] wldwDynamicObject = BusinessDataServiceHelper.load("nckd_cas_arbill", "id,number", new QFilter[]{wldwFilter});
+                DynamicObject wldwDynamicObjects = BusinessDataServiceHelper.loadSingle(wldwDynamicObject[0].getPkValue(), wldwDynamicObject[0].getDynamicObjectType().getName());
+                String wldwnumber = wldwDynamicObjects.getString("number");
+                //应收挂账日期
+                Date bizdate = dynamicObject.getDate("bizdate");
+                //应收挂账金额/冲销金额
+                BigDecimal settleamount = dynamicObject.getBigDecimal("settleamount");
+                int rowIndex = this.getModel().createNewEntryRow(billtype);
+                //赋值给新增分录
+                this.getModel().setValue("nckd_cyfnumber", billno, rowIndex);
+                this.getModel().setValue("nckd_cyforg", applyorg, rowIndex);
+                this.getModel().setValue("nckd_cyffyxm", "", rowIndex);
+                this.getModel().setValue("nckd_cyfwldw", wldwDynamicObjects, rowIndex);
+                this.getModel().setValue("nckd_cyfdata", bizdate, rowIndex);
+                this.getModel().setValue("nckd_cyfgzbalance", settleamount, rowIndex);
+                this.getModel().setValue("nckd_cyfcxbalance", settleamount, rowIndex);
+                //将选中的数据放到缓存中
+                JSONObject obj = new JSONObject();
+                obj.put("nckd_cyfnumber", billno);
+                obj.put("nckd_cyforg", applyorg.getString("number"));
+                obj.put("nckd_cyfwldw", wldwnumber);
+                obj.put("nckd_cyfdata", bizdate);
+                obj.put("nckd_cyfgzbalance", settleamount);
+                obj.put("controls", controls);
+                obj.put("billtype", billtype);
+                resdate.add(obj);
+            }
+
+            String pageId = this.getView().getPageId();
+            String listStr = SerializationUtils.toJsonString(resdate);
+            this.getPageCache().put(pageId, listStr);
+        }
+    }
+
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs e) {
+        if (KEY_SEARCH.equals(e.getOperateKey())) {
+            DynamicObject period = (DynamicObject) this.getModel().getValue("nckd_typeagent");
+            //获取父页面传入数据
+            Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
+            String orgnumber = (String) customParams.get("orgnumber");
+            String orgid = (String) customParams.get("orgid");
+            if (orgnumber == null){
+                throw new KDBizException("付费承担公司为空!");
+            }
+            List<JSONObject> resdate = new ArrayList<>();
+            //历史数据清除
+            this.getModel().deleteEntryData(FORMID_ENTRY);
+            //查询动因参数基础资料
+            QFilter nckd_orgamountFilter = new QFilter("nckd_unappliedorg.number", QCP.equals,orgnumber);
+            if(period !=null){
+                period = BusinessDataServiceHelper.loadSingle(period.getPkValue(),period.getDynamicObjectType().getName());
+                String name = period.getString("name");
+                if(name!=null && !name.isEmpty()){
+                    nckd_orgamountFilter.and("nckd_typeagent.name", QCP.equals,name);
+                }
+            }
+            nckd_orgamountFilter.and("status", QCP.equals,"C");
+            DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.load(nckd_agentparameter,"id,number",new QFilter[] {nckd_orgamountFilter});
+            //循环动因参数基础资料
+            for (int c=0;c<nckd_orgamountaccount.length;c++){
+                //当前行
+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_orgamountaccount[c].getPkValue(), nckd_orgamountaccount[c].getDynamicObjectType().getName());
+                //动因类型
+                DynamicObject nckdTypeagent = dynamicObject.getDynamicObject("nckd_typeagent");
+                //循环分录
+                for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("nckd_entryentity")) {
+                    //当前分录行分摊组织
+                    DynamicObject nckdShareorg = entryentity.getDynamicObject("nckd_shareorg");
+                    //当前分录行动因值
+                    BigDecimal nckdAgentvalue = entryentity.getBigDecimal("nckd_agentvalue");
+                    //新增动态单据分录行
+                    int rowIndex = this.getModel().createNewEntryRow(FORMID_ENTRY);
+                    //赋值给分录
+                    this.getModel().setValue("nckd_shareorg", nckdShareorg, rowIndex);
+                    this.getModel().setValue("nckd_agentvalue", nckdAgentvalue, rowIndex);
+                    this.getModel().setValue("nckd_agenttype", nckdTypeagent, rowIndex);
+                    //存放缓存
+                    JSONObject obj = new JSONObject();
+                    obj.put("nckd_shareorg",nckdShareorg.getString("number"));
+                    obj.put("nckd_agentvalue",nckdAgentvalue);
+                    resdate.add(obj);
+                }
+            }
+            String pageId = this.getView().getPageId();
+            String listStr = SerializationUtils.toJsonString(resdate);
+            this.getPageCache().put(pageId, listStr);
+//        initTable(isInform,isForce,startDate,endDate,null);
+
+
+        }
+    }
+}