Преглед изворни кода

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

- 实现移动端员工薪资数据查询功能
- 添加日期范围选择控件,默认设置起始日期和结束日期
- 根据用户关联关系获取员工信息并展示
- 支持按薪资发放日期或薪资所属年月筛选数据
- 展示员工姓名、实发合计及应发合计金额
- 提供薪资项目金额分组汇总和名称映射方法
- 实现薪资数据的动态加载与界面绑定
turborao пре 6 дана
родитељ
комит
898328d1eb

+ 171 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/EmpSalaryQueryMobFormPlugin.java

@@ -0,0 +1,171 @@
+package nckd.jxccl.swc.init.plugin.form;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+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.plugin.AbstractMobFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.user.UserServiceHelper;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.swc.helper.SWCHelper;
+import nckd.jxccl.swc.constants.SwcConstant;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 动态表单插件(移动端)
+ */
+public class empSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implements Plugin {
+
+    private static final String KEY_LAB_EMP_NAME = "nckd_employee";
+    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_META_PERUSER = "hrpi_personuserrel";
+    private static Long KEY_EMPID = 0L;
+
+    @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());
+
+        // 设置最大日期为上个月
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.add(Calendar.MONTH, -1);
+        Date lastMonthDate = calendar.getTime();
+
+        this.getModel().setValue(KEY_ENDDATE, lastMonthDate);
+
+        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);
+
+        KEY_EMPID = personUserDyns.getLong("employee.id");
+
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        showData();
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+        String fieldKey = e.getProperty().getName();
+        if (fieldKey.equals("nckd_daterangefield")){
+            // TODO 在此添加业务逻辑
+        }
+        if (fieldKey.equals("nckd_type")){
+            // TODO 在此添加业务逻辑
+            //e.getChangeSet()[0].getNewValue() ;
+            //String value = (String)this.getModel().getValue(fieldKey);
+        }
+    }
+
+    /**
+     * 显示薪酬数据
+     * caltask.paydate       预计支付日期  发放口径
+     * caltask.payrolldate   薪资所属年月  统计口径
+     */
+    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");
+        //SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
+        // 获取核算列表信息
+        QFilter filter = new QFilter("calpersonid", QCP.equals, 2331344996847852544L);
+        if(type.equals("10")){
+            filter.and("caltask.paydate", QCP.large_equals, startdate);
+            filter.and("caltask.paydate", QCP.less_equals, enddate);
+        }else{
+            filter.and("caltask.payrolldate", QCP.large_equals, startdate);
+            filter.and("caltask.payrolldate", QCP.less_equals, enddate);
+        }
+        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});
+
+
+        DynamicObject empDyn= SWCHelper.queryOne("hrpi_employee", 2331344996847852544L);
+
+        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){
+            Label label1 = this.getView().getControl(KEY_LAB_REALAMT);
+            label1.setText(calItemAmt.get("JT_477").toString());    //实发合计
+
+            Label label2 = this.getView().getControl(KEY_LAB_GROSSAMT);
+            label2.setText(calItemAmt.get("JT_283").toString());
+        }
+
+    }
+
+    /**
+     * 按 salaryitem.number 分组汇总金额
+     * @param calTableDyns
+     * @return
+     */
+    public Map<String, BigDecimal> getCalItemAmt(DynamicObjectCollection calTableDyns) {
+        // 按 salaryitem.number 分组汇总金额
+        Map<String, BigDecimal> groupedAmounts = new HashMap<>();
+
+        for (DynamicObject item : calTableDyns) {
+            String salaryItemNumber = item.getString("hsas_caltableentry.salaryitem.number");
+            BigDecimal amount = item.getBigDecimal("hsas_caltableentry.calamountvalue");
+            if (amount == null) {
+                amount = BigDecimal.ZERO;
+            }else{
+                amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+
+            if (salaryItemNumber != null) {
+                groupedAmounts.put(salaryItemNumber, groupedAmounts.getOrDefault(salaryItemNumber, BigDecimal.ZERO) .add(amount != null ? amount : BigDecimal.ZERO));
+            }
+        }
+        if(groupedAmounts.size() > 0){
+            return groupedAmounts;
+        }
+        return null;
+    }
+    /**
+     * 按 salaryitem.number 获取名称
+     * @param calTableDyns
+     * @return
+     */
+    public Map<String, String> getItemName(DynamicObjectCollection calTableDyns) {
+        Map<String, String> itemNameMap = new HashMap<>();
+        for (DynamicObject item : calTableDyns) {
+            String salaryItemNumber = item.getString("hsas_caltableentry.salaryitem.number");
+            String salaryItemName = item.getString("hsas_caltableentry.salaryitem.name");
+
+            if (salaryItemNumber != null) {
+                itemNameMap.put(salaryItemNumber, salaryItemName);
+            }
+        }
+        if(itemNameMap.size() > 0){
+            return itemNameMap;
+        }
+        return null;
+    }
+
+}