Kaynağa Gözat

feat(base): 新增用户密码修改功能并优化薪资计算查询

- 实现管理员修改用户登录密码的功能,包含密码强度校验和确认提示
- 密码规则:长度不少于7位,需包含字母及数字或@符号
- 优化薪资计算相关查询逻辑,增加组织机构和岗位信息字段
- 更新任务状态过滤条件注释,明确审批通过状态码为4
- 扩展薪资明细查询返回字段,新增机构、计算规则等相关信息
turborao 4 saat önce
ebeveyn
işleme
66148f9320

+ 125 - 0
code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/utils/ChangeUserLoginPwd.java

@@ -0,0 +1,125 @@
+package nckd.jxccl.base.common.utils;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.form.ConfirmCallBackListener;
+import kd.bos.form.ConfirmTypes;
+import kd.bos.form.MessageBoxOptions;
+import kd.bos.form.MessageBoxResult;
+import kd.bos.form.control.Button;
+import kd.bos.form.control.Control;
+import kd.bos.form.control.events.BeforeClickEvent;
+import kd.bos.form.events.MessageBoxClosedEvent;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.user.UserServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.util.EventObject;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * 基础服务云->基础资料->盐业通用数据
+ * 页面编码: nckd_changeuserpwd , 修改登录pwd
+ * 动态表单
+ * author:chengchaohua
+ * date: 2025-02-07
+ */
+public class ChangeUserLoginPwd extends AbstractFormPlugin implements Plugin {
+
+    private static final Log LOGGER = LogFactory.getLog(ChangeUserLoginPwd.class);
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        // 按钮点击监听
+        Button button = this.getView().getControl("nckd_updatepwd");
+        button.addClickListener(this);
+        super.registerListener(e);
+    }
+
+    @Override
+    public void beforeClick(BeforeClickEvent evt) {
+        super.beforeClick(evt);
+        String key = ((Control) evt.getSource()).getKey();
+        if ("nckd_updatepwd".equals(key)) {
+            DynamicObject userObj = (DynamicObject) this.getModel().getValue("nckd_user");
+            if (userObj == null) {
+                this.getView().showTipNotification("人员必选");
+                evt.setCancel(true);
+                return;
+            }
+
+            String pwd = (String) this.getModel().getValue("nckd_newpwd");
+            if (pwd == null || pwd.length() <= 6) {
+                this.getView().showTipNotification("密码不能少于7位");
+                evt.setCancel(true);
+                return;
+            } else {
+                if (!checkPwd(pwd)){
+                    this.getView().showTipNotification("密码只能包含数字,大小写字母和@,并至少包含一个字母");
+                    evt.setCancel(true);
+                    return;
+                }
+            }
+        }
+    }
+
+    @Override
+    public void click(EventObject evt) {
+        super.click(evt);
+        String key = ((Control) evt.getSource()).getKey();
+        if ("nckd_updatepwd".equals(key)) {
+            ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener("updatepwd", this);
+            String confirmTip = "是否确认继续?";
+            this.getView().showConfirm(confirmTip, MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
+        }
+    }
+
+    /**
+     * 用户确认了交互信息后,触发此事件
+     */
+    @Override
+    public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
+        super.confirmCallBack(messageBoxClosedEvent);
+        IDataModel model = this.getModel();
+        if (StringUtils.equals("updatepwd", messageBoxClosedEvent.getCallBackId())) {
+            // 1.产品交互信息
+            if (messageBoxClosedEvent.getResult() == MessageBoxResult.Yes) {
+                // 确认执行
+                String pwd = (String) model.getValue("nckd_newpwd");
+                DynamicObject userObj = (DynamicObject) model.getValue("nckd_user");
+
+                Map<String, Object> map = UserServiceHelper.changePsw((Long) (userObj.getPkValue()), null, pwd);
+                Boolean result = (Boolean) map.get("success");
+                if (result) {
+                    this.getView().showSuccessNotification(userObj.getString("name") + ":密码更新成功");
+                    LOGGER.info("管理员修改:" + userObj.getString("name") + ",密码成功");
+                } else {
+                    this.getView().showErrorNotification("密码更新失败:" + map.get("msg"));
+                }
+            } else {
+                // 取消或关闭弹框
+                this.getView().showSuccessNotification("已取消更新");
+            }
+        }
+    }
+
+    // 校验密码字符
+    boolean checkPwd(String pwd) {
+        // 正则表达式:[a-zA-Z0-9@]+$
+        //  表示字符串的开始
+        // [a-zA-Z0-9@] 表示允许的字符集,包括小写字母、大写字母、数字和@
+        // + 表示前面的字符集可以出现一次或多次
+        // $ 表示字符串的结束
+        String regex = "(?=.*[a-zA-Z])[a-zA-Z0-9@]+$";
+
+        Pattern pattern = Pattern.compile(regex);
+        // 返回true为校验符合
+        return pattern.matcher(pwd).matches();
+    }
+
+}

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

@@ -91,7 +91,7 @@ public class SWCHelper {
 
         String entityName = "hsas_calperson";
         QFilter filter = new QFilter("employee.id", QCP.equals, employeeId);
-        DynamicObjectCollection dyns = QueryServiceHelper.query(entityName, "id,name", new QFilter[]{filter});
+        DynamicObjectCollection dyns = QueryServiceHelper.query(entityName, "id,name,adminorg.name,empposorgrelsndet.position.name", new QFilter[]{filter});
 
         Map<Long, DynamicObject> dynsMap = (Map)dyns.stream().collect(Collectors.toMap((obj) -> {
             return obj.getLong("id");
@@ -125,10 +125,10 @@ public class SWCHelper {
             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("caltask.taskstatuse", QCP.equals, "4");   ///任务状态  已审核 7  审批通过 4
         filter.and("hsas_caltableentry.calamountvalue", QCP.large_than, 0);
         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";
+        String selectFields = "calpersonid,caltask.org.name,caltask.calrule.name,caltask.calcount,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";
@@ -143,7 +143,6 @@ public class SWCHelper {
         return calTableDyns;
     }
 
-
     /**
      * 根据用户ID查询员工ID
      * @param userId
@@ -155,7 +154,6 @@ public class SWCHelper {
         return personuserrel == null ? 0L : personuserrel.getLong("employee_id");
     }
 
-
     /**
      * 判断集合是否为空
      * @param list