Ver Fonte

feat(swc): 完善薪资查询功能并优化数据展示

- 启用薪资等级字段以支持新薪资体系
- 重构薪资数据查询逻辑,使用统一的 helper 方法
- 调整数据结构为 LinkedHashMap 以保持插入顺序
- 新增部门信息展示及合计行显示
- 优化数据网格监听器注册逻辑
- 添加查询按钮点击事件处理
- 更新标签文本格式及默认值设置
- 实现薪资项排序及分组汇总功能
- 修复属性变更监听中的重复调用问题
turborao há 8 horas atrás
pai
commit
63be39aa4e

+ 4 - 5
code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/swc/helper/SWCHelper.java

@@ -127,16 +127,15 @@ public class SWCHelper {
         }
         //filter.and("caltask.taskstatuse", QCP.equals, "7");   ///任务状态  已审核
         filter.and("hsas_caltableentry.calamountvalue", QCP.large_than, 0);
-        String orderStr = "";
-        String selectFields = "calpersonid,hsas_caltableentry.salaryitem.number,hsas_caltableentry.salaryitem.name,hsas_caltableentry.calamountvalue";
+        String orderStr = "hsas_caltableentry.salaryitem.statisticstag.number";
+        String selectFields = "calpersonid,hsas_caltableentry.salaryitem.number,hsas_caltableentry.salaryitem.name,hsas_caltableentry.calamountvalue,hsas_caltableentry.salaryitem.statisticstag.number";
         if(type.equals("10")){
             selectFields = selectFields + ",caltask.paydate as bizdate";
-            orderStr = "caltask.paydate";
+            //orderStr = "caltask.paydate";
         }else{
             selectFields = selectFields + ",caltask.payrolldate as bizdate";
-            orderStr = "caltask.payrolldate";
+            //orderStr = "caltask.payrolldate";
         }
-        orderStr = orderStr + ",hsas_caltableentry.salaryitem.number";
         selectFields = selectFields + ",caltask.paydate,caltask.payrolldate";
 
         DynamicObjectCollection calTableDyns = QueryServiceHelper.query(entityName, selectFields, new QFilter[]{filter}, orderStr);

+ 4 - 6
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/EmpSalaryQueryMobFormPlugin.java

@@ -165,10 +165,8 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
             filter.and("caltask.payrolldate", QCP.large_equals, startdate);
             filter.and("caltask.payrolldate", QCP.less_equals, enddate);
         }
-        //filter.and("caltask.taskstatuse", QCP.equals, "7");   ///任务状态  已审核
-        filter.and("hsas_caltableentry.calamountvalue", QCP.large_than, 0);
-        String selectFields = "calpersonid,hsas_caltableentry.salaryitem.number,hsas_caltableentry.salaryitem.name,hsas_caltableentry.calamountvalue";
-        DynamicObjectCollection calTableDyns = SwcConstant.CALTABLE_ENTITY.queryOriginalCollection(selectFields, new QFilter[]{filter});
+
+        DynamicObjectCollection calTableDyns = SWCHelper.querySalaryList(calPersonIds, startdate, enddate, type) ;
 
         Label label = this.getView().getControl(KEY_LAB_EMP_NAME);
         label.setText(employeeDyn.getString("employee.name"));
@@ -232,7 +230,7 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
      */
     public Map<String, BigDecimal> getCalItemAmt(DynamicObjectCollection calTableDyns) {
         // 按 salaryitem.number 分组汇总金额
-        Map<String, BigDecimal> groupedAmounts = new HashMap<>();
+        Map<String, BigDecimal> groupedAmounts = new LinkedHashMap<>();
 
         for (DynamicObject item : calTableDyns) {
             String salaryItemNumber = item.getString("hsas_caltableentry.salaryitem.number");
@@ -256,7 +254,7 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
      * @return
      */
     public Map<String, String> getItemName(DynamicObjectCollection calTableDyns) {
-        Map<String, String> itemNameMap = new HashMap<>();
+        Map<String, String> itemNameMap = new LinkedHashMap <>();
         for (DynamicObject item : calTableDyns) {
             String salaryItemNumber = item.getString("hsas_caltableentry.salaryitem.number");
             String salaryItemName = item.getString("hsas_caltableentry.salaryitem.name");

+ 91 - 30
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/EmpSalaryQueryWebFormPlugin.java

@@ -4,13 +4,13 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.entity.LocaleString;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.control.Control;
 import kd.bos.form.control.Label;
 import kd.bos.form.control.grid.DataGrid;
 import kd.bos.form.control.grid.DataGridRow;
 import kd.bos.form.control.grid.DataGridRowBuilder;
 import kd.bos.form.control.grid.column.AmountDataGridColumn;
 import kd.bos.form.control.grid.column.DataGridColumn;
-
 import kd.bos.form.control.grid.events.BeforeCreateDataGridColumnsEvent;
 import kd.bos.form.control.grid.events.BeforeCreateDataGridColumnsListener;
 import kd.bos.form.control.grid.events.DataGridBindDataEvent;
@@ -33,13 +33,14 @@ import java.util.*;
  * @author turborao
  * @date 2025/11/28 16:01
  */
-public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements Plugin, DataGridBindDataListener, BeforeCreateDataGridColumnsListener {
+public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements  Plugin,BeforeCreateDataGridColumnsListener, DataGridBindDataListener {
 
 
     private static final String KEY_LAB_EMP_NAME = "nckd_name";
     private static final String KEY_LAB_EMP_DESCRIPTION = "nckd_desc";
     private static final String KEY_LAB_REALAMT = "nckd_realamt";
     private static final String KEY_LAB_GROSSAMT = "nckd_grossamt";
+    private static final String KEY_LAB_SUBAMT = "nckd_subamt";
     private static String KEY_CTL_STARTDATE = "startmonth";
     private static String KEY_CTL_ENDDATE = "endmonth";
     private static String KEY_META_PERUSER = "hrpi_personuserrel";
@@ -48,10 +49,11 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
     private static Date KEY_ENDDATE = new Date();
     private static String KEY_TYPE = "10";
 
-    Map<String, String> itemNameMap = new HashMap<>();
+    Map<String, String> itemNameMap = new LinkedHashMap<>();
     Map<String, BigDecimal> calItemAmtMap = new HashMap<>();
     Map<String, Map<String, BigDecimal>> calItemAmtMapByPeriod = new HashMap<>();
 
+    private static final String CTL_DATAGRID = "nckd_datagridap";
 
     @Override
     public void initialize() {
@@ -72,7 +74,22 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
             KEY_EMPID = personUserDyn.getLong("employee.id");
         }
 
-        // 设置最大日期为上个月
+        if(!this.getModel().isDataLoaded()) {
+
+            //KEY_STARTDATE = (Date) this.getModel().getValue(KEY_CTL_STARTDATE);
+            //KEY_ENDDATE = (Date) this.getModel().getValue(KEY_CTL_ENDDATE);
+            //KEY_TYPE = (String) this.getModel().getValue("nckd_type");
+
+            showData();
+
+
+        }
+
+    }
+
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
         calendar.add(Calendar.MONTH, -1);
@@ -83,17 +100,6 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
         calendar.set(Calendar.MILLISECOND, 0);
         Date lastMonthDate = calendar.getTime();
         KEY_STARTDATE = lastMonthDate;
-
-        showData();
-        /**
-         * 构建表格数据
-         */
-        DataGrid dataGrid = this.getControl("nckd_datagridap");
-        // 注册创建列监听事件
-        dataGrid.addBeforeCreateDataGridColumnsListener(this);
-        // 注册绑定数据监听事件
-        dataGrid.addBindDataListener(this);
-
     }
 
     @Override
@@ -117,9 +123,34 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
 
 
     @Override
-    public void afterCreateNewData(EventObject e) {
-        super.afterCreateNewData(e);
+    public void registerListener(EventObject event) {
+        registerDataGridListener();
+        // 添加箭头点击事件监控
+        this.addClickListeners("nckd_query");
+    }
 
+    private void registerDataGridListener() {
+        DataGrid dataGrid = this.getControl(CTL_DATAGRID);
+        // 注册创建列监听事件
+        dataGrid.addBeforeCreateDataGridColumnsListener(this);
+        // 注册绑定数据监听事件
+        dataGrid.addBindDataListener(this);
+
+    }
+
+    @Override
+    public void click(EventObject e) {
+        super.click(e);
+        Control source = (Control) e.getSource();
+        if("nckd_query".equals(source.getKey())) {
+            KEY_STARTDATE = (Date) this.getModel().getValue(KEY_CTL_STARTDATE);
+            KEY_ENDDATE = (Date) this.getModel().getValue(KEY_CTL_ENDDATE);
+            KEY_TYPE = (String) this.getModel().getValue("nckd_type");
+            showData();
+
+            this.getView().updateView(CTL_DATAGRID);
+
+        }
     }
 
     /**
@@ -166,7 +197,7 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
             desc = "公司:" + companyName;
         }
         if(adminorgName != null){
-            desc = desc + " 部门:" + adminorgName;
+            desc = desc + "   部门:" + adminorgName;
         }
         labelDesc.setText( desc);
 
@@ -191,13 +222,20 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
             }else {
                 label2.setText(df.format(calItemAmtMap.get("JT_283")));   //应发合计
             }
+            Label label3 = this.getView().getControl(KEY_LAB_SUBAMT);
+            if(calItemAmtMap.get("JT383") == null){
+                label3.setText("0.00");
+            }else {
+                label3.setText(df.format(calItemAmtMap.get("JT383")));
+            }
 
         }else{
             Label label1 = this.getView().getControl(KEY_LAB_REALAMT);
             label1.setText("0.00");
             Label label2 = this.getView().getControl(KEY_LAB_GROSSAMT);
             label2.setText("0.00");
-
+            Label label3 = this.getView().getControl(KEY_LAB_SUBAMT);
+            label3.setText("0.00");
         }
 
     }
@@ -233,8 +271,19 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
      * @return Map<period, Map<itemnumber, amount>> 嵌套Map结构
      */
     public Map<String, Map<String, BigDecimal>> getCalItemAmtByPeriod(DynamicObjectCollection calTableDyns) {
+
+        /**
+         * 排序
+         */
+        Collections.sort(calTableDyns , new Comparator<DynamicObject>(){
+            @Override
+            public int compare(DynamicObject stu1, DynamicObject stu2) {
+                return stu1.getDate("bizdate").compareTo(stu2.getDate("bizdate"));
+            }
+        });
+
         // 按 period 分组,每个 period 再按 salaryitem.number 分组汇总金额
-        Map<String, Map<String, BigDecimal>> result = new HashMap<>();
+        Map<String, Map<String, BigDecimal>> result = new LinkedHashMap<>();
 
         for (DynamicObject item : calTableDyns) {
             Date bizPeriod = item.getDate("bizdate");
@@ -266,7 +315,7 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
      * @return
      */
     public Map<String, String> getItemName(DynamicObjectCollection calTableDyns) {
-        Map<String, String> itemNameMap = new HashMap<>();
+        Map<String, String> itemNameMap = new LinkedHashMap<>();
         for (DynamicObject item : calTableDyns) {
             String salaryItemNumber = item.getString("hsas_caltableentry.salaryitem.number");
             String salaryItemName = item.getString("hsas_caltableentry.salaryitem.name");
@@ -283,16 +332,16 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
         super.propertyChanged(e);
         String fieldKey = e.getProperty().getName();
         if (fieldKey.equals(KEY_CTL_STARTDATE) || fieldKey.equals(KEY_CTL_ENDDATE)){
-            KEY_STARTDATE = (Date)this.getModel().getValue(KEY_CTL_STARTDATE);
-            KEY_ENDDATE = (Date)this.getModel().getValue(KEY_CTL_ENDDATE);
-            showData();
-            this.getView().updateView();
+            //KEY_STARTDATE = (Date)this.getModel().getValue(KEY_CTL_STARTDATE);
+            //KEY_ENDDATE = (Date)this.getModel().getValue(KEY_CTL_ENDDATE);
+            //showData();
+            //this.getView().updateView();
         }
         if (fieldKey.equals("nckd_type")){
 
-            KEY_TYPE = (String)this.getModel().getValue("nckd_type");
-            showData();
-            this.getView().updateView();
+            //KEY_TYPE = (String)this.getModel().getValue("nckd_type");
+            //showData();
+            //this.getView().updateView();
         }
     }
 
@@ -318,7 +367,6 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
             }
         }
 
-
     }
 
     /**
@@ -354,9 +402,21 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
                     row.setValue(itemNumber, amount);
                 }
 
+
+
                 list.add(row.get());
                 index++;
-
+                
+            }
+            if(calItemAmtMap != null && calItemAmtMap.size() > 0) {
+                DataGridRow row = builder.buildRow();
+                row.setValue("rk", index + 1);  // rk必须存在且唯一不能重复
+                row.setValue("seq", index + 2);
+                row.setValue("nckd_period", "_合计_");
+                for(String key : calItemAmtMap.keySet()){
+                    row.setValue(key, calItemAmtMap.get( key));
+                }
+                list.add(row.get());
             }
             // 重要: 传递列表数据
             e.setData(list);
@@ -364,4 +424,5 @@ public class EmpSalaryQueryWebFormPlugin extends AbstractFormPlugin implements P
         }
     }
 
+
 }

+ 1 - 1
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/BuildApplyBillOpPlugin.java

@@ -108,7 +108,7 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
             //applyBillEntry.put("amount", BigDecimal.ZERO);
             applyBillEntry.put("nckd_postgrade", salaryfile.getLong("position.nckd_postgrade.id"));  //岗级
             applyBillEntry.put("position", positionId);
-            //applyBillEntry.put("salaryrank", data.getLong("nckd_newsalaryrank.id"));
+            applyBillEntry.put("salaryrank", data.getLong("nckd_newsalaryrank.id"));
             applyBillEntryData.add(applyBillEntry);
         }
         applyBill.put("applybillent", applyBillEntryData);