Bladeren bron

feat(swc): 新增员工薪资查询移动端表单插件

- 实现移动端员工薪资数据查询功能
- 添加日期范围选择控件,默认设置结束时间为上个月
- 根据用户ID获取关联员工信息
- 支持按发放日期或薪资所属年月两种口径查询
- 展示员工姓名、实发合计及应发合计金额
- 提供薪资项目金额分组汇总和名称映射方法
turborao 6 dagen geleden
bovenliggende
commit
a8b1d09250

+ 121 - 27
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/EmpSalaryQueryMobFormPlugin.java

@@ -6,6 +6,15 @@ import kd.bos.entity.datamodel.events.BizDataEventArgs;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.control.Label;
 import kd.bos.form.field.DateRangeEdit;
+import kd.bos.form.mcontrol.mobtable.MobTable;
+import kd.bos.form.mcontrol.mobtable.MobTablePackageDataHandler;
+import kd.bos.form.mcontrol.mobtable.MobTableRowBuilder;
+import kd.bos.form.mcontrol.mobtable.MobTableRowData;
+import kd.bos.form.mcontrol.mobtable.events.IMobTablePackageDataHandlerListener;
+import kd.bos.form.mcontrol.mobtable.events.MobTableHandleResult;
+import kd.bos.form.mcontrol.mobtable.events.MobTablePackageDataHandlerArgs;
+import kd.bos.form.mcontrol.mobtable.events.MobTablePackageDataHandlerEvent;
+import kd.bos.form.mcontrol.mobtable.tablecolumn.MobTableColumn;
 import kd.bos.form.plugin.AbstractMobFormPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
@@ -20,6 +29,8 @@ import java.util.*;
 
 /**
  * 动态表单插件(移动端)
+ * @author  turborao
+ * @date 2025/11/27
  */
 public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implements Plugin {
 
@@ -27,41 +38,65 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
     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 String KEY_STARTDATE = null;
-    private static String KEY_ENDDATE = null;
+    private static String KEY_CTL_STARTDATE = "startmonth";
+    private static String KEY_CTL_ENDDATE = "endmonth";
     private static String KEY_META_PERUSER = "hrpi_personuserrel";
     private static Long KEY_EMPID = 0L;
+    private static Date KEY_STARTDATE = new Date();
+    private static Date KEY_ENDDATE = new Date();
+    private static String KEY_TYPE = "10";
 
-    @Override
-    public void createNewData(BizDataEventArgs e) {
-        super.createNewData(e);
-        DateRangeEdit dateRangeEdit = this.getView().getControl("nckd_daterangefield");
-        KEY_STARTDATE = dateRangeEdit.getStartDateFieldKey();
-        KEY_ENDDATE = dateRangeEdit.getEndDateFieldKey();
-
-        this.getModel().setValue(KEY_STARTDATE, new Date());
+    public void initialize() {
 
         // 设置最大日期为上个月
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
         calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
         Date lastMonthDate = calendar.getTime();
+        KEY_STARTDATE = lastMonthDate;
 
-        this.getModel().setValue(KEY_ENDDATE, lastMonthDate);
+        MobTable mobTable = getControl("nckd_mobtable");
+        mobTable.addMobTablePackageDataHandlerListener(new IMobTablePackageDataHandlerListener() {
+            @Override
+            public void createMobTablePackageDataHandler(MobTablePackageDataHandlerEvent mobTablePackageDataHandlerEvent) {
+                mobTablePackageDataHandlerEvent.setMobTablePackageDataHandler(new EmpSalaryQueryMobDataHandler());//添加自定义的Handle
+            }
+        });
+
+    }
+
+    @Override
+    public void createNewData(BizDataEventArgs e) {
+        super.createNewData(e);
+        showData();
+    }
+
+    @Override
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+        this.getModel().setValue(KEY_CTL_STARTDATE, KEY_STARTDATE);
+
+        this.getModel().setValue(KEY_CTL_ENDDATE, KEY_ENDDATE);
 
         Long userId = UserServiceHelper.getCurrentUserId();
-        //DynamicObject userDyn= SWCHelper.queryOne("bos_user", userId);
         this.getModel().setValue("nckd_user", userId);
+
         DynamicObject personUserDyns = SWCHelper.queryOne(KEY_META_PERUSER, "employee.id","user",userId);
 
+        if(personUserDyns == null){
+            return;
+        }
         KEY_EMPID = personUserDyns.getLong("employee.id");
-
     }
 
     @Override
     public void afterBindData(EventObject e) {
         super.afterBindData(e);
-        showData();
     }
 
     @Override
@@ -70,11 +105,18 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
         String fieldKey = e.getProperty().getName();
         if (fieldKey.equals("nckd_daterangefield")){
             // TODO 在此添加业务逻辑
+            KEY_STARTDATE = (Date)this.getModel().getValue(KEY_CTL_STARTDATE);
+            KEY_ENDDATE = (Date)this.getModel().getValue(KEY_CTL_ENDDATE);
+            showData();
+            this.getView().updateView("nckd_mob_empsalary") ;
         }
         if (fieldKey.equals("nckd_type")){
             // TODO 在此添加业务逻辑
-            //e.getChangeSet()[0].getNewValue() ;
-            //String value = (String)this.getModel().getValue(fieldKey);
+
+            KEY_TYPE = (String)this.getModel().getValue("nckd_type");
+            showData();
+            this.getView().updateView("nckd_mob_empsalary") ;
+
         }
     }
 
@@ -85,12 +127,12 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
      */
     public void showData() {
         // 获取单据头日期范围,开始时间、结束时间
-        Date startdate = (Date) this.getModel().getValue(KEY_STARTDATE);
-        Date enddate = (Date) this.getModel().getValue(KEY_ENDDATE);
-        String type = (String)this.getModel().getValue("nckd_type");
+        Date startdate = KEY_STARTDATE;
+        Date enddate = KEY_ENDDATE;
+        String type = KEY_TYPE;
         //SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
         // 获取核算列表信息
-        QFilter filter = new QFilter("calpersonid", QCP.equals, 2331344996847852544L);
+        QFilter filter = new QFilter("calpersonid", QCP.equals, 2334901966875941888L);
         if(type.equals("10")){
             filter.and("caltask.paydate", QCP.large_equals, startdate);
             filter.and("caltask.paydate", QCP.less_equals, enddate);
@@ -102,20 +144,38 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
         String selectFields = "calpersonid,hsas_caltableentry.salaryitem.number,hsas_caltableentry.salaryitem.name,hsas_caltableentry.calamountvalue";
         DynamicObjectCollection calTableDyns = SwcConstant.CALTABLE_ENTITY.queryOriginalCollection(selectFields, new QFilter[]{filter});
 
-
-        DynamicObject empDyn= SWCHelper.queryOne("hrpi_employee", 2331344996847852544L);
+        DynamicObject empDyn = SWCHelper.queryOne("hsas_calperson", 2334901966875941888L);
 
         Label label = this.getView().getControl(KEY_LAB_EMP_NAME);
         label.setText(empDyn.getString("name"));
 
-        Map<String, BigDecimal> calItemAmt = getCalItemAmt(calTableDyns);
-        Map<String, String> itemName = getItemName(calTableDyns);
-        if(calItemAmt != null && calItemAmt.size() > 0 && itemName != null && calItemAmt.size() > 0){
+        Map<String, BigDecimal> calItemAmtMap = getCalItemAmt(calTableDyns);
+        Map<String, String> itemNameMap = getItemName(calTableDyns);
+
+        if(calItemAmtMap != null && calItemAmtMap.size() > 0 && itemNameMap != null && calItemAmtMap.size() > 0){
             Label label1 = this.getView().getControl(KEY_LAB_REALAMT);
-            label1.setText(calItemAmt.get("JT_477").toString());    //实发合计
+            if(calItemAmtMap.get("JT_477") == null){
+                label1.setText("0.00");
+            }else {
+                label1.setText(calItemAmtMap.get("JT_477").toString());    //实发合计
+            }
+
+            Label label2 = this.getView().getControl(KEY_LAB_GROSSAMT);
+            if(calItemAmtMap.get("JT_283") == null){
+                label2.setText("0.00");
+            }else {
+                label2.setText(calItemAmtMap.get("JT_283").toString());
+            }
+
+            MobTable mobTable = getControl("nckd_mobtable");
+            mobTable.setCustomParam("calItemAmt", calItemAmtMap);
+            mobTable.setCustomParam("itemName", itemNameMap);
 
+        }else{
+            Label label1 = this.getView().getControl(KEY_LAB_REALAMT);
+            label1.setText("0.00");
             Label label2 = this.getView().getControl(KEY_LAB_GROSSAMT);
-            label2.setText(calItemAmt.get("JT_283").toString());
+            label2.setText("0.00");
         }
 
     }
@@ -168,4 +228,38 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
         return null;
     }
 
+}
+
+
+class EmpSalaryQueryMobDataHandler extends MobTablePackageDataHandler {
+    @Override
+    public MobTableHandleResult handleData(MobTablePackageDataHandlerArgs args) {
+        List<MobTableColumn> mobTableColumns = args.getMobTableColumns();
+        MobTableHandleResult mobTableHandleResult = new MobTableHandleResult();
+        List<MobTableRowData> mobTableRowDataList = new ArrayList<>();
+        Map<String, BigDecimal> calItemAmtMap = args.getCustomParam("calItemAmt");
+        Map<String, String> itemNameMap = args.getCustomParam("itemName");
+
+        if(calItemAmtMap != null && calItemAmtMap.size() > 0 && itemNameMap != null && calItemAmtMap.size() > 0) {
+            int index = 0;
+            for (Map.Entry<String, BigDecimal> entry : calItemAmtMap.entrySet()) {
+                String key = entry.getKey();
+                BigDecimal value = entry.getValue();
+
+                // 处理 key 和 value
+                MobTableRowData mobTableRowData = MobTableRowBuilder.buildTemplateRowData(index, mobTableColumns);
+                mobTableRowData.setValue("nckd_item", itemNameMap.get(key));
+                mobTableRowData.setValue("nckd_amt", calItemAmtMap.get(key));
+                mobTableRowDataList.add(mobTableRowData);
+                index++;
+                System.out.println("Key: " + key + "name:, " + itemNameMap.get(key) + "Value: " + value);
+            }
+
+            mobTableHandleResult.setMobTableRowDataList(mobTableRowDataList);
+            // 额外格式化信息如日期、金额,支持重写
+            mobTableHandleResult.setFmtInfo(getFmtInfo(args));
+        }
+        return mobTableHandleResult;
+    }
+
 }