jiangping
2024-10-18 a77b4b41cc6d7521756017985aac2d3b38935254
最新版本541200007
已添加1个文件
已修改8个文件
245 ■■■■ 文件已修改
admin/src/views/business/relativeMember.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/BaseController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/PwdCheckUtil.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/WmsPushController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/relativeMember.vue
@@ -37,9 +37,9 @@
          <el-option label="同步失败" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="">
<!--      <el-form-item label="">
        <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1">是否包含下级组织</el-checkbox>
      </el-form-item>
      </el-form-item>-->
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
@@ -71,8 +71,14 @@
            icon="el-icon-plus" v-permissions="['business:traintime:create']">培训期导入</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
            v-permissions="['business:member:delete']">批量删除</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()">下发授权</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()">下发授权</el-button>
        <li style="float: right">
          <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1"
                       @change="search">是否包含下级组织</el-checkbox>
        </li>
<!--
        <li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">导出</el-button></li>
-->
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
server/system_service/src/main/java/com/doumee/api/BaseController.java
@@ -1,6 +1,7 @@
package com.doumee.api;
import com.alibaba.fastjson.JSONObject;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -13,9 +14,11 @@
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * Controller基类
@@ -27,6 +30,8 @@
    @Autowired
    private RedisTemplate<String,Object> stringRedisTemplate;
    @Resource
    private JwtProperties jwtProperties;
    /**
     * èŽ·å–å½“å‰ç™»å½•ç”¨æˆ·
     * @author Eva.Caesar Liu
@@ -47,6 +52,9 @@
        }
        return  user;
    }
    public void updateLoginUser (String token,LoginUserInfo userInfo) {
        stringRedisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(userInfo),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
    }
    /**
server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
@@ -4,6 +4,7 @@
import com.doumee.biz.system.SystemUserBiz;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.UpdatePwdDto;
import com.doumee.service.system.SystemLoginService;
@@ -35,8 +36,11 @@
    @ApiOperation("修改当前用户密码")
    @PostMapping("/updatePwd")
    public ApiResponse updatePwd (@RequestHeader(Constants.HEADER_USER_TOKEN) String token, @Validated @RequestBody UpdatePwdDto dto) {
        dto.setUserId(this.getLoginUser(token).getId());
        LoginUserInfo userInfo = this.getLoginUser(token);
        dto.setUserId(userInfo.getId());
        systemUserBiz.updatePwd(dto);
        userInfo.setNeedChangePwd(Constants.ONE);
        updateLoginUser(token,userInfo);//更新登录token中绑定的用户信息为已更新密码
        return ApiResponse.success(null);
    }
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -9,6 +9,7 @@
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.PwdCheckUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.system.SystemDepartmentUserMapper;
import com.doumee.dao.system.dto.*;
@@ -81,6 +82,13 @@
    @Override
    public void updatePwd(UpdatePwdDto dto) {
        //登录密码复杂度校验:6-20个字符,至少包含字母、数字及特殊字符2种
        if(StringUtils.isBlank(dto.getNewPwd())
                ||dto.getNewPwd().length()>20
                ||dto.getNewPwd().length()<6
                ||PwdCheckUtil.checkPassword(dto.getNewPwd())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,密码复杂度不满足要求:6-20个字符,至少包含字母、数字及特殊字符2种");
        }
        SystemUser user = systemUserService.findById(dto.getUserId());
        if (user.getDeleted()) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "用户不存在或已被删除");
@@ -93,6 +101,7 @@
        SystemUser newUser = new SystemUser();
        newUser.setId(dto.getUserId());
        newUser.setPassword(Utils.Secure.encryptPassword(dto.getNewPwd(), user.getSalt()));
        newUser.setNeedChangePwd(Constants.ONE);
        systemUserService.updateById(newUser);
    }
@@ -108,6 +117,7 @@
        updateUserDto.setId(dto.getId());
        updateUserDto.setUpdateUser(dto.getOperaUserId());
        updateUserDto.setPassword(Utils.Secure.encryptPassword(dto.getPassword(), systemUser.getSalt()));
        updateUserDto.setNeedChangePwd(Constants.ZERO);
        systemUserService.updateById(updateUserDto);
    }
@@ -138,6 +148,7 @@
        systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode(), salt));
        systemUser.setSalt(salt);
        systemUser.setSource(Constants.ZERO);
        systemUser.setNeedChangePwd(Constants.ZERO);
        // åˆ›å»ºç”¨æˆ·è®°å½•
        systemUser.setType(Constants.ZERO);
@@ -263,20 +274,27 @@
                    .filter(s->StringUtils.isNotBlank(s))
                    .distinct()
                    .collect(Collectors.toList());
            String pwd =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode();
            if (!CollectionUtils.isEmpty(collect)){
                QueryWrapper<SystemDepartment> wrapper = new QueryWrapper<>();
                wrapper.lambda().in(SystemDepartment::getName,collect);
                List<SystemDepartment> systemDepartments = systemDepartmentService.findList(wrapper);
                Map<Integer, String> collect1 = systemDepartments.stream().collect(Collectors.toMap(s -> s.getId(), s -> s.getName()));
                // ç”Ÿæˆå¯†ç ç›
                dataList.forEach(s->{
                    CreateSystemUserDTO systemUser = new CreateSystemUserDTO();
                    systemUser.setDepartmentId(getKey(collect1,s.getDepartmentName()));
                    systemUser.setUsername(s.getUsername());
                    systemUser.setRealname(s.getUsername());
                    systemUser.setEmpNo(s.getEmpNo());
                    systemUser.setMobile(s.getMobile());
                    systemUser.setPassword(s.getMobile());
                    String salt = RandomStringUtils.randomAlphabetic(6);
//                    systemUser.setPassword(s.getMobile());
                    // ç”Ÿæˆå¯†ç   String pwd =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode();
                    systemUser.setPassword(Utils.Secure.encryptPassword(pwd, salt));
                    systemUser.setNeedChangePwd(Constants.ZERO);
                    systemUser.setSalt(salt);
                    systemUser.setCreateUser(loginUserInfo.getId());
                    systemUser.setUpdateUser(loginUserInfo.getId());
                    systemUser.setType(Constants.ZERO);
@@ -297,7 +315,11 @@
                    systemUser.setRealname(s.getUsername());
                    systemUser.setEmpNo(s.getEmpNo());
                    systemUser.setMobile(s.getMobile());
                    systemUser.setPassword(s.getMobile());
                    // ç”Ÿæˆå¯†ç              String pwd =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode();
                    String salt = RandomStringUtils.randomAlphabetic(6);
                    systemUser.setPassword(Utils.Secure.encryptPassword(pwd, salt));
                    systemUser.setNeedChangePwd(Constants.ZERO);
//                    systemUser.setPassword(s.getMobile());
                    systemUser.setCreateUser(loginUserInfo.getId());
                    systemUser.setUpdateUser(loginUserInfo.getId());
                    systemUser.setType(Constants.ZERO);
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -36,6 +36,7 @@
    private Integer memberId;
    private Integer type;
    private Integer needChangePwd;
    private String mobile;
    private String sessionId;
server/system_service/src/main/java/com/doumee/core/utils/PwdCheckUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.doumee.core.utils;
import java.util.regex.Pattern;
/**
 * Java正则校验密码至少包含:字母数字特殊符号中的2种
 */
public class PwdCheckUtil {
    /**
     * å‡å®šè®¾ç½®å¯†ç æ—¶ï¼Œå¯†ç è§„则为:  å­—母、数字、特殊符号,至少匹配2种
     * åˆ™å¯†ç å¯èƒ½å‡ºçŽ°çš„æƒ…å†µæœ‰ï¼š
     * 1、数字+特殊符号
     * 2、字母+特殊符号
     * 3、字母+数字
     * 4、字母+数字+特殊符号
     * (组合与顺序无关)
     * è§£å†³æ€è·¯ï¼š
     * 1、遍历字符串的字符数组,查看是否包含目标特殊字符,若包含,则标记字符串
     * åŒ…含特殊字符,并替换当前特殊字符为''。
     * 2、判断剩下的字符组成的字符串,是否匹配以下情况
     * - çº¯å­—母
     * - çº¯æ•°å­—
     * - å­—母+数字
     * 3、字符串匹配规则
     * çº¯å­—母+包含特殊字符  ---- åŒ¹é…é€šè¿‡
     * çº¯æ•°å­—+包含特殊字符 ---- åŒ¹é…é€šè¿‡
     * å­—母+数字+包含个数字符 ---- åŒ¹é…é€šè¿‡
     */
    //特殊字符
    public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~";
    // çº¯å­—母
    public static final String character = "[a-zA-Z]{1,}$";
    // çº¯æ•°å­—
    public static final String numberic = "[0-9]{1,}$";
    // å­—母和数字
    public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" +
            "|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$";
    // å­—母或数字
    public static final String number_or_character = "[a-zA-Z0-9]+$";
    // å­—母数字下划线
    public static final String ncw = "\\w+$";
    public static boolean checkPassword(String targetString) {
        String opStr = targetString;
        boolean isLegal = false;
        boolean hasSpecChar = false;
        char[] charArray = opStr.toCharArray();
        for (char c : charArray) {
            if (SPEC_CHARACTERS.contains(String.valueOf(c))) {
                hasSpecChar = true;
                // æ›¿æ¢æ­¤å­—符串
                opStr = opStr.replace(c, ' ');
            }
        }
        String excSpecCharStr = opStr.replace(" ", "");
        boolean isPureNum = Pattern.compile(numberic).matcher(excSpecCharStr).matches();
        boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches();
        boolean isNumAndChar = Pattern.compile(number_and_character).matcher(excSpecCharStr).matches();
        isLegal = ((isPureNum && hasSpecChar)
                || (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar;
        System.out.println("字符串:" + targetString + ",是否符合规则:" + isLegal);
        System.out.println("---------------");
        return isLegal;
    }
    public static void main(String[] args) {
        checkPassword("fasdagd");
        checkPassword("41234123");
        checkPassword("#$%^&&*(");
        checkPassword("fasd$$");
        checkPassword("41234%%%");
        checkPassword("fasd41^(324");
        checkPassword("fa413%^&*");
        checkPassword("&%fa413%^&*");
    }
}
server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -84,6 +84,8 @@
    @ApiModelProperty(value = "创建人", example = "1", hidden = true)
    private Integer createUser;
    @ApiModelProperty(value = "是否需要强制更新密码 0是 1否")
    private Integer needChangePwd;
    @ApiModelProperty(value = "更新人", example = "1", hidden = true)
    private Integer updateUser;
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/WmsPushController.java
@@ -72,7 +72,7 @@
            e.printStackTrace();
            success = Constants.ONE;
        }finally {
            wmsService.saveInterfaceLog("/wms/push/outboundNotice", "推送出库单通知任务",JSONObject.toJSONString(param),success
            wmsService.saveInterfaceLog("/wms/push/outboundNotice", "【WMS】推送出库单通知任务",JSONObject.toJSONString(param),success
                    , JSONObject.toJSONString(result),Constants.ONE);
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -87,8 +87,6 @@
    private PlatformLogMapper platformLogMapper;
    @Autowired
    private PlatformWarnEventServiceImpl platformWarnEventService;
    @Autowired
    private PlatformJobService platformJobService;
    /**
     * æµ·åº·é—¨ç¦äº‹ä»¶æŽ¨é€
     * @param param
@@ -825,75 +823,55 @@
                    .last("limit 1" ));
            if(cars!=null){
                event.setMemberId(cars.getMemberId());
                    if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
                        if(carsMapper.selectCount(new QueryWrapper<Cars>()
                                .lambda().eq(Cars::getCode,event.getPlateNos())
                                .eq(Cars::getType,Constants.ONE)
                                .eq(Cars::getIsdeleted,Constants.ZERO)
                        )>Constants.ZERO){
                            //自有车进场  æŸ¥è¯¢å½“前是否有待签到的任务
                            //查询车辆当前是否存在进行中的任务
                            if(platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
                                    .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                                    .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                                    .in(PlatformJob::getStatus,
                                            Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                            Constants.PlatformJobStatus.CALLED.getKey(),
                                            Constants.PlatformJobStatus.WORKING.getKey(),
                                            Constants.PlatformJobStatus.DONE.getKey(),
                                            Constants.PlatformJobStatus.TRANSFERING.getKey(),
                                            Constants.PlatformJobStatus.EXCEPTION.getKey(),
                                            Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                    )
                            )==Constants.ZERO){
                                PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
                                        .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                                        .in(PlatformJob::getStatus,
                                                Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(),
                                                Constants.PlatformJobStatus.WART_SIGN_IN.getKey()
                                        )
                                        .orderByAsc(PlatformJob::getCreateDate)
                                        .last(" limit 1")
                                );
                                if(Objects.nonNull(platformJob)){
                                    platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey());
                                    platformJob.setArriveDate(new Date());
                                    platformJob.setSingType(Constants.TWO);
                                    platformJob.setSignDate(new Date());
                                    List<PlatformJob> signList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda().apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null  "));
                                    if(CollectionUtils.isEmpty(signList)){
                                        platformJob.setSignNum(Constants.ONE);
                                    } else{
                                        int maxNumber = Collections.max(signList.stream().map(i->i.getSignNum()).collect(Collectors.toList()));
                                        platformJob.setSignNum(maxNumber + Constants.ONE);
                                    }
                                    platformJobMapper.updateById(platformJob);
                                }
                            }
                        }
                    }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){
                        //离场判断是否存在未离场的订单数据 å¤„理订单数据
                        List<PlatformJob> platformJobList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda()
                //自有车  æŸ¥è¯¢å½“前是否有待签到的任务
                if(carsMapper.selectCount(new QueryWrapper<Cars>()
                        .lambda().eq(Cars::getCode,event.getPlateNos())
                        .eq(Cars::getType,Constants.ONE)
                        .eq(Cars::getIsdeleted,Constants.ZERO)
                )>Constants.ZERO){
                    //查询车辆当前是否存在进行中的任务
                    if( platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
                            .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                            .in(PlatformJob::getStatus,
                                    Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                    Constants.PlatformJobStatus.CALLED.getKey(),
                                    Constants.PlatformJobStatus.WORKING.getKey(),
                                    Constants.PlatformJobStatus.DONE.getKey(),
                                    Constants.PlatformJobStatus.TRANSFERING.getKey(),
                                    Constants.PlatformJobStatus.EXCEPTION.getKey(),
                                    Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                            )
                    )==Constants.ZERO){
                        PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
                                .eq(PlatformJob::getCarCodeFront,event.getPlateNos())
                                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                                .in(PlatformJob::getStatus,
                                        Constants.PlatformJobStatus.DONE.getKey(),
                                        Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                ));
                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){
                            for (PlatformJob platformJob:platformJobList) {
                                platformJob.setStatus(Constants.PlatformJobStatus.LEAVED.getKey());
                                platformJob.setOutDate(new Date());
                                platformJob.setEditDate(new Date());
                                platformJob.setOutType(Constants.ZERO);
                                platformJobMapper.updateById(platformJob);
                                //清空授权
                                platformJobService.cancelInPark(platformJob);
                                        Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(),
                                        Constants.PlatformJobStatus.WART_SIGN_IN.getKey()
                                )
                                .orderByAsc(PlatformJob::getCreateDate)
                                .last(" limit 1")
                        );
                        if(Objects.nonNull(platformJob)){
                            platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey());
                            platformJob.setArriveDate(new Date());
                            platformJob.setSingType(Constants.TWO);
                            platformJob.setSignDate(new Date());
                            List<PlatformJob> signList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda().apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null  "));
                            if(CollectionUtils.isEmpty(signList)){
                                platformJob.setSignNum(Constants.ONE);
                            } else{
                                int maxNumber = Collections.max(signList.stream().map(i->i.getSignNum()).collect(Collectors.toList()));
                                platformJob.setSignNum(maxNumber + Constants.ONE);
                            }
                            platformJobMapper.updateById(platformJob);
                        }
                    }
                };
            }else{
                Visits visits =  visitsMapper.selectOne(new QueryWrapper<Visits>().lambda()
                        .eq(Visits::getCarNos,event.getPlateNos())