Merge branch 'main' of http://175.6.124.250:3100/luozhun/policeSecurity
This commit is contained in:
		
						commit
						45a490600f
					
				| 
						 | 
				
			
			@ -2,11 +2,8 @@ package com.changhu.common.db;
 | 
			
		|||
 | 
			
		||||
import cn.hutool.core.lang.Dict;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.IEnum;
 | 
			
		||||
import com.changhu.common.exception.MessageException;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * author: luozhun
 | 
			
		||||
 * desc: BaseEnum
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,8 @@
 | 
			
		|||
package com.changhu.common.db.enums;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.lang.Dict;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.IEnum;
 | 
			
		||||
import com.changhu.common.annotation.IsExtData;
 | 
			
		||||
import com.changhu.common.db.BaseEnum;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
| 
						 | 
				
			
			@ -14,10 +16,21 @@ import lombok.Getter;
 | 
			
		|||
@AllArgsConstructor
 | 
			
		||||
public enum CheckStatus implements BaseEnum<Integer>, IEnum<Integer> {
 | 
			
		||||
 | 
			
		||||
    checked(0, "已审核"),
 | 
			
		||||
    unChecked(1, "未审核"),
 | 
			
		||||
    checked(0, "已审核", "success"),
 | 
			
		||||
    unChecked(1, "未审核", "error"),
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    private final Integer value;
 | 
			
		||||
    private final String label;
 | 
			
		||||
    @IsExtData
 | 
			
		||||
    private final String color;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Object serializer() {
 | 
			
		||||
        return Dict.of(
 | 
			
		||||
                "value", this.getValue(),
 | 
			
		||||
                "label", this.getLabel(),
 | 
			
		||||
                "extData", Dict.of("color", this.color)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
package com.changhu.common.db.enums;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.lang.Dict;
 | 
			
		||||
import com.changhu.common.db.BaseEnum;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package com.changhu.common.db.enums;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.lang.Dict;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.IEnum;
 | 
			
		||||
import com.changhu.common.annotation.IsExtData;
 | 
			
		||||
import com.changhu.common.db.BaseEnum;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,4 +25,12 @@ public enum IsEnable implements BaseEnum<Integer>, IEnum<Integer> {
 | 
			
		|||
    @IsExtData
 | 
			
		||||
    private final String color;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Object serializer() {
 | 
			
		||||
        return Dict.of(
 | 
			
		||||
                "value", this.getValue(),
 | 
			
		||||
                "label", this.getLabel(),
 | 
			
		||||
                "extData", Dict.of("color", this.color)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package com.changhu.common.db.enums;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.IEnum;
 | 
			
		||||
import com.changhu.common.db.BaseEnum;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +12,7 @@ import lombok.Getter;
 | 
			
		|||
 */
 | 
			
		||||
@Getter
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public enum IsOrNot implements BaseEnum<Integer> {
 | 
			
		||||
public enum IsOrNot implements BaseEnum<Integer>, IEnum<Integer> {
 | 
			
		||||
    IS(0, "是"),
 | 
			
		||||
    NOT(1, "否"),
 | 
			
		||||
    ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package com.changhu.common.db.enums;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.IEnum;
 | 
			
		||||
import com.changhu.common.db.BaseEnum;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
| 
						 | 
				
			
			@ -12,7 +13,7 @@ import lombok.Getter;
 | 
			
		|||
 */
 | 
			
		||||
@Getter
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public enum Sex implements BaseEnum<Integer> {
 | 
			
		||||
public enum Sex implements BaseEnum<Integer>, IEnum<Integer> {
 | 
			
		||||
    MAN(0, "男"),
 | 
			
		||||
    WOMAN(1, "女"),
 | 
			
		||||
    UNKNOWN(2, "隐藏");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,10 @@ import lombok.NoArgsConstructor;
 | 
			
		|||
import org.springframework.lang.NonNull;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ package com.changhu.common.validator;
 | 
			
		|||
 | 
			
		||||
import cn.hutool.core.lang.Validator;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import com.changhu.common.utils.ValidatorUtil;
 | 
			
		||||
import com.changhu.common.validator.annotation.IsMobile;
 | 
			
		||||
import jakarta.validation.ConstraintValidator;
 | 
			
		||||
import jakarta.validation.ConstraintValidatorContext;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,12 +8,7 @@ import java.lang.annotation.Documented;
 | 
			
		|||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
 | 
			
		||||
import static java.lang.annotation.ElementType.CONSTRUCTOR;
 | 
			
		||||
import static java.lang.annotation.ElementType.FIELD;
 | 
			
		||||
import static java.lang.annotation.ElementType.METHOD;
 | 
			
		||||
import static java.lang.annotation.ElementType.PARAMETER;
 | 
			
		||||
import static java.lang.annotation.ElementType.TYPE_USE;
 | 
			
		||||
import static java.lang.annotation.ElementType.*;
 | 
			
		||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,11 +23,14 @@ public class WebConfig implements WebMvcConfigurer {
 | 
			
		|||
    private final List<String> whiteList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    public WebConfig() {
 | 
			
		||||
        //todo 要删除的
 | 
			
		||||
        whiteList.add("/managementSuperUser/**");
 | 
			
		||||
 | 
			
		||||
        whiteList.add("/common/**");
 | 
			
		||||
        whiteList.add("/test/**");
 | 
			
		||||
        whiteList.add("/login");
 | 
			
		||||
        whiteList.add("/logout");
 | 
			
		||||
        whiteList.add("/management/getCheckStatus");
 | 
			
		||||
        whiteList.add("/favicon.ico");
 | 
			
		||||
        //druid console
 | 
			
		||||
        whiteList.add("/druid/**");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,6 @@ import io.swagger.v3.oas.annotations.Operation;
 | 
			
		|||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
			
		||||
import jakarta.annotation.PostConstruct;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ package com.changhu.enums.handler;
 | 
			
		|||
 | 
			
		||||
import com.alibaba.fastjson2.JSONObject;
 | 
			
		||||
import com.changhu.common.pojo.vo.TokenInfo;
 | 
			
		||||
import org.apache.poi.ss.formula.functions.T;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
package com.changhu.module.management.controller;
 | 
			
		||||
 | 
			
		||||
import com.changhu.common.annotation.JsonBody;
 | 
			
		||||
import com.changhu.module.management.pojo.params.IndexCheckPassParams;
 | 
			
		||||
import com.changhu.module.management.pojo.params.IndexCheckStatusParams;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.UnitCheckStatusVo;
 | 
			
		||||
import com.changhu.module.management.service.IndexService;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Operation;
 | 
			
		||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:48
 | 
			
		||||
 * @desc IndexController...
 | 
			
		||||
 */
 | 
			
		||||
@Tag(name = "后台-通用接口")
 | 
			
		||||
@JsonBody
 | 
			
		||||
@RequestMapping("/management")
 | 
			
		||||
public class IndexController {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IndexService indexService;
 | 
			
		||||
 | 
			
		||||
    @Operation(summary = "审核通过")
 | 
			
		||||
    @PostMapping("/checkPass")
 | 
			
		||||
    public void checkPass(@RequestBody @Valid IndexCheckPassParams params) {
 | 
			
		||||
        indexService.checkPass(params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Operation(summary = "获取审核状态")
 | 
			
		||||
    @PostMapping("/getCheckStatus")
 | 
			
		||||
    public UnitCheckStatusVo getCheckStatus(@RequestBody @Valid IndexCheckStatusParams params) {
 | 
			
		||||
        return indexService.getCheckStatus(params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ package com.changhu.module.management.controller;
 | 
			
		|||
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.changhu.common.annotation.JsonBody;
 | 
			
		||||
import com.changhu.common.utils.JavaClassToTsUtil;
 | 
			
		||||
import com.changhu.module.management.pojo.queryParams.PoliceUnitPagerQueryParams;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.PoliceUnitPagerVo;
 | 
			
		||||
import com.changhu.module.management.service.PoliceUnitService;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +32,4 @@ public class PoliceUnitController {
 | 
			
		|||
        return policeUnitService.pager(queryParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        System.out.println(JavaClassToTsUtil.parse(PoliceUnitPagerVo.class));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,4 +39,5 @@ public class SecurityUnitController {
 | 
			
		|||
    public void saveOrUpdate(@RequestBody @Valid SecurityUnitSaveOrUpdateParams params) {
 | 
			
		||||
        securityUnitService.saveOrUpdate(params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
package com.changhu.module.management.enums;
 | 
			
		||||
 | 
			
		||||
import com.changhu.module.management.enums.handler.AbstractUnitTypeHandler;
 | 
			
		||||
import com.changhu.module.management.enums.handler.PoliceUnitTypeHandler;
 | 
			
		||||
import com.changhu.module.management.enums.handler.SecurityUnitTypeHandler;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:51
 | 
			
		||||
 * @desc IndexCheckPass...
 | 
			
		||||
 */
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
@Getter
 | 
			
		||||
public enum UnitOptType {
 | 
			
		||||
 | 
			
		||||
    SECURITY_UNIT(new SecurityUnitTypeHandler()),
 | 
			
		||||
    POLICE_UNIT(new PoliceUnitTypeHandler());
 | 
			
		||||
 | 
			
		||||
    private final AbstractUnitTypeHandler handler;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
package com.changhu.module.management.enums.handler;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.extra.spring.SpringUtil;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.UnitCheckStatusVo;
 | 
			
		||||
import org.springframework.transaction.PlatformTransactionManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:53
 | 
			
		||||
 * @desc AbstractCheckPassHandler...
 | 
			
		||||
 */
 | 
			
		||||
public abstract class AbstractUnitTypeHandler {
 | 
			
		||||
 | 
			
		||||
    final PlatformTransactionManager transactionManager = SpringUtil.getBean(PlatformTransactionManager.class);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通过
 | 
			
		||||
     */
 | 
			
		||||
    public abstract void pass(Long checkDataId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取审核状态
 | 
			
		||||
     *
 | 
			
		||||
     * @param onlyCode 唯一代码
 | 
			
		||||
     * @return 审核状态
 | 
			
		||||
     */
 | 
			
		||||
    public abstract UnitCheckStatusVo getCheckStatus(String onlyCode);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,106 @@
 | 
			
		|||
package com.changhu.module.management.enums.handler;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.RandomUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.hutool.extra.spring.SpringUtil;
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
import com.changhu.common.db.enums.IsOrNot;
 | 
			
		||||
import com.changhu.common.db.enums.Sex;
 | 
			
		||||
import com.changhu.common.enums.ResultCode;
 | 
			
		||||
import com.changhu.common.exception.MessageException;
 | 
			
		||||
import com.changhu.common.utils.UserUtil;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.PoliceUnit;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.UnitCheckStatusVo;
 | 
			
		||||
import com.changhu.module.management.service.ManagementPoliceUnitUserService;
 | 
			
		||||
import com.changhu.module.management.service.PoliceUnitService;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.transaction.TransactionStatus;
 | 
			
		||||
import org.springframework.transaction.support.DefaultTransactionDefinition;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午11:03
 | 
			
		||||
 * @desc PoliceUnitTypeHandler...
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class PoliceUnitTypeHandler extends AbstractUnitTypeHandler {
 | 
			
		||||
 | 
			
		||||
    private final PoliceUnitService policeUnitService = SpringUtil.getBean(PoliceUnitService.class);
 | 
			
		||||
 | 
			
		||||
    private final ManagementPoliceUnitUserService policeUnitUserService = SpringUtil.getBean(ManagementPoliceUnitUserService.class);
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
    public void pass(Long checkDataId) {
 | 
			
		||||
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 | 
			
		||||
        TransactionStatus status = transactionManager.getTransaction(def);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            PoliceUnit policeUnit = policeUnitService.getOptById(checkDataId).orElseThrow(() -> new MessageException(ResultCode.DATA_NOT_FOUND));
 | 
			
		||||
            //更新状态
 | 
			
		||||
            boolean update = policeUnitService.lambdaUpdate()
 | 
			
		||||
                    .set(PoliceUnit::getCheckStatus, CheckStatus.checked)
 | 
			
		||||
                    .eq(BaseEntity::getSnowFlakeId, checkDataId)
 | 
			
		||||
                    .update();
 | 
			
		||||
            if (!update) {
 | 
			
		||||
                throw new MessageException(ResultCode.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
            //生成管理员账号密码
 | 
			
		||||
            String passWordEncrypt = UserUtil.passWordEncrypt(UserUtil.DEFAULT_PASSWORD);
 | 
			
		||||
            List<String> saltAndPassWord = StrUtil.split(passWordEncrypt, "$$");
 | 
			
		||||
 | 
			
		||||
            ManagementPoliceUnitUser managementPoliceUnitUser = new ManagementPoliceUnitUser();
 | 
			
		||||
            managementPoliceUnitUser.setPoliceUnitId(policeUnit.getSnowFlakeId());
 | 
			
		||||
            managementPoliceUnitUser.setName("超级管理员");
 | 
			
		||||
            managementPoliceUnitUser.setSex(Sex.UNKNOWN);
 | 
			
		||||
            managementPoliceUnitUser.setAccount(RandomUtil.randomString(6));
 | 
			
		||||
            managementPoliceUnitUser.setTelephone("");
 | 
			
		||||
            managementPoliceUnitUser.setSalt(saltAndPassWord.get(0));
 | 
			
		||||
            managementPoliceUnitUser.setPassword(saltAndPassWord.get(1));
 | 
			
		||||
            managementPoliceUnitUser.setIsAdmin(IsOrNot.IS);
 | 
			
		||||
 | 
			
		||||
            boolean save = policeUnitUserService.save(managementPoliceUnitUser);
 | 
			
		||||
            if (!save) {
 | 
			
		||||
                throw new MessageException(ResultCode.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //提交事务
 | 
			
		||||
            transactionManager.commit(status);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            //回滚事务
 | 
			
		||||
            transactionManager.rollback(status);
 | 
			
		||||
            log.error("公安单位审核通过错误:{}", e.getMessage());
 | 
			
		||||
            throw new MessageException(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public UnitCheckStatusVo getCheckStatus(String onlyCode) {
 | 
			
		||||
        PoliceUnit policeUnit = policeUnitService.lambdaQuery()
 | 
			
		||||
                .eq(PoliceUnit::getCode, onlyCode)
 | 
			
		||||
                .oneOpt()
 | 
			
		||||
                .orElseThrow(() -> new MessageException(ResultCode.DATA_NOT_FOUND));
 | 
			
		||||
 | 
			
		||||
        UnitCheckStatusVo unitCheckStatusVo = new UnitCheckStatusVo();
 | 
			
		||||
        unitCheckStatusVo.setCheckStatus(policeUnit.getCheckStatus());
 | 
			
		||||
 | 
			
		||||
        if (policeUnit.getCheckStatus().equals(CheckStatus.checked)) {
 | 
			
		||||
            ManagementPoliceUnitUser managementPoliceUnitUser = policeUnitUserService.lambdaQuery()
 | 
			
		||||
                    .eq(ManagementPoliceUnitUser::getPoliceUnitId, policeUnit.getSnowFlakeId())
 | 
			
		||||
                    .eq(ManagementPoliceUnitUser::getIsAdmin, IsOrNot.IS)
 | 
			
		||||
                    .oneOpt()
 | 
			
		||||
                    .orElseThrow(() -> new MessageException("超管账号未初始化 请联系管理员"));
 | 
			
		||||
            unitCheckStatusVo.setAccount(managementPoliceUnitUser.getAccount());
 | 
			
		||||
            unitCheckStatusVo.setRemark("恭喜!单位审核通过了,请使用管理员账号前往登录页进行登录.");
 | 
			
		||||
        } else {
 | 
			
		||||
            unitCheckStatusVo.setPassword(null);
 | 
			
		||||
            unitCheckStatusVo.setRemark("单位注册申请正在审核中...");
 | 
			
		||||
        }
 | 
			
		||||
        return unitCheckStatusVo;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,108 @@
 | 
			
		|||
package com.changhu.module.management.enums.handler;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.RandomUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.hutool.extra.spring.SpringUtil;
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.common.db.enums.IsOrNot;
 | 
			
		||||
import com.changhu.common.db.enums.Sex;
 | 
			
		||||
import com.changhu.common.enums.ResultCode;
 | 
			
		||||
import com.changhu.common.exception.MessageException;
 | 
			
		||||
import com.changhu.common.utils.UserUtil;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.ManagementSecurityUnitUser;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.SecurityUnit;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.UnitCheckStatusVo;
 | 
			
		||||
import com.changhu.module.management.service.ManagementSecurityUnitUserService;
 | 
			
		||||
import com.changhu.module.management.service.SecurityUnitService;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.transaction.TransactionStatus;
 | 
			
		||||
import org.springframework.transaction.support.DefaultTransactionDefinition;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:55
 | 
			
		||||
 * @desc SecurityCheckPassHandler...
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class SecurityUnitTypeHandler extends AbstractUnitTypeHandler {
 | 
			
		||||
 | 
			
		||||
    private final SecurityUnitService securityUnitService = SpringUtil.getBean(SecurityUnitService.class);
 | 
			
		||||
 | 
			
		||||
    private final ManagementSecurityUnitUserService securityUnitUserService = SpringUtil.getBean(ManagementSecurityUnitUserService.class);
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void pass(Long checkDataId) {
 | 
			
		||||
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 | 
			
		||||
        TransactionStatus status = transactionManager.getTransaction(def);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            SecurityUnit securityUnit = securityUnitService.getOptById(checkDataId).orElseThrow(() -> new MessageException(ResultCode.DATA_NOT_FOUND));
 | 
			
		||||
            //更新状态
 | 
			
		||||
            boolean update = securityUnitService.lambdaUpdate()
 | 
			
		||||
                    .set(SecurityUnit::getCheckStatus, CheckStatus.checked)
 | 
			
		||||
                    .eq(BaseEntity::getSnowFlakeId, checkDataId)
 | 
			
		||||
                    .update();
 | 
			
		||||
            if (!update) {
 | 
			
		||||
                throw new MessageException(ResultCode.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
            //生成简单的超级管理员账号密码
 | 
			
		||||
            String passWordEncrypt = UserUtil.passWordEncrypt(UserUtil.DEFAULT_PASSWORD);
 | 
			
		||||
            List<String> saltAndPassWord = StrUtil.split(passWordEncrypt, "$$");
 | 
			
		||||
 | 
			
		||||
            ManagementSecurityUnitUser managementSecurityUnitUser = new ManagementSecurityUnitUser();
 | 
			
		||||
            managementSecurityUnitUser.setSecurityUnitId(securityUnit.getSnowFlakeId());
 | 
			
		||||
            managementSecurityUnitUser.setName("超级管理员");
 | 
			
		||||
            managementSecurityUnitUser.setSex(Sex.UNKNOWN);
 | 
			
		||||
            managementSecurityUnitUser.setAccount(RandomUtil.randomString(6));
 | 
			
		||||
            managementSecurityUnitUser.setTelephone("");
 | 
			
		||||
            managementSecurityUnitUser.setSalt(saltAndPassWord.get(0));
 | 
			
		||||
            managementSecurityUnitUser.setPassword(saltAndPassWord.get(1));
 | 
			
		||||
            managementSecurityUnitUser.setIsEnable(IsEnable.TRUE);
 | 
			
		||||
            managementSecurityUnitUser.setIsAdmin(IsOrNot.IS);
 | 
			
		||||
            managementSecurityUnitUser.setRemark("单位审核通过 默认分配超管账号");
 | 
			
		||||
            boolean save = securityUnitUserService.save(managementSecurityUnitUser);
 | 
			
		||||
            if (!save) {
 | 
			
		||||
                throw new MessageException(ResultCode.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //提交事务
 | 
			
		||||
            transactionManager.commit(status);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            //回滚事务
 | 
			
		||||
            transactionManager.rollback(status);
 | 
			
		||||
            log.error("保安单位审核通过错误:{}", e.getMessage());
 | 
			
		||||
            throw new MessageException(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public UnitCheckStatusVo getCheckStatus(String onlyCode) {
 | 
			
		||||
        SecurityUnit securityUnit = securityUnitService.lambdaQuery()
 | 
			
		||||
                .eq(SecurityUnit::getSocialCode, onlyCode)
 | 
			
		||||
                .oneOpt()
 | 
			
		||||
                .orElseThrow(() -> new MessageException(ResultCode.DATA_NOT_FOUND));
 | 
			
		||||
 | 
			
		||||
        UnitCheckStatusVo unitCheckStatusVo = new UnitCheckStatusVo();
 | 
			
		||||
        unitCheckStatusVo.setCheckStatus(securityUnit.getCheckStatus());
 | 
			
		||||
 | 
			
		||||
        if (securityUnit.getCheckStatus().equals(CheckStatus.checked)) {
 | 
			
		||||
            ManagementSecurityUnitUser managementSecurityUnitUser = securityUnitUserService.lambdaQuery()
 | 
			
		||||
                    .eq(ManagementSecurityUnitUser::getSecurityUnitId, securityUnit.getSnowFlakeId())
 | 
			
		||||
                    .eq(ManagementSecurityUnitUser::getIsAdmin, IsOrNot.IS)
 | 
			
		||||
                    .oneOpt()
 | 
			
		||||
                    .orElseThrow(() -> new MessageException("超管账号未初始化 请联系管理员"));
 | 
			
		||||
            unitCheckStatusVo.setAccount(managementSecurityUnitUser.getAccount());
 | 
			
		||||
            unitCheckStatusVo.setRemark("恭喜!单位审核通过了,请使用管理员账号前往登录页进行登录.");
 | 
			
		||||
        } else {
 | 
			
		||||
            unitCheckStatusVo.setPassword(null);
 | 
			
		||||
            unitCheckStatusVo.setRemark("单位注册申请正在审核中...");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return unitCheckStatusVo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -10,6 +10,6 @@ import org.apache.ibatis.annotations.Mapper;
 | 
			
		|||
 * desc 由groovy脚本自动生成
 | 
			
		||||
 */
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface ManagementPoliceUserMapper extends BaseMapper<ManagementPoliceUnitUser> {
 | 
			
		||||
public interface ManagementPoliceUnitUserMapper extends BaseMapper<ManagementPoliceUnitUser> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,6 @@
 | 
			
		|||
package com.changhu.module.management.mapper;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 | 
			
		||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.SecurityUnit;
 | 
			
		||||
import com.changhu.module.management.pojo.queryParams.SecurityUnitPagerQueryParams;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,18 @@
 | 
			
		|||
package com.changhu.module.management.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.common.db.enums.IsOrNot;
 | 
			
		||||
import com.changhu.common.db.enums.Sex;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +46,11 @@ public class ManagementPoliceUnitUser extends BaseEntity implements Serializable
 | 
			
		|||
     */
 | 
			
		||||
    private Sex sex;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 账号
 | 
			
		||||
     */
 | 
			
		||||
    private String account;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 手机号
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,18 @@
 | 
			
		|||
package com.changhu.module.management.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.common.db.enums.IsOrNot;
 | 
			
		||||
import com.changhu.common.db.enums.Sex;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +46,11 @@ public class ManagementSecurityUnitUser extends BaseEntity implements Serializab
 | 
			
		|||
     */
 | 
			
		||||
    private Sex sex;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 账号
 | 
			
		||||
     */
 | 
			
		||||
    private String account;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 手机号
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,17 +1,17 @@
 | 
			
		|||
package com.changhu.module.management.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 后台-超级后台 实体类
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,20 @@
 | 
			
		|||
package com.changhu.module.management.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.module.management.pojo.model.ContactPersonInfo;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,20 @@
 | 
			
		|||
package com.changhu.module.management.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.module.management.pojo.model.LegalPersonInfo;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
package com.changhu.module.management.pojo.params;
 | 
			
		||||
 | 
			
		||||
import com.changhu.module.management.enums.UnitOptType;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:59
 | 
			
		||||
 * @desc IndexCheckPassParams...
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class IndexCheckPassParams {
 | 
			
		||||
    @Schema(description = "审核数据的id")
 | 
			
		||||
    @NotNull(message = "审核数据的id不能为空")
 | 
			
		||||
    private Long checkDataId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "单位类型")
 | 
			
		||||
    @NotNull(message = "单位类型不能为空")
 | 
			
		||||
    private UnitOptType unitOptType;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
package com.changhu.module.management.pojo.params;
 | 
			
		||||
 | 
			
		||||
import com.changhu.module.management.enums.UnitOptType;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午10:51
 | 
			
		||||
 * @desc IndexCheckStatusParams...
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class IndexCheckStatusParams {
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "审核数据的唯一标识")
 | 
			
		||||
    @NotNull(message = "唯一标识不能为空")
 | 
			
		||||
    private String onlyCode;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "单位类型")
 | 
			
		||||
    @NotNull(message = "单位类型不能为空")
 | 
			
		||||
    private UnitOptType unitOptType;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +1,6 @@
 | 
			
		|||
package com.changhu.module.management.pojo.params;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.common.validator.annotation.IsMobile;
 | 
			
		||||
import com.changhu.module.management.pojo.model.LegalPersonInfo;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import jakarta.validation.constraints.NotBlank;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import com.changhu.common.db.enums.CheckStatus;
 | 
			
		|||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.module.management.pojo.model.ContactPersonInfo;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +13,7 @@ import java.time.LocalDateTime;
 | 
			
		|||
 * @createTime 2024/8/30 下午3:55
 | 
			
		||||
 * @desc PoliceUnitPagerVo...
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class PoliceUnitPagerVo {
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "id")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
package com.changhu.module.management.pojo.vo;
 | 
			
		||||
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
import com.changhu.common.utils.UserUtil;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午10:42
 | 
			
		||||
 * @desc SecurityUnitCheckStatusVo...
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class UnitCheckStatusVo {
 | 
			
		||||
 | 
			
		||||
    private CheckStatus checkStatus;
 | 
			
		||||
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
    private String account;
 | 
			
		||||
 | 
			
		||||
    private String password = UserUtil.DEFAULT_PASSWORD;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
package com.changhu.module.management.service;
 | 
			
		||||
 | 
			
		||||
import com.changhu.module.management.pojo.params.IndexCheckPassParams;
 | 
			
		||||
import com.changhu.module.management.pojo.params.IndexCheckStatusParams;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.UnitCheckStatusVo;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:49
 | 
			
		||||
 * @desc IndexService...
 | 
			
		||||
 */
 | 
			
		||||
public interface IndexService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 审核通过
 | 
			
		||||
     *
 | 
			
		||||
     * @param params 审核参数
 | 
			
		||||
     */
 | 
			
		||||
    void checkPass(IndexCheckPassParams params);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取审核状态
 | 
			
		||||
     *
 | 
			
		||||
     * @param params 参数
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    UnitCheckStatusVo getCheckStatus(IndexCheckStatusParams params);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,6 +8,6 @@ import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser;
 | 
			
		|||
 * author: luozhun
 | 
			
		||||
 * desc 由groovy脚本自动生成
 | 
			
		||||
 */
 | 
			
		||||
public interface ManagementPoliceUserService extends IService<ManagementPoliceUnitUser> {
 | 
			
		||||
public interface ManagementPoliceUnitUserService extends IService<ManagementPoliceUnitUser> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -29,4 +29,5 @@ public interface SecurityUnitService extends IService<SecurityUnit> {
 | 
			
		|||
     * @param params 参数
 | 
			
		||||
     */
 | 
			
		||||
    void saveOrUpdate(SecurityUnitSaveOrUpdateParams params);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
package com.changhu.module.management.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.changhu.module.management.pojo.params.IndexCheckPassParams;
 | 
			
		||||
import com.changhu.module.management.pojo.params.IndexCheckStatusParams;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.UnitCheckStatusVo;
 | 
			
		||||
import com.changhu.module.management.service.IndexService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author 20252
 | 
			
		||||
 * @createTime 2024/9/2 上午9:49
 | 
			
		||||
 * @desc IndexServiceImpl...
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class IndexServiceImpl implements IndexService {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void checkPass(IndexCheckPassParams params) {
 | 
			
		||||
        params.getUnitOptType()
 | 
			
		||||
                .getHandler()
 | 
			
		||||
                .pass(params.getCheckDataId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public UnitCheckStatusVo getCheckStatus(IndexCheckStatusParams params) {
 | 
			
		||||
        return params.getUnitOptType()
 | 
			
		||||
                .getHandler()
 | 
			
		||||
                .getCheckStatus(params.getOnlyCode());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,9 @@
 | 
			
		|||
package com.changhu.module.management.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import com.changhu.module.management.mapper.ManagementPoliceUserMapper;
 | 
			
		||||
import com.changhu.module.management.mapper.ManagementPoliceUnitUserMapper;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser;
 | 
			
		||||
import com.changhu.module.management.service.ManagementPoliceUserService;
 | 
			
		||||
import com.changhu.module.management.service.ManagementPoliceUnitUserService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +12,6 @@ import org.springframework.stereotype.Service;
 | 
			
		|||
 * desc 由groovy脚本自动生成
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class ManagementPoliceUserServiceImpl extends ServiceImpl<ManagementPoliceUserMapper, ManagementPoliceUnitUser> implements ManagementPoliceUserService {
 | 
			
		||||
public class ManagementPoliceUnitUserServiceImpl extends ServiceImpl<ManagementPoliceUnitUserMapper, ManagementPoliceUnitUser> implements ManagementPoliceUnitUserService {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,28 +1,18 @@
 | 
			
		|||
package com.changhu.module.management.service.impl;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.bean.BeanUtil;
 | 
			
		||||
import com.changhu.common.utils.JavaClassToTsUtil;
 | 
			
		||||
import com.changhu.module.management.pojo.model.LegalPersonInfo;
 | 
			
		||||
import com.changhu.module.management.pojo.params.SecurityUnitSaveOrUpdateParams;
 | 
			
		||||
import com.google.common.collect.Lists;
 | 
			
		||||
import com.changhu.common.db.enums.IsEnable;
 | 
			
		||||
import com.changhu.common.db.enums.CheckStatus;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import com.changhu.common.utils.JavaClassToTsUtil;
 | 
			
		||||
import com.changhu.module.management.mapper.SecurityUnitMapper;
 | 
			
		||||
import com.changhu.module.management.pojo.entity.SecurityUnit;
 | 
			
		||||
import com.changhu.module.management.pojo.params.SecurityUnitSaveOrUpdateParams;
 | 
			
		||||
import com.changhu.module.management.pojo.queryParams.SecurityUnitPagerQueryParams;
 | 
			
		||||
import com.changhu.module.management.pojo.vo.SecurityUnitPagerVo;
 | 
			
		||||
import com.changhu.module.management.service.SecurityUnitService;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.params.PageParams;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -35,27 +25,7 @@ public class SecurityUnitServiceImpl extends ServiceImpl<SecurityUnitMapper, Sec
 | 
			
		|||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Page<SecurityUnitPagerVo> pager(PageParams<SecurityUnitPagerQueryParams, SecurityUnitPagerVo> queryParams) {
 | 
			
		||||
        Page<SecurityUnitPagerVo> page = queryParams.getPage();
 | 
			
		||||
        SecurityUnitPagerQueryParams params = queryParams.getParams();
 | 
			
		||||
        LambdaQueryWrapper<SecurityUnit> wrapper = Wrappers.<SecurityUnit>lambdaQuery()
 | 
			
		||||
                .like(StrUtil.isNotEmpty(params.getName()), SecurityUnit::getName, params.getName())
 | 
			
		||||
                .like(StrUtil.isNotEmpty(params.getSocialCode()), SecurityUnit::getSocialCode, params.getSocialCode());
 | 
			
		||||
 | 
			
		||||
        if (params.getCheckStatus() != null) {
 | 
			
		||||
            wrapper.eq(SecurityUnit::getCheckStatus, params.getCheckStatus().getValue());
 | 
			
		||||
        }
 | 
			
		||||
        if (params.getIsEnable() != null) {
 | 
			
		||||
            wrapper.eq(SecurityUnit::getIsEnable, params.getIsEnable().getValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        List<String> administrativeDivisionCodes = params.getAdministrativeDivisionCodes();
 | 
			
		||||
        if (administrativeDivisionCodes != null) {
 | 
			
		||||
            wrapper.eq(!administrativeDivisionCodes.isEmpty(), SecurityUnit::getProvince, administrativeDivisionCodes.get(0));
 | 
			
		||||
            wrapper.eq(administrativeDivisionCodes.size() >= 2, SecurityUnit::getCity, administrativeDivisionCodes.get(1));
 | 
			
		||||
            wrapper.eq(administrativeDivisionCodes.size() >= 3, SecurityUnit::getDistricts, administrativeDivisionCodes.get(2));
 | 
			
		||||
            wrapper.eq(administrativeDivisionCodes.size() >= 4, SecurityUnit::getStreet, administrativeDivisionCodes.get(3));
 | 
			
		||||
        }
 | 
			
		||||
        return baseMapper.pager(page, params);
 | 
			
		||||
        return baseMapper.pager(queryParams.getPage(), queryParams.getParams());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,16 @@
 | 
			
		|||
package com.changhu.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
import com.changhu.support.mybatisplus.pojo.entity.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.SuperBuilder;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 全国行政区划表(2023/12/04) 实体类
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,10 +2,8 @@ package com.changhu.pojo.params;
 | 
			
		|||
 | 
			
		||||
import com.changhu.module.management.pojo.model.LegalPersonInfo;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
import jakarta.validation.constraints.NotBlank;
 | 
			
		||||
import jakarta.validation.constraints.NotEmpty;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ package com.changhu.service.impl;
 | 
			
		|||
 | 
			
		||||
import cn.hutool.core.bean.BeanUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.toolkit.Db;
 | 
			
		||||
import com.changhu.common.enums.ResultCode;
 | 
			
		||||
import com.changhu.common.exception.MessageException;
 | 
			
		||||
import com.changhu.common.pojo.model.JsonResult;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,6 @@
 | 
			
		|||
package com.changhu.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.changhu.common.pojo.vo.TokenInfo;
 | 
			
		||||
import com.changhu.enums.ClientType;
 | 
			
		||||
import com.changhu.enums.handler.AbstractLoginHandler;
 | 
			
		||||
import com.changhu.pojo.params.LoginParams;
 | 
			
		||||
import com.changhu.service.LoginService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,6 @@ import com.changhu.common.annotation.Desensitized;
 | 
			
		|||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
package com.changhu.support.mybatisplus.pojo.entity;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.*;
 | 
			
		||||
import com.changhu.common.db.enums.DeleteFlag;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
package com.changhu.support.ws.manager;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.fastjson2.JSON;
 | 
			
		||||
import com.changhu.support.ws.enums.WsMsgType;
 | 
			
		||||
import com.changhu.support.ws.pojo.dto.WsMsgDTO;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.web.socket.TextMessage;
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +8,6 @@ import org.springframework.web.socket.WebSocketSession;
 | 
			
		|||
import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,6 @@ import com.changhu.support.ws.manager.UserConnectWebsocketManager;
 | 
			
		|||
import com.changhu.support.ws.pojo.dto.WsMsgDTO;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
import org.springframework.web.socket.CloseStatus;
 | 
			
		||||
import org.springframework.web.socket.TextMessage;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,28 +1,43 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 | 
			
		||||
<mapper namespace="com.changhu.module.management.mapper.PoliceUnitMapper">
 | 
			
		||||
    <select id="pager" resultType="com.changhu.module.management.pojo.vo.PoliceUnitPagerVo">
 | 
			
		||||
        select *
 | 
			
		||||
        from police_unit
 | 
			
		||||
        where delete_flag = 0
 | 
			
		||||
        <if test="params.name!=null and params.name!=''">and name like concat('%',#{params.name},'%')</if>
 | 
			
		||||
        <if test="params.code!=null and params.code!=''">and code like concat('%',#{params.code},'%')</if>
 | 
			
		||||
    <resultMap id="PoliceUnitPagerVoResultMap" type="com.changhu.module.management.pojo.vo.PoliceUnitPagerVo">
 | 
			
		||||
        <result
 | 
			
		||||
                column="contact_person_info"
 | 
			
		||||
                typeHandler="com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler"
 | 
			
		||||
                property="contactPersonInfo"/>
 | 
			
		||||
    </resultMap>
 | 
			
		||||
    <select id="pager" resultMap="PoliceUnitPagerVoResultMap">
 | 
			
		||||
        select
 | 
			
		||||
            pu.*,
 | 
			
		||||
            ad1.name as provinceName,
 | 
			
		||||
            ad2.name as cityName,
 | 
			
		||||
            ad3.name as districtsName,
 | 
			
		||||
            ad4.name as streetName
 | 
			
		||||
        from police_unit pu
 | 
			
		||||
            left join administrative_division ad1 on pu.province = ad1.code and ad1.delete_flag = 0
 | 
			
		||||
            left join administrative_division ad2 on pu.city = ad2.code and ad2.delete_flag = 0
 | 
			
		||||
            left join administrative_division ad3 on pu.districts = ad3.code and ad3.delete_flag = 0
 | 
			
		||||
            left join administrative_division ad4 on pu.street = ad4.code and ad4.delete_flag = 0
 | 
			
		||||
        where pu.delete_flag = 0
 | 
			
		||||
        <if test="params.name!=null and params.name!=''">and pu.name like concat('%',#{params.name},'%')</if>
 | 
			
		||||
        <if test="params.code!=null and params.code!=''">and pu.code like concat('%',#{params.code},'%')</if>
 | 
			
		||||
        <if test="params.administrativeDivisionCodes!=null">
 | 
			
		||||
            <if test="params.administrativeDivisionCodes.size>=1">
 | 
			
		||||
                and province = #{params.administrativeDivisionCodes[0]}
 | 
			
		||||
                and pu.province = #{params.administrativeDivisionCodes[0]}
 | 
			
		||||
            </if>
 | 
			
		||||
            <if test="params.administrativeDivisionCodes.size>=2">
 | 
			
		||||
                and city = #{params.administrativeDivisionCodes[1]}
 | 
			
		||||
                and pu.city = #{params.administrativeDivisionCodes[1]}
 | 
			
		||||
            </if>
 | 
			
		||||
            <if test="params.administrativeDivisionCodes.size>=3">
 | 
			
		||||
                and districts = #{params.administrativeDivisionCodes[2]}
 | 
			
		||||
                and pu.districts = #{params.administrativeDivisionCodes[2]}
 | 
			
		||||
            </if>
 | 
			
		||||
            <if test="params.administrativeDivisionCodes.size>=4">
 | 
			
		||||
                and street = #{params.administrativeDivisionCodes[3]}
 | 
			
		||||
                and pu.street = #{params.administrativeDivisionCodes[3]}
 | 
			
		||||
            </if>
 | 
			
		||||
            order by create_time desc
 | 
			
		||||
        </if>
 | 
			
		||||
        <if test="params.isEnable!=null">and is_enable = #{params.isEnable.value}</if>
 | 
			
		||||
        <if test="params.checkStatus!=null">and check_status = #{params.checkStatus.value}</if>
 | 
			
		||||
        <if test="params.isEnable!=null">and pu.is_enable = #{params.isEnable.value}</if>
 | 
			
		||||
        <if test="params.checkStatus!=null">and pu.check_status = #{params.checkStatus.value}</if>
 | 
			
		||||
        order by pu.create_time desc
 | 
			
		||||
    </select>
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,34 +1,50 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 | 
			
		||||
<mapper namespace="com.changhu.module.management.mapper.SecurityUnitMapper">
 | 
			
		||||
    <select id="pager" resultType="com.changhu.module.management.pojo.vo.SecurityUnitPagerVo">
 | 
			
		||||
    <resultMap id="SecurityUnitPagerVoResultMap" type="com.changhu.module.management.pojo.vo.SecurityUnitPagerVo">
 | 
			
		||||
        <result
 | 
			
		||||
                column="legal_person_info"
 | 
			
		||||
                typeHandler="com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler"
 | 
			
		||||
                property="legalPersonInfo"/>
 | 
			
		||||
    </resultMap>
 | 
			
		||||
    <select id="pager" resultMap="SecurityUnitPagerVoResultMap">
 | 
			
		||||
        select
 | 
			
		||||
        *
 | 
			
		||||
        from security_unit
 | 
			
		||||
            su.*,
 | 
			
		||||
            ad1.name as provinceName,
 | 
			
		||||
            ad2.name as cityName,
 | 
			
		||||
            ad3.name as districtsName,
 | 
			
		||||
            ad4.name as streetName
 | 
			
		||||
        from
 | 
			
		||||
            security_unit su
 | 
			
		||||
            left join administrative_division ad1 on su.province = ad1.code and ad1.delete_flag = 0
 | 
			
		||||
            left join administrative_division ad2 on su.city = ad2.code and ad2.delete_flag = 0
 | 
			
		||||
            left join administrative_division ad3 on su.districts = ad3.code and ad3.delete_flag = 0
 | 
			
		||||
            left join administrative_division ad4 on su.street = ad4.code and ad4.delete_flag = 0
 | 
			
		||||
        where
 | 
			
		||||
        delete_flag = 0
 | 
			
		||||
            su.delete_flag = 0
 | 
			
		||||
            <if test="params.name!=null and params.name!=''">
 | 
			
		||||
            and name like concat('%',#{params.name},'%')
 | 
			
		||||
                and su.name like concat('%',#{params.name},'%')
 | 
			
		||||
            </if>
 | 
			
		||||
            <if test="params.socialCode!=null and params.socialCode!=''">
 | 
			
		||||
            and socialCode like concat('%',#{params.socialCode},'%')
 | 
			
		||||
                and su.socialCode like concat('%',#{params.socialCode},'%')
 | 
			
		||||
            </if>
 | 
			
		||||
            <if test="params.administrativeDivisionCodes!=null">
 | 
			
		||||
                <if test="params.administrativeDivisionCodes.size>=1">
 | 
			
		||||
                and province = #{params.administrativeDivisionCodes[0]}
 | 
			
		||||
                    and su.province = #{params.administrativeDivisionCodes[0]}
 | 
			
		||||
                </if>
 | 
			
		||||
                <if test="params.administrativeDivisionCodes.size>=2">
 | 
			
		||||
                and city = #{params.administrativeDivisionCodes[1]}
 | 
			
		||||
                    and su.city = #{params.administrativeDivisionCodes[1]}
 | 
			
		||||
                </if>
 | 
			
		||||
                <if test="params.administrativeDivisionCodes.size>=3">
 | 
			
		||||
                and districts = #{params.administrativeDivisionCodes[2]}
 | 
			
		||||
                    and su.districts = #{params.administrativeDivisionCodes[2]}
 | 
			
		||||
                </if>
 | 
			
		||||
                <if test="params.administrativeDivisionCodes.size>=4">
 | 
			
		||||
                and street = #{params.administrativeDivisionCodes[3]}
 | 
			
		||||
                    and su.street = #{params.administrativeDivisionCodes[3]}
 | 
			
		||||
                </if>
 | 
			
		||||
            order by create_time desc
 | 
			
		||||
                order by su.create_time desc
 | 
			
		||||
            </if>
 | 
			
		||||
        <if test="params.isEnable!=null">and is_enable = #{params.isEnable.value}</if>
 | 
			
		||||
        <if test="params.checkStatus!=null">and check_status = #{params.checkStatus.value}</if>
 | 
			
		||||
            <if test="params.isEnable!=null">and su.is_enable = #{params.isEnable.value}</if>
 | 
			
		||||
            <if test="params.checkStatus!=null">and su.check_status = #{params.checkStatus.value}</if>
 | 
			
		||||
        order by su.create_time desc
 | 
			
		||||
    </select>
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,11 @@ VITE_DROP_CONSOLE=false
 | 
			
		|||
 | 
			
		||||
# axios
 | 
			
		||||
VITE_APP_BASE_API=/api
 | 
			
		||||
VITE_APP_PROXY_URL=http://localhost:8765
 | 
			
		||||
VITE_APP_PROXY_URL=http://172.10.10.151:8765
 | 
			
		||||
 | 
			
		||||
# rsa 公钥
 | 
			
		||||
VITE_APP_RSA_PUBLIC_KEY=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJps/EXxxSpEM1Ix4R0NWIOBciHCr7P7coDT8tNKfelgR7txcJOqHCO/MIWe7T04aHQTcpQxqx9hMca7dbqz8TZpz9jvLzE/6ZonVKxHsoFnNlHMp1/CPAJ9f6D9wYicum2KltJkmQ0g//D9W2zPCYoGOmSRFcZx/KEBa4EM53jQIDAQAB
 | 
			
		||||
 | 
			
		||||
# minio
 | 
			
		||||
VITE_APP_MINIO_URL=http://118.253.177.137:9000
 | 
			
		||||
VITE_APP_MINIO_BUCKET=police-security-dev
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,3 +23,7 @@ dist-ssr
 | 
			
		|||
*.njsproj
 | 
			
		||||
*.sln
 | 
			
		||||
*.sw?
 | 
			
		||||
 | 
			
		||||
package-lock.json
 | 
			
		||||
yarn.lock
 | 
			
		||||
components.d.ts
 | 
			
		||||
| 
						 | 
				
			
			@ -17,9 +17,12 @@
 | 
			
		|||
    "pinia-plugin-persistedstate": "^3.2.0",
 | 
			
		||||
    "sass": "^1.77.8",
 | 
			
		||||
    "vue": "^3.4.37",
 | 
			
		||||
    "vue-router": "4"
 | 
			
		||||
    "vue-router": "4",
 | 
			
		||||
    "vue-uuid": "^3.0.0",
 | 
			
		||||
    "lodash-es": "^4.17.21"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/lodash-es": "^4.17.8",
 | 
			
		||||
    "@types/node": "^22.5.1",
 | 
			
		||||
    "@vitejs/plugin-vue": "^5.1.2",
 | 
			
		||||
    "@vitejs/plugin-vue-jsx": "^4.0.1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts" setup>
 | 
			
		||||
import {ref} from 'vue'
 | 
			
		||||
import {FormInstance, message, notification} from "ant-design-vue";
 | 
			
		||||
import {FormInstance, notification} from "ant-design-vue";
 | 
			
		||||
import {Rule} from "ant-design-vue/es/form";
 | 
			
		||||
import {LoginParams} from "@/types/views/login.ts";
 | 
			
		||||
import api from "@/axios";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,95 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div class="simpleUploadDiv">
 | 
			
		||||
    <a-progress v-if="uploading" type="circle" :percent="percent"/>
 | 
			
		||||
    <a-image
 | 
			
		||||
        height="80%"
 | 
			
		||||
        v-else
 | 
			
		||||
        :src="minioBaseUrl+modelValue"
 | 
			
		||||
        alt="avatar"/>
 | 
			
		||||
    <a-button class="btn-success" @click="selectFile">{{ btnLabel }}</a-button>
 | 
			
		||||
    <input id="myFileInput" type="file" style="display: none"/>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import {message} from "ant-design-vue";
 | 
			
		||||
import {onMounted, onUnmounted, ref} from "vue";
 | 
			
		||||
import {generateSimpleObjectName, getResignedObjectUrl} from "@/utils/minioUtil";
 | 
			
		||||
import axios, {CancelTokenSource} from "axios";
 | 
			
		||||
import {convertFileSizeToStr} from "@/utils/index.ts";
 | 
			
		||||
 | 
			
		||||
const minioBaseUrl = __APP_ENV.VITE_APP_MINIO_URL
 | 
			
		||||
 | 
			
		||||
const modelValue = defineModel<string>('value')
 | 
			
		||||
const props = withDefaults(defineProps<{
 | 
			
		||||
  parentDir?: string,
 | 
			
		||||
  allowedExtensions?: string[],
 | 
			
		||||
  maxSize?: number,
 | 
			
		||||
  width?: string | number,
 | 
			
		||||
  height?: string | number,
 | 
			
		||||
  btnLabel?: string
 | 
			
		||||
}>(), {
 | 
			
		||||
  parentDir: '',
 | 
			
		||||
  allowedExtensions: () => ['jpg', 'jpeg', 'png', 'gif'],
 | 
			
		||||
  maxSize: 1024 * 1024 * 4,
 | 
			
		||||
  width: '150px',
 | 
			
		||||
  height: '150px',
 | 
			
		||||
  btnLabel: '选择图片'
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const uploading = ref(false)
 | 
			
		||||
const percent = ref(0)
 | 
			
		||||
let cancelToken: CancelTokenSource | null = null
 | 
			
		||||
 | 
			
		||||
const selectFile = () => {
 | 
			
		||||
  document.getElementById('myFileInput')?.click()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function inputFileListener(this: HTMLInputElement) {
 | 
			
		||||
  const selectedFile: File = this.files?.[0] as File;
 | 
			
		||||
  const fileExtension = selectedFile.name?.split('.').pop().toLowerCase() as string;
 | 
			
		||||
  if (!props.allowedExtensions.includes(fileExtension)) {
 | 
			
		||||
    return message.error(`错误:不支持的文件格式,目前支持:【${props.allowedExtensions}】`)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const isMax = selectedFile.size > props.maxSize;
 | 
			
		||||
  if (isMax) {
 | 
			
		||||
    return message.error(`文件大小超出限制,最大支持:【${convertFileSizeToStr(props.maxSize)}】`);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  cancelToken?.cancel();
 | 
			
		||||
  percent.value = 0;
 | 
			
		||||
  uploading.value = true;
 | 
			
		||||
 | 
			
		||||
  const objectName = generateSimpleObjectName(selectedFile.name, props.parentDir)
 | 
			
		||||
  const uploadUrl = await getResignedObjectUrl(__APP_ENV.VITE_APP_MINIO_BUCKET, objectName);
 | 
			
		||||
  cancelToken = axios.CancelToken.source()
 | 
			
		||||
  await axios.put(uploadUrl, selectedFile, {
 | 
			
		||||
    cancelToken: cancelToken.token,
 | 
			
		||||
    onUploadProgress: (progressEvent) => {
 | 
			
		||||
      percent.value = (progressEvent.loaded / (progressEvent.total as number) * 100 | 0)
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  modelValue.value = '/' + __APP_ENV.VITE_APP_MINIO_BUCKET + objectName;
 | 
			
		||||
  uploading.value = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  document.getElementById('myFileInput')?.addEventListener('change', inputFileListener);
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
onUnmounted(() => {
 | 
			
		||||
  document.getElementById('myFileInput')?.removeEventListener('change', inputFileListener);
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.simpleUploadDiv {
 | 
			
		||||
  width: v-bind(width);
 | 
			
		||||
  height: v-bind(height);
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,2 +1,2 @@
 | 
			
		|||
export const CLIENT_TYPE = "MANAGEMENT_SUPER";
 | 
			
		||||
export const ROUTER_WHITE_LIST: string[] = ['/login', '/test'];
 | 
			
		||||
export const ROUTER_WHITE_LIST: string[] = ['/login', '/test','/enterprise'];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,56 @@ interface JsonResult<T> {
 | 
			
		|||
    message: string;
 | 
			
		||||
    data?: T;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 选择
 | 
			
		||||
 */
 | 
			
		||||
class SelectNodeVo<T, E = Record<string, any>> {
 | 
			
		||||
    value: T;
 | 
			
		||||
    label: string;
 | 
			
		||||
    options?: SelectNodeVo<T>[]
 | 
			
		||||
    orderIndex?: number;
 | 
			
		||||
    disabled?: boolean;
 | 
			
		||||
    extData?: E
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 树
 | 
			
		||||
 */
 | 
			
		||||
class TreeNodeVo<T, E = Record<string, any>> {
 | 
			
		||||
    value: T;
 | 
			
		||||
    parentValue: T;
 | 
			
		||||
    label: string;
 | 
			
		||||
    orderIndex?: number;
 | 
			
		||||
    children?: TreeNodeVo<T>[]
 | 
			
		||||
    extData?: E;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 栅格布局
 | 
			
		||||
 */
 | 
			
		||||
declare interface Grid {
 | 
			
		||||
    //栅格占据的列数
 | 
			
		||||
    span?: number;
 | 
			
		||||
    //栅格左侧的间隔格数
 | 
			
		||||
    offset?: number;
 | 
			
		||||
    //栅格向右移动格数
 | 
			
		||||
    push?: number;
 | 
			
		||||
    //栅格向左移动格数
 | 
			
		||||
    pull?: number;
 | 
			
		||||
    //<768px 响应式栅格数或者栅格属性对象
 | 
			
		||||
    xs?: number;
 | 
			
		||||
    //≥768px 响应式栅格数或者栅格属性对象
 | 
			
		||||
    sm?: number;
 | 
			
		||||
    //≥992px 响应式栅格数或者栅格属性对象
 | 
			
		||||
    md?: number;
 | 
			
		||||
    //≥1200px 响应式栅格数或者栅格属性对象
 | 
			
		||||
    lg?: number;
 | 
			
		||||
    //≥1920px 响应式栅格数或者栅格属性对象
 | 
			
		||||
    xl?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface BaseEnum<T> {
 | 
			
		||||
    value: T;
 | 
			
		||||
    label: string
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ router.beforeEach(async (to, from, next) => {
 | 
			
		|||
    if (ROUTER_WHITE_LIST.includes(to.path)) {
 | 
			
		||||
        return next();
 | 
			
		||||
    }
 | 
			
		||||
    //不在白名单内需要查看是否携带token 没有token需要返回登录页进行登录
 | 
			
		||||
    // 不在白名单内需要查看是否携带token 没有token需要返回登录页进行登录
 | 
			
		||||
    if (!userStore.getTokenInfo?.value) {
 | 
			
		||||
        await message.warn('未找到token,请重新登陆!')
 | 
			
		||||
        return next('/login');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,14 @@
 | 
			
		|||
import {RouteRecordRaw} from "vue-router";
 | 
			
		||||
 | 
			
		||||
export const staticRouter: RouteRecordRaw[] = [
 | 
			
		||||
    {
 | 
			
		||||
        path: '/enterprise',
 | 
			
		||||
        name: 'enterprise',
 | 
			
		||||
        meta: {
 | 
			
		||||
            title: '企业入驻',
 | 
			
		||||
        },
 | 
			
		||||
        component: () => import("@/views/enterprise.vue"),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        path: '/login',
 | 
			
		||||
        name: 'login',
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +19,13 @@ export const staticRouter: RouteRecordRaw[] = [
 | 
			
		|||
    }, {
 | 
			
		||||
        path: "/",
 | 
			
		||||
        redirect: '/index',
 | 
			
		||||
    }, {
 | 
			
		||||
        path: '/test',
 | 
			
		||||
        name: 'test',
 | 
			
		||||
        meta: {
 | 
			
		||||
            title: '测试',
 | 
			
		||||
        },
 | 
			
		||||
        component: () => import("@/views/test.vue"),
 | 
			
		||||
    }, {
 | 
			
		||||
        path: '/layout',
 | 
			
		||||
        name: 'layout',
 | 
			
		||||
| 
						 | 
				
			
			@ -29,5 +44,5 @@ export const staticRouter: RouteRecordRaw[] = [
 | 
			
		|||
                component: () => import('@/views/index.vue')
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
import {ceil, divide} from "lodash-es";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 将文件大小转为字符串格式
 | 
			
		||||
 * @param fileSizeInBytes
 | 
			
		||||
 */
 | 
			
		||||
export const convertFileSizeToStr = (fileSizeInBytes: number): string => {
 | 
			
		||||
    if (fileSizeInBytes < 1024) {
 | 
			
		||||
        return fileSizeInBytes + "B";
 | 
			
		||||
    } else if (fileSizeInBytes < 1024 * 1024) {
 | 
			
		||||
        return (ceil(divide(fileSizeInBytes, 1024), 2)) + "KB";
 | 
			
		||||
    } else if (fileSizeInBytes < 1024 * 1024 * 1024) {
 | 
			
		||||
        return (ceil(divide(fileSizeInBytes, (1024 * 1024)), 2)) + "MB";
 | 
			
		||||
    } else {
 | 
			
		||||
        return (ceil(divide(fileSizeInBytes, (1024 * 1024 * 1024)), 2)) + "GB";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
import api from "@/axios";
 | 
			
		||||
import dayjs from "dayjs";
 | 
			
		||||
import {uuid} from "vue-uuid";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 生成一个简单的对象文件地址
 | 
			
		||||
 * @param fileName 原始文件名
 | 
			
		||||
 * @param parentDir 上级目录
 | 
			
		||||
 */
 | 
			
		||||
export const generateSimpleObjectName = (fileName: string, parentDir?: String): string => {
 | 
			
		||||
    let objectName = parentDir + dayjs().format('/YYYY/MM/DD/') + uuid.v4().replace(/-/g, '');
 | 
			
		||||
    if (fileName && fileName.length > 0) {
 | 
			
		||||
        objectName += fileName.substring(fileName.lastIndexOf('.'))
 | 
			
		||||
    }
 | 
			
		||||
    return objectName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 获取生成预签名的 URL
 | 
			
		||||
 */
 | 
			
		||||
export const getResignedObjectUrl = async (bucketName: string, objectName: string): Promise<string> => {
 | 
			
		||||
    return (await api.get<string>('/common/getResignedObjectUrl', {
 | 
			
		||||
        bucketName,
 | 
			
		||||
        objectName
 | 
			
		||||
    })).data as string;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,182 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div class="enterprise">
 | 
			
		||||
      <div class="enterpriseIndex">
 | 
			
		||||
        <div class="enterpriseItem">
 | 
			
		||||
          <a-tabs v-model:activeKey="activeKey" :tabBarGutter="300" centered >
 | 
			
		||||
            <a-tab-pane key="1" tab="企业入驻">
 | 
			
		||||
              <a-form
 | 
			
		||||
                  ref="formDateRef"
 | 
			
		||||
                  :rules="rules"
 | 
			
		||||
                  :label-col="labelCol"
 | 
			
		||||
                  :wrapper-col="wrapperCol"
 | 
			
		||||
                  layout="horizontal"
 | 
			
		||||
                  :model="formDate"
 | 
			
		||||
                  @finish="onFinish"
 | 
			
		||||
              >
 | 
			
		||||
                <a-form-item label="名称" name="name">
 | 
			
		||||
                  <a-input v-model:value="formDate.name" />
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="统一社会编码" name="socialCode">
 | 
			
		||||
                  <a-input v-model:value="formDate.socialCode"/>
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="公司性质" name="nature">
 | 
			
		||||
                  <a-input v-model:value="formDate.nature"/>
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="行政区划" >
 | 
			
		||||
                  <a-cascader v-model:value="formDate.administrativeDivisionCodes" :show-search="{ filter }" :options="administrativeDivisionTree" @change="searchAdministrativeDivisionTree" />
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="营业执照" name="businessLicense">
 | 
			
		||||
                  <SingleImageFileUpload v-model:value="formDate.businessLicense"></SingleImageFileUpload>
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="法人名字">
 | 
			
		||||
                  <a-input v-model:value="formDate.legalPersonInfo" />
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="法人手机号码">
 | 
			
		||||
                  <a-input v-model:value="formDate.telephone" />
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
                <a-form-item label="详细地址" >
 | 
			
		||||
                  <a-input v-model:value="formDate.address" />
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
 | 
			
		||||
                <a-form-item :wrapper-col="{ offset: 8, span: 16 }">
 | 
			
		||||
                  <a-button type="primary" html-type="submit" style="width: 100px">确认</a-button>
 | 
			
		||||
                </a-form-item>
 | 
			
		||||
              </a-form>
 | 
			
		||||
            </a-tab-pane>
 | 
			
		||||
            <a-tab-pane key="2" tab="查询企业状态" >
 | 
			
		||||
 | 
			
		||||
            </a-tab-pane>
 | 
			
		||||
          </a-tabs>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import {ref, onMounted} from 'vue';
 | 
			
		||||
import type { Rule } from 'ant-design-vue/es/form';
 | 
			
		||||
import type { ShowSearchType } from 'ant-design-vue/es/cascader';
 | 
			
		||||
import api from "@/axios";
 | 
			
		||||
import { message } from 'ant-design-vue';
 | 
			
		||||
import SingleImageFileUpload from "@/components/upload/SingleImageFileUpload.vue";
 | 
			
		||||
const activeKey = ref('1');
 | 
			
		||||
const labelCol = { style: { width: '120px' } };
 | 
			
		||||
const wrapperCol = { span: 14 };
 | 
			
		||||
const administrativeDivisionTree = ref<TreeNodeVo<string>[]>([])
 | 
			
		||||
const formDateRef = ref();
 | 
			
		||||
 | 
			
		||||
interface formDatePort {
 | 
			
		||||
  name:string,
 | 
			
		||||
  socialCode:string,
 | 
			
		||||
  businessLicense:string,
 | 
			
		||||
  legalPersonInfo:string,
 | 
			
		||||
  telephone:string,
 | 
			
		||||
  administrativeDivisionCodes:Record<string, any>,
 | 
			
		||||
  address:string,
 | 
			
		||||
  nature:string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const formDate = ref<formDatePort>({
 | 
			
		||||
  name:'',
 | 
			
		||||
  socialCode:'',
 | 
			
		||||
  businessLicense:'',
 | 
			
		||||
  legalPersonInfo:'',
 | 
			
		||||
  telephone:'',
 | 
			
		||||
  administrativeDivisionCodes:[''],
 | 
			
		||||
  address:'',
 | 
			
		||||
  nature:''
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const rules: Record<string, Rule[]> = {
 | 
			
		||||
  name: [
 | 
			
		||||
    { required: true, message: '请输入姓名', trigger: 'change' },
 | 
			
		||||
  ],
 | 
			
		||||
  socialCode:[
 | 
			
		||||
    { required: true, message: '请输入社会编码', trigger: 'change' },
 | 
			
		||||
  ],
 | 
			
		||||
  nature:[
 | 
			
		||||
    { required: true, message: '请填写公司性质', trigger: 'change' },
 | 
			
		||||
  ],
 | 
			
		||||
  businessLicense:[
 | 
			
		||||
    { required: true, message: '请上传营业执照', trigger: 'change' },
 | 
			
		||||
  ],
 | 
			
		||||
  administrativeDivisionCodes:[
 | 
			
		||||
    { required: true, message: '请选择行政区划', trigger: 'change' },
 | 
			
		||||
  ]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 调用行政区划 1
 | 
			
		||||
const DivisionTree = async ()=>{
 | 
			
		||||
  const resp =  await api.get<TreeNodeVo<string>[]>('/common/administrativeDivisionTree')
 | 
			
		||||
  administrativeDivisionTree.value = resp.data as TreeNodeVo<string>[]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 可以进行搜索行政区划  2
 | 
			
		||||
const filter: ShowSearchType['filter'] = (inputValue, path) => {
 | 
			
		||||
  return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 搜索完成时回调
 | 
			
		||||
const  searchAdministrativeDivisionTree = (e:Array<string>)=>{
 | 
			
		||||
  formDate.value.administrativeDivisionCodes = e
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 注册企业入驻
 | 
			
		||||
const onFinish = async ()=>{
 | 
			
		||||
  //校验表单
 | 
			
		||||
  await formDateRef.value.validate()
 | 
			
		||||
  const legalPersonInfo = {
 | 
			
		||||
    name:formDate.value.legalPersonInfo,
 | 
			
		||||
    telephone:formDate.value.telephone
 | 
			
		||||
  }
 | 
			
		||||
  const securityUnitRegisterParams = {
 | 
			
		||||
    name:formDate.value.name,
 | 
			
		||||
    socialCode:formDate.value.socialCode,
 | 
			
		||||
    businessLicense:formDate.value.businessLicense,
 | 
			
		||||
    legalPersonInfo:legalPersonInfo,
 | 
			
		||||
    nature:formDate.value.nature,
 | 
			
		||||
    administrativeDivisionCodes:formDate.value.administrativeDivisionCodes,
 | 
			
		||||
    address:formDate.value.address
 | 
			
		||||
  }
 | 
			
		||||
  const resp = await  api.post('/common/securityUnitRegister',securityUnitRegisterParams)
 | 
			
		||||
  console.log(resp)
 | 
			
		||||
  await message.loading('正在注册中...')
 | 
			
		||||
  message.success('企业入驻成功')
 | 
			
		||||
  await formDateRef.value.resetFields()  //成功之后进行移除表单
 | 
			
		||||
  formDate.value = {
 | 
			
		||||
    name:'',
 | 
			
		||||
    socialCode:'',
 | 
			
		||||
    businessLicense:'',
 | 
			
		||||
    legalPersonInfo:'',
 | 
			
		||||
    telephone:'',
 | 
			
		||||
    administrativeDivisionCodes:[''],
 | 
			
		||||
    address:'',
 | 
			
		||||
    nature:''
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
onMounted( async ()=>{
 | 
			
		||||
  await  DivisionTree()
 | 
			
		||||
})
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.enterprise{
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center; /* 水平居中 */
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  height: 100vh;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  .enterpriseIndex{
 | 
			
		||||
     border: 1px solid #cccccc;
 | 
			
		||||
     height: 90vh;
 | 
			
		||||
     width: 800px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div>
 | 
			
		||||
       <SingleImageFileUpload v-model:value="url"></SingleImageFileUpload>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import SingleImageFileUpload from "@/components/upload/SingleImageFileUpload.vue";
 | 
			
		||||
import {ref} from "vue";
 | 
			
		||||
const url = ref<string>('')
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,10 @@ interface ImportMetaEnv {
 | 
			
		|||
    readonly VITE_APP_BASE_API: string;
 | 
			
		||||
    readonly VITE_APP_PROXY_URL: string;
 | 
			
		||||
 | 
			
		||||
    // minio
 | 
			
		||||
    readonly VITE_APP_MINIO_URL: string
 | 
			
		||||
    readonly VITE_APP_MINIO_BUCKET: string
 | 
			
		||||
 | 
			
		||||
    // RSA公钥
 | 
			
		||||
    readonly VITE_APP_RSA_PUBLIC_KEY: string;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
    "jsx": "preserve",
 | 
			
		||||
    "jsxImportSource": "vue",
 | 
			
		||||
    /* Linting */
 | 
			
		||||
    "strict": true,
 | 
			
		||||
    "strict": false,
 | 
			
		||||
    "noUnusedLocals": true,
 | 
			
		||||
    "noUnusedParameters": true,
 | 
			
		||||
    "noFallthroughCasesInSwitch": true,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@
 | 
			
		|||
    "moduleDetection": "force",
 | 
			
		||||
    "noEmit": true,
 | 
			
		||||
    /* Linting */
 | 
			
		||||
    "strict": true,
 | 
			
		||||
    "strict": false,
 | 
			
		||||
    "noUnusedLocals": true,
 | 
			
		||||
    "noUnusedParameters": true,
 | 
			
		||||
    "noFallthroughCasesInSwitch": true
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
  </TableProMax>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
<script setup lang="tsx">
 | 
			
		||||
import TableProMax from "@/components/table/TableProMax.vue";
 | 
			
		||||
import {ref} from "vue";
 | 
			
		||||
import {ComponentExposed} from "vue-component-type-helpers";
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ import {TableProMaxProps} from "@/types/components/table";
 | 
			
		|||
import {PoliceUnitPagerQueryParams, PoliceUnitPagerVo} from "@/types/views/unitManage/policeUnit.ts";
 | 
			
		||||
import api from "@/axios";
 | 
			
		||||
import {enumSelectNodes} from "@/config/dict.ts";
 | 
			
		||||
import {message} from "ant-design-vue";
 | 
			
		||||
 | 
			
		||||
type TableProps = TableProMaxProps<PoliceUnitPagerVo, PoliceUnitPagerQueryParams>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,21 +31,48 @@ const columns: TableProps['columns'] = [
 | 
			
		|||
    dataIndex: 'code',
 | 
			
		||||
    title: '代码'
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'legalPersonInfo',
 | 
			
		||||
    title: '联系人'
 | 
			
		||||
    dataIndex: 'contactPersonInfo',
 | 
			
		||||
    title: '联系人',
 | 
			
		||||
    customRender({record}) {
 | 
			
		||||
      return record.contactPersonInfo?.name + "/" + record.contactPersonInfo?.telephone
 | 
			
		||||
    },
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'provinceName',
 | 
			
		||||
    title: '行政区划',
 | 
			
		||||
    customRender: ({record}) => [record.provinceName, record.cityName, record.districtsName, record.streetName].filter(Boolean).join('/')
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'isEnable',
 | 
			
		||||
    title: '是否启用'
 | 
			
		||||
    title: '是否启用',
 | 
			
		||||
    customRender: ({text}) => <a-tag color={text?.extData?.color}>{text?.label}</a-tag>,
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'checkStatus',
 | 
			
		||||
    title: '审核状态'
 | 
			
		||||
    title: '审核状态',
 | 
			
		||||
    customRender: ({text}) => <a-tag color={text?.extData?.color}>{text?.label}</a-tag>,
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'createTime',
 | 
			
		||||
    title: '创建时间'
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'opt',
 | 
			
		||||
    title: '操作',
 | 
			
		||||
    customRender({record}) {
 | 
			
		||||
      return <a-space>
 | 
			
		||||
        {record.checkStatus.value === 1 && <a-popconfirm
 | 
			
		||||
            title="确认审核通过嘛?"
 | 
			
		||||
            onConfirm={async () => {
 | 
			
		||||
              const resp = await api.post('/management/checkPass', {
 | 
			
		||||
                checkDataId: record.snowFlakeId,
 | 
			
		||||
                unitOptType: 'POLICE_UNIT'
 | 
			
		||||
              })
 | 
			
		||||
              message.success(resp.message)
 | 
			
		||||
              await tableRef.value?.requestGetTableData()
 | 
			
		||||
            }}>
 | 
			
		||||
          <a-button type="primary">审核通过
 | 
			
		||||
          </a-button>
 | 
			
		||||
        </a-popconfirm>
 | 
			
		||||
        }
 | 
			
		||||
        {record.isEnable.value === 0 ? <a-button danger>禁用</a-button> : <a-button>启用</a-button>}
 | 
			
		||||
      </a-space>
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
const searchFormOptions: TableProps["searchFormOptions"] = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,12 +4,13 @@
 | 
			
		|||
      :request-api="reqApi"
 | 
			
		||||
      :columns="columns"
 | 
			
		||||
      :searchFormOptions="searchFormOptions"
 | 
			
		||||
      :scroll="{x}"
 | 
			
		||||
  >
 | 
			
		||||
 | 
			
		||||
  </TableProMax>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
<script setup lang="tsx">
 | 
			
		||||
import TableProMax from "@/components/table/TableProMax.vue";
 | 
			
		||||
import {TableProMaxProps} from "@/types/components/table";
 | 
			
		||||
import {SecurityUnitPagerQueryParams, SecurityUnitPagerVo} from "@/types/views/unitManage/securityUnit.ts";
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +18,7 @@ import api from "@/axios";
 | 
			
		|||
import {ref} from "vue";
 | 
			
		||||
import {ComponentExposed} from "vue-component-type-helpers";
 | 
			
		||||
import {enumSelectNodes} from "@/config/dict.ts";
 | 
			
		||||
import {message} from "ant-design-vue";
 | 
			
		||||
 | 
			
		||||
type TableProps = TableProMaxProps<SecurityUnitPagerVo, SecurityUnitPagerQueryParams>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,34 +27,80 @@ const reqApi: TableProps['requestApi'] = (params) => api.post('/securityUnit/pag
 | 
			
		|||
const columns: TableProps['columns'] = [
 | 
			
		||||
  {
 | 
			
		||||
    dataIndex: 'name',
 | 
			
		||||
    title: '名称'
 | 
			
		||||
    title: '名称',
 | 
			
		||||
    width: 200,
 | 
			
		||||
    ellipsis: true
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'socialCode',
 | 
			
		||||
    title: '社会编码'
 | 
			
		||||
    title: '社会编码',
 | 
			
		||||
    width: 200,
 | 
			
		||||
    ellipsis: true
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'businessLicense',
 | 
			
		||||
    title: '印业执照'
 | 
			
		||||
    title: '营业执照',
 | 
			
		||||
    width: 150,
 | 
			
		||||
    customRender({text}) {
 | 
			
		||||
      return <a-image width={100} height={100} src={__APP_ENV.VITE_APP_MINIO_URL + text}></a-image>
 | 
			
		||||
    },
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'legalPersonInfo',
 | 
			
		||||
    title: '法人信息'
 | 
			
		||||
    title: '法人信息',
 | 
			
		||||
    width: 200,
 | 
			
		||||
    customRender({record}) {
 | 
			
		||||
      return record.legalPersonInfo?.name + "/" + record.legalPersonInfo?.telephone
 | 
			
		||||
    },
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'provinceName',
 | 
			
		||||
    title: '行政区划',
 | 
			
		||||
    customRender: ({record}) => [record.provinceName, record.cityName, record.districtsName, record.streetName].filter(Boolean).join('/')
 | 
			
		||||
    customRender: ({record}) => [record.provinceName, record.cityName, record.districtsName, record.streetName].filter(Boolean).join('/'),
 | 
			
		||||
    width: 200,
 | 
			
		||||
    ellipsis: true
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'nature',
 | 
			
		||||
    title: '性质'
 | 
			
		||||
    title: '性质',
 | 
			
		||||
    width: 200
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'isEnable',
 | 
			
		||||
    title: '是否启用'
 | 
			
		||||
    title: '是否启用',
 | 
			
		||||
    customRender: ({text}) => <a-tag color={text?.extData?.color}>{text?.label}</a-tag>,
 | 
			
		||||
    width: 150
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'checkStatus',
 | 
			
		||||
    title: '审核状态'
 | 
			
		||||
    title: '审核状态',
 | 
			
		||||
    customRender: ({text}) => <a-tag color={text?.extData?.color}>{text?.label}</a-tag>,
 | 
			
		||||
    width: 150
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'createTime',
 | 
			
		||||
    title: '创建时间'
 | 
			
		||||
    title: '创建时间',
 | 
			
		||||
    width: 150,
 | 
			
		||||
    ellipsis: true,
 | 
			
		||||
  }, {
 | 
			
		||||
    dataIndex: 'opt',
 | 
			
		||||
    title: '操作',
 | 
			
		||||
    fixed: "right",
 | 
			
		||||
    customRender({record}) {
 | 
			
		||||
      return <a-space>
 | 
			
		||||
        {record.checkStatus.value === 1 && <a-popconfirm
 | 
			
		||||
            title="确认审核通过嘛?"
 | 
			
		||||
            onConfirm={async () => {
 | 
			
		||||
              const resp = await api.post('/management/checkPass', {
 | 
			
		||||
                checkDataId: record.snowFlakeId,
 | 
			
		||||
                unitOptType: 'SECURITY_UNIT'
 | 
			
		||||
              })
 | 
			
		||||
              message.success(resp.message)
 | 
			
		||||
              await tableRef.value?.requestGetTableData()
 | 
			
		||||
            }}>
 | 
			
		||||
          <a-button type="primary">审核通过
 | 
			
		||||
          </a-button>
 | 
			
		||||
        </a-popconfirm>
 | 
			
		||||
        }
 | 
			
		||||
        {record.isEnable.value === 0 ? <a-button danger>禁用</a-button> : <a-button>启用</a-button>}
 | 
			
		||||
      </a-space>
 | 
			
		||||
    },
 | 
			
		||||
    width: 200
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
const x: number = columns.reduce((a, b) => a + (b.width as number), 0)
 | 
			
		||||
const searchFormOptions: TableProps["searchFormOptions"] = {
 | 
			
		||||
  name: {
 | 
			
		||||
    type: 'input',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,3 +18,9 @@ interface ImportMetaEnv {
 | 
			
		|||
    // RSA公钥
 | 
			
		||||
    readonly VITE_APP_RSA_PUBLIC_KEY: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare module '*.vue' {
 | 
			
		||||
    import {DefineComponent} from "vue"
 | 
			
		||||
    const component: DefineComponent<{}, {}, any>
 | 
			
		||||
    export default component
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue