Parcourir la source

Merge remote-tracking branch 'origin/test' into test

Qchen il y a 1 an
Parent
commit
995a03e213
65 fichiers modifiés avec 2659 ajouts et 553 suppressions
  1. 13 1
      sql/Online.sql
  2. 19 13
      src/main/java/com/ydtech/config/MvcConfig.java
  3. 16 21
      src/main/java/com/ydtech/config/properties/WechatOpenProperties.java
  4. 1 0
      src/main/java/com/ydtech/constants/InsuranceImageEnum.java
  5. 18 0
      src/main/java/com/ydtech/constants/enums/WechatOpenSystem.java
  6. 7 0
      src/main/java/com/ydtech/constants/enums/dict/insurance/TrafficManagementVehicleType.java
  7. 26 0
      src/main/java/com/ydtech/modules/admin/constants/UserAgentStatus.java
  8. 2 2
      src/main/java/com/ydtech/modules/admin/constants/UserWorkStatus.java
  9. 4 0
      src/main/java/com/ydtech/modules/admin/controller/APPPartnerController.java
  10. 9 0
      src/main/java/com/ydtech/modules/admin/controller/AppCustomerManagementController.java
  11. 2 1
      src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java
  12. 113 0
      src/main/java/com/ydtech/modules/admin/controller/SysUserAgentController.java
  13. 48 30
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  14. 36 17
      src/main/java/com/ydtech/modules/admin/controller/websocket/PCSocketServer.java
  15. 78 0
      src/main/java/com/ydtech/modules/admin/controller/websocket/SearchHttpAK.java
  16. 18 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserAgentTrackMapper.java
  17. 42 30
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  18. 17 11
      src/main/java/com/ydtech/modules/admin/model/SysUser.java
  19. 45 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthDto.java
  20. 17 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthResultDto.java
  21. 30 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentSubmitDto.java
  22. 40 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentUserNewDto.java
  23. 44 0
      src/main/java/com/ydtech/modules/admin/model/dto/LocationResponse.java
  24. 9 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamDto.java
  25. 9 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamInfoDto.java
  26. 41 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamStaticDto.java
  27. 119 0
      src/main/java/com/ydtech/modules/admin/model/po/SysUserAgentTrack.java
  28. 1 1
      src/main/java/com/ydtech/modules/admin/model/vo/AppCustomerManagementQueryVo.java
  29. 31 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysUserAgentVo.java
  30. 5 1
      src/main/java/com/ydtech/modules/admin/service/AppCustomerManagementService.java
  31. 20 0
      src/main/java/com/ydtech/modules/admin/service/SysUserAgentTrackService.java
  32. 43 1
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  33. 210 5
      src/main/java/com/ydtech/modules/admin/service/impl/AppCustomerManagementImpl.java
  34. 28 15
      src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java
  35. 1 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java
  36. 39 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserAgentTrackServiceImpl.java
  37. 266 24
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  38. 6 3
      src/main/java/com/ydtech/modules/admin/service/impl/WechatServiceImpl.java
  39. 59 0
      src/main/java/com/ydtech/modules/admin/utils/UserAgentTrackUtils.java
  40. 40 4
      src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java
  41. 5 5
      src/main/java/com/ydtech/modules/esm/model/vo/EsmUserCountVO.java
  42. 14 1
      src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java
  43. 53 3
      src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java
  44. 53 2
      src/main/java/com/ydtech/modules/fnc/controller/contract/ContractController.java
  45. 3 0
      src/main/java/com/ydtech/modules/fnc/dao/contract/ContractMapper.java
  46. 5 0
      src/main/java/com/ydtech/modules/fnc/dao/contract/ContractSupplierMapper.java
  47. 7 0
      src/main/java/com/ydtech/modules/fnc/dto/contract/ContractDto.java
  48. 28 0
      src/main/java/com/ydtech/modules/fnc/service/contract/ContractService.java
  49. 10 0
      src/main/java/com/ydtech/modules/fnc/service/contract/ContractSupplierService.java
  50. 35 0
      src/main/java/com/ydtech/modules/fnc/service/contract/impl/ContractSupplierServiceImpl.java
  51. 151 5
      src/main/java/com/ydtech/modules/fnc/service/contract/impl/contractServiceImpl.java
  52. 8 0
      src/main/java/com/ydtech/modules/fnc/vo/ContractVo.java
  53. 6 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  54. 13 0
      src/main/java/com/ydtech/modules/order/entity/vo/ExternalOrderFeeVo.java
  55. 11 7
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  56. 15 2
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  57. 7 2
      src/main/resources/application-pre.yml
  58. 7 2
      src/main/resources/application-prod.yml
  59. 7 2
      src/main/resources/application-test.yml
  60. 23 0
      src/main/resources/mapper/modules/admin/SysUserAgentTrackMapper.xml
  61. 316 337
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  62. 249 2
      src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml
  63. 0 1
      src/main/resources/mapper/modules/fnc/contract/ContractMapper.xml
  64. 60 0
      src/main/resources/mapper/modules/fnc/contract/ContractSupplierMapper.xml
  65. 1 1
      src/main/resources/mapper/modules/order/InsOrdersMapper.xml

+ 13 - 1
sql/Online.sql

@@ -159,7 +159,19 @@ CREATE TABLE `pay_user_sign` (
 ALTER TABLE `agent`.`sys_premium_details` ADD COLUMN `licenseno` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '车牌号';
 ALTER TABLE `agent`.`sys_premium_details` ADD COLUMN `source` tinyint DEFAULT NULL COMMENT '费用来源(1,2,3,4,5级)';
 
-
+-- 2024.11.11 dongxin --
+CREATE TABLE `sys_user_agent_track`  (
+                                         `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
+                                         `user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户id',
+                                         `status` tinyint NULL DEFAULT NULL COMMENT '状态  0.注册 1.认证成功 2.认证失败 3.审核成功 4.审核失败',
+                                         `approve_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '审核人Id',
+                                         `approve_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '审核人',
+                                         `approve_mess` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '审核认证信息',
+                                         `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                         `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                         PRIMARY KEY (`id`) USING BTREE,
+                                         INDEX `idx_sys_user_track_user_id`(`user_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 571 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '个代用户认证审核轨迹表' ROW_FORMAT = DYNAMIC;
 
 
 

+ 19 - 13
src/main/java/com/ydtech/config/MvcConfig.java

@@ -25,6 +25,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Configuration
 public class MvcConfig implements WebMvcConfigurer {
@@ -96,18 +98,23 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
     @Bean
-    public WxMpDefaultConfigImpl wxMpDefaultConfig() {
-        WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl();
-        wxMpDefaultConfig.setAppId(wechatOpenProperties.getComponentAppId());
-        wxMpDefaultConfig.setSecret(wechatOpenProperties.getComponentSecret());
-        return wxMpDefaultConfig;
-    }
-
-    @Bean
-    public WxMpService wxMpService() {
-        WxMpServiceImpl wxMpService = new WxMpServiceImpl();
-        wxMpService.setWxMpConfigStorage(wxMpDefaultConfig());
-        return wxMpService;
+    public Map<String, WxMpService> wxMpService() {
+        Map<String, WxMpDefaultConfigImpl> collect = wechatOpenProperties.getProperties().keySet()
+                .stream()
+                .collect(Collectors.toMap(x->x, x -> {
+                    WechatOpenProperties.PropertiesDto propertiesDto = wechatOpenProperties.getProperties().get(x);
+                    WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl();
+                    wxMpDefaultConfig.setAppId(propertiesDto.getComponentAppId());
+                    wxMpDefaultConfig.setSecret(propertiesDto.getComponentSecret());
+                    return wxMpDefaultConfig;
+                }));
+
+        return collect.keySet().stream().collect(Collectors.toMap(x -> x, x -> {
+            WxMpServiceImpl wxMpService = new WxMpServiceImpl();
+            WxMpDefaultConfigImpl wxMpDefaultConfig = collect.get(x);
+            wxMpService.setWxMpConfigStorage(wxMpDefaultConfig);
+            return wxMpService;
+        }));
     }
 
     @Bean
@@ -132,7 +139,6 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
 
-
     /**
      * 获取单个参数
      *

+ 16 - 21
src/main/java/com/ydtech/config/properties/WechatOpenProperties.java

@@ -1,36 +1,31 @@
 package com.ydtech.config.properties;
 
+import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+
 @Component
 @ConfigurationProperties(prefix = "wechat.open")
+@Data
 public class WechatOpenProperties {
 
-    /**
-     * 设置微信三方平台的appid
-     */
-    private String componentAppId;
-
-    /**
-     * 设置微信三方平台的app secret
-     */
-    private String componentSecret;
-
+    private Map<String, PropertiesDto> properties;
 
-    public String getComponentAppId() {
-        return componentAppId;
-    }
+    @Data
+    public static class PropertiesDto{
 
-    public void setComponentAppId(String componentAppId) {
-        this.componentAppId = componentAppId;
-    }
+        /**
+         * 设置微信三方平台的appid
+         */
+        private String componentAppId;
 
-    public String getComponentSecret() {
-        return componentSecret;
+        /**
+         * 设置微信三方平台的app secret
+         */
+        private String componentSecret;
     }
 
-    public void setComponentSecret(String componentSecret) {
-        this.componentSecret = componentSecret;
-    }
 }

+ 1 - 0
src/main/java/com/ydtech/constants/InsuranceImageEnum.java

@@ -15,6 +15,7 @@ public enum InsuranceImageEnum {
 
     SFZ_01("SFZ_01", "身份证正面"),
     SFZ_02("SFZ_02", "身份证反面"),
+    YHK_01("YHK_01", "银行卡正面"),
 
     ZGZ_00("ZGZ_00", "资格证照片"),
 

+ 18 - 0
src/main/java/com/ydtech/constants/enums/WechatOpenSystem.java

@@ -0,0 +1,18 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum WechatOpenSystem {
+
+    JZG("jzg", "晋掌柜"),
+    HHR("hhr", "合伙人");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 7 - 0
src/main/java/com/ydtech/constants/enums/dict/insurance/TrafficManagementVehicleType.java

@@ -6,6 +6,9 @@ import com.ydtech.constants.enums.dict.IBaseEnum;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.Objects;
+
 /**
  * @description: 交通管理车辆类型
  * @author: wenks
@@ -141,5 +144,9 @@ public enum TrafficManagementVehicleType implements IBaseEnum {
     // 状态  0 启用  1 不启用
     private final Integer status;
 
+    public static String getDesc(String code){
+        TrafficManagementVehicleType trafficManagementVehicleType = Arrays.stream(TrafficManagementVehicleType.values()).filter(x -> x.code.equals(code)).findFirst().orElse(null);
+        return !Objects.isNull(trafficManagementVehicleType) ? trafficManagementVehicleType.getDesc() : "";
+    }
 }
 

+ 26 - 0
src/main/java/com/ydtech/modules/admin/constants/UserAgentStatus.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.admin.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum UserAgentStatus {
+
+    UAS_0(0, "注册"),
+    UAS_1(1, "认证成功"),
+    UAS_2(2, "认证失败"),
+    UAS_3(3, "银行卡认证成功"),
+    UAS_4(4, "银行卡认证失败");
+    private final Integer code;
+
+    private final String desc;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 2 - 2
src/main/java/com/ydtech/modules/admin/constants/UserWorkStatus.java

@@ -15,8 +15,8 @@ public enum UserWorkStatus {
     UWS_4(4, "离司待审核"),
     UWS_5(5, "离司审核驳回"),
     UWS_6(6, "修改待审核"),
-    UWS_7(7, "修改审核驳回");
-
+    UWS_7(7, "修改审核驳回"),
+    UWS_8(8, "待入司");
     private final Integer code;
 
     private final String desc;

+ 4 - 0
src/main/java/com/ydtech/modules/admin/controller/APPPartnerController.java

@@ -208,6 +208,7 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/loginAlipay")
     @ApiOperation(value = "支付宝登录")
     public HttpResult<AAPLoginVo> loginAlipay(@RequestBody AlipayBindVo alipayBindVo) {
+        log.info("支付宝登录入参:{}",alipayBindVo);
         try {
             return sysPartnerService.loginAlipay(alipayBindVo);
         } catch (AlipayApiException e) {
@@ -225,6 +226,7 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/bindAlipay")
     @ApiOperation(value = "工号绑定支付宝")
     HttpResult<Object> bindAlipay(@RequestBody AlipayBindVo alipayBindVo){
+        log.info("支付宝绑定入参:{}",alipayBindVo);
         try {
             String userId = getUserId();
             return sysPartnerService.bindAlipay(alipayBindVo, userId);
@@ -255,6 +257,7 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/loginWechat")
     @ApiOperation(value = "微信登录")
     public HttpResult<AAPLoginVo> loginWechat(@RequestBody WechatLoginVo wechatLoginVo) {
+        log.info("微信登录入参:{}",wechatLoginVo);
         try {
             return sysPartnerService.loginWechat(wechatLoginVo);
         } catch (WxErrorException e) {
@@ -272,6 +275,7 @@ public class APPPartnerController extends BaseController {
     @PostMapping("/bindWechat")
     @ApiOperation(value = "工号绑定微信")
     HttpResult<Object> bindWechat(@RequestBody WechatBindVo wechatBindVo){
+        log.info("微信绑定入参:{}",wechatBindVo);
         try {
             String userId = getUserId();
             return sysPartnerService.bindWechat(wechatBindVo, userId);

+ 9 - 0
src/main/java/com/ydtech/modules/admin/controller/AppCustomerManagementController.java

@@ -1,9 +1,11 @@
 package com.ydtech.modules.admin.controller;
 
 
+import cn.dev33.satoken.annotation.SaIgnore;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamInfoDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.service.AppCustomerManagementService;
 import com.ydtech.modules.order.entity.BasePageResult;
@@ -20,6 +22,12 @@ public class AppCustomerManagementController {
 
     private final AppCustomerManagementService appCustomerManagementService;
 
+    @ApiOperation(value = "认证统计")
+    @GetMapping(value = "/authStatics")
+    public HttpResult authStatics(Integer dateType) {
+        return appCustomerManagementService.authStatics(dateType);
+    }
+
     @ApiOperation(value = "认证查询")
     @PostMapping(value = "/authenticationQuery")
     public HttpResult<BasePageResult<SysUserTeamDto>> authenticationQuery(@RequestBody AppCustomerManagementQueryVo appCustomerManagementQueryVo) {
@@ -28,6 +36,7 @@ public class AppCustomerManagementController {
 
     @ApiOperation(value = "团队人员详情")
     @GetMapping(value = "/{userId}")
+    @SaIgnore
     public HttpResult<SysUserTeamInfoDto> authenticationQuery(@PathVariable String userId) {
         return appCustomerManagementService.getUserInfo(userId);
     }

+ 2 - 1
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -230,7 +230,7 @@ public class SysLoginController {
                 throw new SystemException("该用户未授权");
             }
         }
-
+        user.setIsLock(0);
         //验证用户
         SysUser.verifyUser(user);
         SysPassword sysPassword = sysPasswordService.getOne(new LambdaQueryWrapper<SysPassword>().eq(SysPassword::getCode, SysPasswordEnum.GENERAL.getCode()));
@@ -396,6 +396,7 @@ public class SysLoginController {
         String phoneMsg = phoneLoginVo.getPhoneMsg();
         SysUser user = sysUserService.findByPhone(phone);
         //验证用户
+        user.setIsLock(0);
         SysUser.verifyUser(user);
         String msg = redisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + phone);
         if (msg == null || msg.isEmpty()) {

+ 113 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserAgentController.java

@@ -0,0 +1,113 @@
+package com.ydtech.modules.admin.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.components.UnionPayRequestApiComponent;
+import com.ydtech.modules.admin.components.request.UnionPayRequest;
+import com.ydtech.modules.admin.components.response.UnionPayResponse;
+import com.ydtech.modules.admin.constants.UserAgentStatus;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.modules.admin.model.dto.AgentAuthDto;
+import com.ydtech.modules.admin.model.dto.AgentAuthResultDto;
+import com.ydtech.modules.admin.model.dto.AgentSubmitDto;
+import com.ydtech.modules.admin.model.dto.AgentUserNewDto;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserRoleService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Objects;
+
+import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY;
+
+@RestController
+@Api(tags = "个代用户控制器")
+@RequestMapping("userAgent")
+@RequiredArgsConstructor
+@Slf4j
+public class SysUserAgentController extends BaseController {
+
+    private final SysUserService sysUserService;
+
+    private final SysDeptService sysDeptService;
+
+    private final StringRedisTemplate redisTemplate;
+
+    private final SysUserRoleService sysUserRoleService;
+
+    @ApiOperation(value = "个代注册")
+    @PostMapping(value = "/agentRegist")
+    @SaIgnore
+    public HttpResult agentRegist(@RequestBody @Validated AgentUserNewDto dto) {
+        List<SysUser> list = sysUserService.lambdaQuery().eq(SysUser::getMobile, dto.getMobile()).list();
+        AssertionUtils.isFail(!list.isEmpty(), "手机号已经被注册请重新跟换手机号。如有疑问请联系管理人员。");
+        String captchaRedis = redisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + dto.getMobile());
+        redisTemplate.delete(PHONE_VERIFICATION_CODE_KEY + dto.getMobile());
+        AssertionUtils.isFail(StringUtils.isBlank(captchaRedis), "验证码已失效!");
+        AssertionUtils.isFail(!dto.getMobileMsg().equals(captchaRedis), "验证码错误!");
+        String recommenderid = dto.getReferrerId();
+        SysUser recommender = sysUserService.getById(recommenderid);
+        AssertionUtils.isFail(Objects.isNull(recommender), "推荐人信息不存在!");
+        AssertionUtils.isFail(!"2".equals(dto.getFlag()), "只有个代来源允许注册!");
+        //只有团队长和代理人才能邀请
+        SysUserRole recommenderRole = sysUserRoleService.selectByUserId(recommenderid);
+        if (!recommenderRole.getRoleId().equals(20L) && !recommenderRole.getRoleId().equals(21L)) {
+            return HttpResult.error("只有团队长和代理人才能推荐");
+        }
+        String userId = sysUserService.agentRegist(dto, recommender);
+        return HttpResult.ok("保存成功", userId);
+    }
+
+    @ApiOperation(value = "个代(认证/审核)结果获取")
+    @PostMapping(value = "/getAuthResult")
+    public HttpResult getAuthResult(@RequestBody @Validated AgentAuthResultDto dto) {
+        SysUser sysUser = sysUserService.getByUserId(dto.getUserId());
+        AssertionUtils.isFail(Objects.isNull(sysUser), "用户信息不存在!");
+        AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要认证!");
+        return HttpResult.ok(sysUserService.getAuthResult(sysUser,dto));
+    }
+
+    @ApiOperation(value = "个代认证")
+    @PostMapping(value = "/agentAuth")
+    public HttpResult agentAuth(@RequestBody @Validated AgentAuthDto dto) {
+        SysUser sysUser = sysUserService.getByUserId(dto.getUserId());
+        SysUser mobileUser = sysUserService.findByPhone(dto.getMobile());
+        AssertionUtils.isFail(!sysUser.getMobile().equals(dto.getMobile()) && Objects.isNull(mobileUser), "用户手机号未注册!");
+        AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要认证!");
+        return HttpResult.ok(sysUserService.agentAuth(sysUser,dto));
+    }
+
+    @ApiOperation(value = "个代资料提交")
+    @PostMapping(value = "/agentSubmit")
+    public HttpResult agentSubmit(@RequestBody @Validated AgentSubmitDto dto) {
+        SysUser sysUser = sysUserService.getByUserId(dto.getUserId());
+        AssertionUtils.isFail(Objects.isNull(sysUser), "用户不存在!");
+        AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要资料提交!");
+        SysUser user = sysUserService.getById(sysUser.getId());
+        AssertionUtils.isFail("0".equals(sysUser.getFactorVerify()) || "2".equals(sysUser.getFactorVerify())
+                , "未实名认证的用户不允许提交资料");
+        sysUserService.agentSubmit(user,dto);
+        return HttpResult.ok("提交成功");
+    }
+
+
+
+
+
+}

+ 48 - 30
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -223,16 +223,17 @@ public class SysUserController extends BaseController {
 
         return HttpResult.ok();
     }
+
     @PostMapping(value = "/deleteUserRole")
     @ApiOperation(value = "删除用户角色信息")
     public HttpResult deleteUserRole(@RequestBody SysUserRoleVo sysUserRoleVo) {
 
-        if(StringUtil.isBlank(sysUserRoleVo.getUserId())){
+        if (StringUtil.isBlank(sysUserRoleVo.getUserId())) {
             return HttpResult.error("用户ID不能空");
         }
-        if(sysUserRoleService.deleteByUserId(sysUserRoleVo.getUserId())){
+        if (sysUserRoleService.deleteByUserId(sysUserRoleVo.getUserId())) {
             return HttpResult.ok();
-        }else{
+        } else {
             return HttpResult.error();
         }
     }
@@ -240,7 +241,7 @@ public class SysUserController extends BaseController {
     @PostMapping(value = "/roleAddUser")
     @ApiOperation(value = "角色成员新增")
     public HttpResult roleAddUser(@RequestBody @Valid SysRoleAddUserVo sysRoleAddUserVo) {
-        return sysUserRoleService.roleAddUser(sysRoleAddUserVo,getUserName());
+        return sysUserRoleService.roleAddUser(sysRoleAddUserVo, getUserName());
     }
 
 
@@ -301,6 +302,7 @@ public class SysUserController extends BaseController {
 
     /**
      * 合伙人密码修改
+     *
      * @param id
      * @param password
      * @param oldPassword
@@ -562,12 +564,18 @@ public class SysUserController extends BaseController {
         SysUser sysUser = sysUserService.getById(userId);
         if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_2.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_1.getCode());
+            sysUserService.addInfo(sysUser);
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_4.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_0.getCode());
+
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_6.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_1.getCode());
         }
-        return HttpResult.ok(sysUserService.addInfo(sysUser));
+        SysUserTrack sysUserTrack = new SysUserTrack(sysUser);
+
+        sysUserTrackService.save(sysUserTrack);
+
+        return HttpResult.ok("审批成功",sysUserService.updateById(sysUser));
     }
 
 
@@ -582,6 +590,13 @@ public class SysUserController extends BaseController {
         SysUser sysUser = sysUserService.getById(userId);
         if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_2.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_3.getCode());
+            Integer type = sysUser.getType();
+            Integer level = sysUser.getLevel();
+            if (type != 0) {
+                if (level == null || level != 1) {
+                    sysUserService.sendMsgPantner(sysUser.getMobile());
+                }
+            }
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_4.getCode())) {
             sysUser.setStatus(UserWorkStatus.UWS_5.getCode());
         } else if (Objects.equals(sysUser.getStatus(), UserWorkStatus.UWS_6.getCode())) {
@@ -591,13 +606,6 @@ public class SysUserController extends BaseController {
         SysUserTrack sysUserTrack = new SysUserTrack(sysUser);
         sysUserTrack.setApproveMess(reason);
         sysUserTrackService.save(sysUserTrack);
-        Integer type = sysUser.getType();
-        Integer level = sysUser.getLevel();
-        if (type != 0) {
-            if (level == null || level != 1) {
-                sysUserService.sendMsgPantner(sysUser.getMobile());
-            }
-        }
 
         return HttpResult.ok(sysUserService.updateById(sysUser));
 
@@ -632,7 +640,7 @@ public class SysUserController extends BaseController {
             List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(userId);
             sysUserVo.setEsmUserImageVo(esmUserImageQueryVo);
             sysUserVo.setSysUserInfo(sysUserInfoService.getById(userId));
-            SpringUtil.getBean(RecordUserUtils.class).addRecord(userId,BaseController.getUserName());
+            SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, BaseController.getUserName());
             return HttpResult.ok(sysUserVo);
         }
         // 查询推荐人
@@ -648,7 +656,7 @@ public class SysUserController extends BaseController {
         SysUserInfo userInfo = sysUserInfoService.getById(userId);
 
         String addr = Optional.ofNullable(userInfo).map(SysUserInfo::getLiveAddress).orElse(null);
-        if (StringUtils.isNotEmpty(addr)){
+        if (StringUtils.isNotEmpty(addr)) {
             userInfo.setLiveAddressString(addr.split(","));
         }
 
@@ -783,8 +791,8 @@ public class SysUserController extends BaseController {
             request.setPhoneNo(dto.getMobile());
             request.setCertNo(dto.getIdentity());
             response = unionPayRequestApiComponent.threeFactorVerifyRequest(request);
-            if (response != null&&!"00".equals(response.getRespCode())) {
-                return HttpResult.error("认证信息不一致:"+response.getDetailRespMsg());
+            if (response != null && !"00".equals(response.getRespCode())) {
+                return HttpResult.error("认证信息不一致:" + response.getDetailRespMsg());
             }
         }
         //只有团队长和代理人才能邀请 by gws
@@ -821,13 +829,21 @@ public class SysUserController extends BaseController {
             sysUser.setOperatorCode(recommenderid);
         }
         sysUser.setIdentity(dto.getIdentity());
-        sysUser.setFactorVerify(response != null && "00".equals(response.getRespCode())? 1:0);
-        sysUserService.save(sysUser);
+        sysUser.setFactorVerify(response != null && "00".equals(response.getRespCode()) ? 1 : 0);
 
         //角色配置
         SysUserRole userRole = new SysUserRole();
         userRole.setUserId(nextPK);
         userRole.setRoleId(dto.getFlag().equals("2") ? 20L : 19L);
+
+        // 出单员获取渠道负责人的领导人插入
+        if (19 == userRole.getRoleId()) {
+            SysUser leaderUser = sysUserService.getByRoleIdAndDeptId("21", sysUser.getDeptId());
+            sysUser.setLeaderId(leaderUser.getLeaderId());
+            sysUser.setLeaderName(leaderUser.getLeaderName());
+        }
+
+        sysUserService.save(sysUser);
         sysUserRoleService.save(userRole);
 
         //添加增员服务消息
@@ -911,7 +927,7 @@ public class SysUserController extends BaseController {
     @ApiOperation(value = "保存合伙人、管理员用户基本详情信息")
     @PostMapping(value = "/saveUserInfoByPartner")
     public HttpResult saveUserInfoByPartner(@RequestBody SysUser2Vo sysUserVo) {
-        log.info("添加合伙人入参:{}",sysUserVo);
+        log.info("添加合伙人入参:{}", sysUserVo);
         //by gws 21	团队长 20	代理人 必须归属团队
         // 22	后线人员 必须归属部门
         SysUser sysUser = sysUserVo.getSysUser();
@@ -1038,6 +1054,7 @@ public class SysUserController extends BaseController {
 
     /**
      * 获取当前用户的下级所有人员
+     *
      * @return
      */
     @ApiOperation(value = "获取当前用户的下级所有人员")
@@ -1049,12 +1066,13 @@ public class SysUserController extends BaseController {
 
     /**
      * 获取当前用户的所有代理人
+     *
      * @return
      */
     @ApiOperation(value = "获取代理人树形")
     @GetMapping(value = "/findNextAgentTree")
     public HttpResult<List<SysUser>> findNextAgentTree(String pid) {
-        List<SysUser> list = sysUserService.findNextAgentTree( pid);
+        List<SysUser> list = sysUserService.findNextAgentTree(pid);
         return HttpResult.ok(list);
     }
 
@@ -1119,6 +1137,7 @@ public class SysUserController extends BaseController {
         }
 
     }
+
     /**
      * @version
      * @author: whp
@@ -1193,7 +1212,7 @@ public class SysUserController extends BaseController {
     @GetMapping(value = "/getUserModificationRecords")
     public HttpResult getUserModificationRecords(@RequestParam("userId") String userId) throws IllegalAccessException {
         List<SysUserRecord> userList = SpringUtil.getBean(SysUserRecordMapper.class).queryByUserId(userId);
-        if (CollectionUtils.isEmpty(userList)){
+        if (CollectionUtils.isEmpty(userList)) {
             return HttpResult.ok(new ArrayList[0]);
         }
         SysUserInfoQuery sysUserVo = new SysUserInfoQuery();
@@ -1229,7 +1248,7 @@ public class SysUserController extends BaseController {
         }
         //查询详情信息
         SysUserInfo userInfo = sysUserInfoService.getById(userId);
-        if (StringUtils.isNotEmpty(userInfo.getLiveAddress())){
+        if (StringUtils.isNotEmpty(userInfo.getLiveAddress())) {
             userInfo.setLiveAddressString(userInfo.getLiveAddress().split(","));
         }
         //查询用户绑定的银行卡信息
@@ -1258,7 +1277,7 @@ public class SysUserController extends BaseController {
      * 代理人和渠道添加批量设置管理人
      */
     @PostMapping("updateManagementPersonnel")
-    public HttpResult updateManagementPersonnel(@RequestBody UpdateManagementDto managementDto){
+    public HttpResult updateManagementPersonnel(@RequestBody UpdateManagementDto managementDto) {
         return sysUserService.updateManagementPersonnel(managementDto);
     }
 
@@ -1267,7 +1286,7 @@ public class SysUserController extends BaseController {
      * 代理人和渠道取消管理人
      */
     @PostMapping("cancelManagementPersonnel")
-    public HttpResult cancelManagementPersonnel(@RequestBody UpdateManagementDto managementDto){
+    public HttpResult cancelManagementPersonnel(@RequestBody UpdateManagementDto managementDto) {
         return sysUserService.cancelManagementPersonnel(managementDto);
     }
 
@@ -1285,20 +1304,19 @@ public class SysUserController extends BaseController {
     }
 
 
-
     /**
      * 代理人和渠道用户查询
      */
     @PostMapping("selectForAgentsAndChannelsPage")
-    public HttpResult selectForAgentsAndChannelsPage(@RequestBody PageDto<SysUserDto> pageDto){
+    public HttpResult selectForAgentsAndChannelsPage(@RequestBody PageDto<SysUserDto> pageDto) {
         return HttpResult.ok(sysUserService.selectForAgentsAndChannelsPage(pageDto));
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/24 17:37
-     *  @Description: 电销管理人数据列表
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/24 17:37
+     * @Description: 电销管理人数据列表
      */
     @ApiOperation(value = "电销管理人数据列表")
     @GetMapping(value = "/findDxUserList")

+ 36 - 17
src/main/java/com/ydtech/modules/admin/controller/websocket/PCSocketServer.java

@@ -1,19 +1,12 @@
 package com.ydtech.modules.admin.controller.websocket;
 
-import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.config.SpringContextUtils;
 import com.ydtech.modules.admin.constants.SystemType;
-import com.ydtech.modules.admin.dao.SysDeptMapper;
-import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysGeographyPosition;
-import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.IpInfoDto;
+import com.ydtech.modules.admin.model.dto.LocationResponse;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
-import com.ydtech.modules.admin.service.SysGeographyPositionRecordService;
-import com.ydtech.modules.admin.service.SysGeographyPositionService;
 import com.ydtech.modules.admin.service.SysPcAddressService;
 import com.ydtech.modules.admin.service.SysUserService;
 import lombok.extern.slf4j.Slf4j;
@@ -22,7 +15,7 @@ import org.springframework.stereotype.Component;
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
-import java.util.Date;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -36,6 +29,10 @@ public class PCSocketServer {
 
     private Session session;
 
+    public final static String URL = "https://api.map.baidu.com/location/ip?";
+
+    public final static String AK = "UuGafLbAJs9kYJsRg2cxCLwAscGZg1Jj";
+
     private static Map<String, Session> sessionClientMap = new ConcurrentHashMap<>();
 
     /**静态变量,用来记录当前在线连接数*/
@@ -69,15 +66,16 @@ public class PCSocketServer {
     public void onMessage(String message, Session session) {
         JSONObject jsonObject = JSONObject.parseObject(message);
         String userId = jsonObject.getString("userId");
-        String longitude = jsonObject.getString("lng");
-        String latitude = jsonObject.getString("lat");
-        String province = jsonObject.getString("prov");
-        String city = jsonObject.getString("city");
-        String district = jsonObject.getString("district");
+//        String longitude = jsonObject.getString("lng");
+//        String latitude = jsonObject.getString("lat");
+//        String province = jsonObject.getString("prov");
+//        String city = jsonObject.getString("city");
+//        String district = jsonObject.getString("district");
         String ip = jsonObject.getString("ip");
         String systemType = jsonObject.getString("systemType");
-        saveLocationData(userId, latitude, longitude,province,city,district,ip,systemType);
+        saveLocationData(userId,ip,systemType);
         log.info("服务端收到PC用户消息:{} ,主体:{}", message, userId);
+
         sendMessage("服务端已收到PC用户信息:" +message);
     }
 
@@ -116,13 +114,28 @@ public class PCSocketServer {
         this.session.getAsyncRemote().sendText(message);
     }
 
-    public void saveLocationData(String userId, String latitude, String longitude,
-                                 String province,String city,String district,
+    public void saveLocationData(String userId,
                                  String ip,String systemType) {
         SysPcAddressService sysPcAddressService = SpringContextUtils.getBean(SysPcAddressService.class);
         SysUserService sysUserService = SpringContextUtils.getBean(SysUserService.class);
         if (SystemType.ST_1.getCode().equals(systemType)) {
             try {
+                SearchHttpAK searchHttpAK = new SearchHttpAK();
+
+                Map params = new LinkedHashMap<String, String>();
+                params.put("ip", ip);
+                params.put("coor", "bd09ll");
+                params.put("ak", AK);
+
+                LocationResponse locationResponse = searchHttpAK.requestGetAK(URL, params);
+                String province = locationResponse.getContent().getAddressDetail().getProvince();
+                String city = locationResponse.getContent().getAddressDetail().getCity();
+                String district = locationResponse.getContent().getAddressDetail().getDistrict();
+
+                String longitude = locationResponse.getContent().getPoint().getX();
+                String latitude = locationResponse.getContent().getPoint().getY();
+
+
                 IpInfoDto ipInfoDto = new IpInfoDto();
                 ipInfoDto.setIp(ip);
                 ipInfoDto.setLng(longitude);
@@ -138,4 +151,10 @@ public class PCSocketServer {
         }
     }
 
+
+
+
+
+
+
 }

+ 78 - 0
src/main/java/com/ydtech/modules/admin/controller/websocket/SearchHttpAK.java

@@ -0,0 +1,78 @@
+package com.ydtech.modules.admin.controller.websocket;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.modules.admin.model.dto.LocationResponse;
+import org.springframework.web.util.UriUtils;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class SearchHttpAK {
+
+//    public static String URL = "https://api.map.baidu.com/location/ip?";
+//
+//    public static String AK = "UuGafLbAJs9kYJsRg2cxCLwAscGZg1Jj";
+//
+//    public static void main(String[] args) throws Exception {
+//
+//        SearchHttpAK snCal = new SearchHttpAK();
+//
+//        Map params = new LinkedHashMap<String, String>();
+//        params.put("ip", "111.206.214.37");
+//        params.put("coor", "bd09ll");
+//        params.put("ak", AK);
+//
+//
+//        snCal.requestGetAK(URL, params);
+//    }
+
+    /**
+     * 默认ak
+     * 选择了ak,使用IP白名单校验:
+     * 根据您选择的AK已为您生成调用代码
+     * 检测到您当前的ak设置了IP白名单校验
+     * 您的IP白名单中的IP非公网IP,请设置为公网IP,否则将请求失败
+     * 请在IP地址为xxxxxxx的计算发起请求,否则将请求失败
+     */
+    public LocationResponse requestGetAK(String strUrl, Map<String, String> param) throws Exception {
+        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
+            return null;
+        }
+
+        StringBuffer queryString = new StringBuffer();
+        queryString.append(strUrl);
+        for (Map.Entry<?, ?> pair : param.entrySet()) {
+            queryString.append(pair.getKey() + "=");
+            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
+            //    queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
+            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
+        }
+
+        if (queryString.length() > 0) {
+            queryString.deleteCharAt(queryString.length() - 1);
+        }
+
+        java.net.URL url = new URL(queryString.toString());
+        System.out.println(queryString.toString());
+        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
+        httpConnection.connect();
+
+        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
+        BufferedReader reader = new BufferedReader(isr);
+        StringBuffer buffer = new StringBuffer();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            buffer.append(line);
+        }
+        reader.close();
+        isr.close();
+        System.out.println("AK: " + buffer.toString());
+        return JSONObject.parseObject(buffer.toString(), LocationResponse.class);
+    }
+}

+ 18 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserAgentTrackMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+
+/**
+* @author dongxin
+* @description 针对表【sys_user_agent_track(个代用户认证审核轨迹表)】的数据库操作Mapper
+* @createDate 2024-11-04 14:57:40
+* @Entity generator.domain.SysUserAgentTrack
+*/
+public interface SysUserAgentTrackMapper extends BaseMapper<SysUserAgentTrack> {
+
+}
+
+
+
+

+ 42 - 30
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -442,71 +442,74 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return 电销人员工号列表
      */
     List<String> getTelemarketingPersonnelUserId();
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/8/29 17:52
-     *  @Description: 按照省市区查询数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/8/29 17:52
+     * @Description: 按照省市区查询数据
      */
     List<QxFrontlineAgentDto> queryQxFrontlineAgentList(@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/8/30 18:47
-     *  @Description: 分页查询人员数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/8/30 18:47
+     * @Description: 分页查询人员数据
      */
     Page<QxFrontlineAgentDto> findUserListByParam(@Param("page") Page page, @Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/8/30 18:47
-     *  @Description: 更新
+     * @version
+     * @author: hxl
+     * @Date: 2024/8/30 18:47
+     * @Description: 更新
      */
     Integer updateManagementPersonnel(@Param("managementDto") UpdateManagementDto managementDto);
 
 
-    List<SysUser> getAllAgent(String pid ,  List<String>  ids);
+    List<SysUser> getAllAgent(String pid, List<String> ids);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/24 17:35
-     *  @Description:  查询电销的管理人列表
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/24 17:35
+     * @Description: 查询电销的管理人列表
      */
     List<SysUser> findDxUserList();
 
     /**
      * 根据部门获取代理人渠道数
+     *
      * @param sysUserDeptRelationshipVo
      * @return
      */
-    Page<SysUser> findQXDLUserListNew(@Param("page") Page page,@Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
+    Page<SysUser> findQXDLUserListNew(@Param("page") Page page, @Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
 
 
-    Page<SysUser>  getChanelList(@Param("page") Page page,@Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
+    Page<SysUser> getChanelList(@Param("page") Page page, @Param("vo") SysUserDeptRelationshipVo sysUserDeptRelationshipVo);
 
     List<SysUser> selectByParams(HashMap<String, Object> params);
 
-    IPage<SysUserBaseVO> selectForAgentsAndChannelsPage(@Param("page") Page page,@Param("sysUserVO") SysUserDto sysUserVO);
+    IPage<SysUserBaseVO> selectForAgentsAndChannelsPage(@Param("page") Page page, @Param("sysUserVO") SysUserDto sysUserVO);
 
-    List<Map<String,String>> selectHxUserList(@Param("sysUserDto") SysUserDto sysUserDto);
+    List<Map<String, String>> selectHxUserList(@Param("sysUserDto") SysUserDto sysUserDto);
 
     Integer cancelManagementPersonnel(@Param("managementDto") UpdateManagementDto managementDto);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/25 19:25
-     *  @Description: 通过用户id查询电销组下的用户id
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/25 19:25
+     * @Description: 通过用户id查询电销组下的用户id
      */
     List<String> getGroupByUserId(@Param("userId") String userId);
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/26 18:11
-     *  @Description:  通过机构id查询后线用户数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/26 18:11
+     * @Description: 通过机构id查询后线用户数据
      */
     List<SysUser> getLeadListDeptId(@Param("deptId") String deptId);
 
@@ -519,10 +522,19 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<SysUser> findHxUserListNew();
 
 
-    AppUserInfoVo queryByUserId(@Param("userId")String userId);
+    AppUserInfoVo queryByUserId(@Param("userId") String userId);
 
     List<SysUser> selectByParamsTreeUser(HashMap<String, Object> params);
 
+    /**
+     * 通过 机构id 和 角色id查询用户
+     *
+     * @param roleId 角色id
+     * @param deptId 机构id
+     * @return 用户信息
+     */
+    SysUser getByRoleIdAndDeptId(@Param("roleId") String roleId, @Param("deptId") String deptId);
+
 }
 
 

+ 17 - 11
src/main/java/com/ydtech/modules/admin/model/SysUser.java

@@ -127,7 +127,7 @@ public class SysUser extends BaseEntity {
     private String leaderName;
 
 
-    @ApiModelProperty(value = "三要素验证")
+    @ApiModelProperty(value = "三要素验证 0.未认证 1. 认证成功 2. 认证驳回")
     @TableField(value = "factor_verify")
     private Integer factorVerify;
 
@@ -252,6 +252,10 @@ public class SysUser extends BaseEntity {
     @TableField(value = "dept_type")
     private String deptType;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "是否判断锁定状态 0.否 1. 是 默认判断")
+    private Integer isLock = 1;
+
     /**
      * 验证用户
      *
@@ -266,16 +270,18 @@ public class SysUser extends BaseEntity {
         }
 
         // 账号锁定
-        if (user.getStatus() == 0) {
-            throw new SystemException("账号已被锁定,请联系管理员");
-        }
-        // 新注册用户需要审核
-        if (user.getStatus() == 2) {
-            throw new SystemException("新注册用户需要审核,请联系管理员");
-        }
-        // 新注册用户审核不通过
-        if (user.getStatus() == 3) {
-            throw new SystemException("新注册用户审核不通过,请联系管理员");
+        if(user.getIsLock().equals(1)){
+            if (user.getStatus() == 0) {
+                throw new SystemException("账号已被锁定,请联系管理员");
+            }
+            // 新注册用户需要审核
+            if (user.getStatus() == 2) {
+                throw new SystemException("新注册用户需要审核,请联系管理员");
+            }
+            // 新注册用户审核不通过
+            if (user.getStatus() == 3) {
+                throw new SystemException("新注册用户审核不通过,请联系管理员");
+            }
         }
     }
 

+ 45 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthDto.java

@@ -0,0 +1,45 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@ApiModel("个代认证DTO")
+public class AgentAuthDto {
+
+    @NotBlank(message = "用户id为空")
+    @ApiModelProperty(value = "用户id",required = true)
+    private String userId;
+
+    @NotBlank(message = "姓名不能为空")
+    @ApiModelProperty(value = "姓名",required = true)
+    private String name;
+
+    @NotBlank(message = "手机号不能为空")
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+    @NotBlank(message = "身份证号不能为空")
+    @ApiModelProperty(value = "身份证")
+    private String identity;
+
+    @NotBlank(message = "身份证有效期不能为空")
+    @ApiModelProperty(value = "身份证有效期")
+    private String identityTime;
+
+    @NotBlank(message = "开户账号不能为空")
+    @ApiModelProperty(value = "开户账号")
+    private String bankName;
+
+    @NotBlank(message = "开户行不能为空")
+    @ApiModelProperty(value = "开户行")
+    private String accountno;
+
+    @ApiModelProperty("影像信息")
+    private List<EsmUserImageVo> esmUserImageVo;
+}

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentAuthResultDto.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel("个代认证审核结果获取DTO")
+public class AgentAuthResultDto {
+
+    @NotBlank(message = "用户id为空")
+    @ApiModelProperty(value = "用户id",required = true)
+    private String userId;
+
+}

+ 30 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentSubmitDto.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@ApiModel("个代资料提交DTO")
+public class AgentSubmitDto {
+
+
+    @NotBlank(message = "开户账号不能为空")
+    @ApiModelProperty(value = "开户账号")
+    private String bankName;
+
+    @NotBlank(message = "开户行不能为空")
+    @ApiModelProperty(value = "开户行")
+    private String accountno;
+
+    @NotBlank(message = "用户id为空")
+    @ApiModelProperty(value = "用户id",required = true)
+    private String userId;
+
+    @ApiModelProperty("影像信息")
+    private List<EsmUserImageVo> esmUserImageVo;
+}

+ 40 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentUserNewDto.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel("个代用户DTO")
+public class AgentUserNewDto {
+
+    @NotBlank(message = "姓名不能为空")
+    @ApiModelProperty(value = "姓名",required = true)
+    private String name;
+
+    @NotBlank(message = "手机号不能为空")
+    @ApiModelProperty(value = "手机号",required = true)
+    private String mobile;
+
+    @NotBlank(message = "密码不能为空")
+    @ApiModelProperty(value = "密码" ,required = true)
+    private String password;
+
+    @NotBlank(message = "手机验证码不能为空")
+    @ApiModelProperty(value = "手机验证码",required = true)
+    private String mobileMsg;
+
+    @NotBlank(message = "推荐人ID不能为空")
+    @ApiModelProperty(value = "推荐人ID",required = true)
+    private String referrerId;
+
+    @NotBlank(message = "推荐人名称不能为空")
+    @ApiModelProperty(value = "推荐人名称",required = true)
+    private String referrerName;
+
+    @NotBlank(message = "个代、出单员标识不能为空")
+    @ApiModelProperty(value = "个代、出单员标识:2个代、1出单员",required = true)
+    private String flag;
+}

+ 44 - 0
src/main/java/com/ydtech/modules/admin/model/dto/LocationResponse.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.admin.model.dto;
+
+import lombok.Data;
+
+@Data
+public class LocationResponse {
+
+    private String address;
+    private Content content;
+    private int status;
+
+
+    @Data
+    public static class Content {
+
+        private String address;
+        private AddressDetail addressDetail;
+        private Point point;
+
+        @Data
+        public static class AddressDetail {
+
+            private String adcode;
+            private String city;
+            private int cityCode;
+            private String district;
+            private String province;
+            private String street;
+            private String streetNumber;
+
+            // Getters and Setters
+        }
+        @Data
+        public static class Point {
+
+            private String x;
+            private String y;
+
+
+        }
+    }
+
+
+}

+ 9 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamDto.java

@@ -30,6 +30,15 @@ public class SysUserTeamDto implements Serializable {
     @ApiModelProperty(value = "状态")
     private Integer status;
 
+    @ApiModelProperty(value = "等级")
+    private Integer level;
+
+    @ApiModelProperty(value = "等级名称")
+    private String levelName;
+
+    @ApiModelProperty(value = "更新时间")
+    private String updateTime;
+
     public SysUserTeamDto(SysUser sysUser) {
         this.id = sysUser.getId();
         this.name = sysUser.getName();

+ 9 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamInfoDto.java

@@ -56,6 +56,15 @@ public class SysUserTeamInfoDto {
     @ApiModelProperty(value = "推荐人姓名")
     private String referrersName;
 
+    @ApiModelProperty(value = "角色")
+    private String roleName;
+
+    @ApiModelProperty(value = "来源")
+    private String source;
+
+    @ApiModelProperty(value = "通过描述")
+    private String passDesc;
+
     public SysUserTeamInfoDto(SysUser sysUser, SysDept sysDept, SysDept  organization, SysUserInfo sysUserInfo) {
         this.organization = organization.getName();
         this.deptId = sysDept.getId();

+ 41 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserTeamStaticDto.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("认证数量统计信息")
+@Data
+public class SysUserTeamStaticDto {
+
+    @ApiModelProperty("日期")
+    private String timeDay;
+
+    @ApiModelProperty("全部")
+    private Integer allCount;
+
+    @ApiModelProperty("未审核")
+    private Integer noCount;
+
+    @ApiModelProperty("审核通过")
+    private Integer yesCount;
+
+    @ApiModelProperty("一级代理")
+    private Integer oneCount;
+
+    @ApiModelProperty("二级代理")
+    private Integer twoCount;
+
+    @ApiModelProperty("三级代理")
+    private Integer threeCount;
+
+    @ApiModelProperty("临时代理")
+    private Integer tempCount;
+
+
+    @ApiModelProperty("图表数据")
+    private JSONObject staticsData;
+
+}

+ 119 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysUserAgentTrack.java

@@ -0,0 +1,119 @@
+package com.ydtech.modules.admin.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 个代用户认证审核轨迹表
+ * @TableName sys_user_agent_track
+ */
+@TableName(value ="sys_user_agent_track")
+@Data
+public class SysUserAgentTrack implements Serializable {
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private String userId;
+
+    /**
+     * 状态  0.注册 1.认证成功 2.认证失败 3. 银行卡认证成功 4. 银行卡认证失败  5.审核成功 6.审核失败
+     */
+    private Integer status;
+
+    /**
+     * 审核人Id
+     */
+    private String approveId;
+
+    /**
+     * 审核人
+     */
+    private String approveName;
+
+    /**
+     * 审核认证信息
+     */
+    private String approveMess;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        SysUserAgentTrack other = (SysUserAgentTrack) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getApproveId() == null ? other.getApproveId() == null : this.getApproveId().equals(other.getApproveId()))
+            && (this.getApproveName() == null ? other.getApproveName() == null : this.getApproveName().equals(other.getApproveName()))
+            && (this.getApproveMess() == null ? other.getApproveMess() == null : this.getApproveMess().equals(other.getApproveMess()))
+            && (this.getCreateBy() == null ? other.getCreateBy() == null : this.getCreateBy().equals(other.getCreateBy()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getApproveId() == null) ? 0 : getApproveId().hashCode());
+        result = prime * result + ((getApproveName() == null) ? 0 : getApproveName().hashCode());
+        result = prime * result + ((getApproveMess() == null) ? 0 : getApproveMess().hashCode());
+        result = prime * result + ((getCreateBy() == null) ? 0 : getCreateBy().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", status=").append(status);
+        sb.append(", approveId=").append(approveId);
+        sb.append(", approveName=").append(approveName);
+        sb.append(", approveMess=").append(approveMess);
+        sb.append(", createBy=").append(createBy);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 1 - 1
src/main/java/com/ydtech/modules/admin/model/vo/AppCustomerManagementQueryVo.java

@@ -24,7 +24,7 @@ public class AppCustomerManagementQueryVo implements Serializable {
     @ApiModelProperty("工号,用户名,手机号")
     private String criteria;
 
-    @ApiModelProperty("认证状态 1 认证成功 2 认证失败")
+    @ApiModelProperty("认证状态0.未认证 1 认证成功")
     private String authenticationStatus;
 
     @ApiModelProperty(value = "每页页数")

+ 31 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysUserAgentVo.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserInfo;
+import com.ydtech.modules.esm.model.vo.EsmUserImageQueryVo;
+import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("个代结果")
+public class SysUserAgentVo {
+
+    @ApiModelProperty("认证/审核结果")
+    private Integer status;
+
+    @ApiModelProperty("用户信息")
+    private SysUser sysUser;
+
+    @ApiModelProperty("用户详情信息")
+    private SysUserInfo sysUserInfo;
+
+    @ApiModelProperty("影像信息")
+    private List<EsmUserImageQueryVo> esmUserImageVo;
+
+    @ApiModelProperty("审核信息")
+    private String desc;
+}

+ 5 - 1
src/main/java/com/ydtech/modules/admin/service/AppCustomerManagementService.java

@@ -27,5 +27,9 @@ public interface AppCustomerManagementService {
      **/
     HttpResult<SysUserTeamInfoDto> getUserInfo(String userId);
 
-
+    /**
+     * 认证数量统计
+     * @return
+     */
+    HttpResult authStatics(Integer dateType);
 }

+ 20 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserAgentTrackService.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+
+/**
+* @author dongxin
+* @description 针对表【sys_user_agent_track(个代用户认证审核轨迹表)】的数据库操作Service
+* @createDate 2024-11-04 14:57:40
+*/
+public interface SysUserAgentTrackService extends IService<SysUserAgentTrack> {
+
+    /**
+     * 认证审核轨迹查询
+     * @param id
+     * @param status
+     * @return
+     */
+    SysUserAgentTrack queryTrack(String id, Integer status);
+}

+ 43 - 1
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -14,6 +14,7 @@ import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
@@ -303,7 +304,48 @@ public interface SysUserService extends BaseIService<SysUser> {
     List<SysUser> getTreeUser();
 
 
-    boolean addInfo(SysUser sysUser);
+    void addInfo(SysUser sysUser);
+
+    /**
+     * 个代注册
+     *
+     * @param dto 注册dto
+     * @param recommender 推荐人信息
+     * @return
+     */
+    String agentRegist(AgentUserNewDto dto, SysUser recommender);
+
+    /**
+     * 个代认证
+     *
+     * @param sysUser 用户信息
+     * @param dto 认证dto
+     */
+    SysUserAgentVo agentAuth(SysUser sysUser, AgentAuthDto dto);
+
+    /**
+     * 个代(认证/审核)结果获取
+     * @param sysUser
+     * @param dto
+     */
+    SysUserAgentVo getAuthResult(SysUser sysUser, AgentAuthResultDto dto);
+
+    /**
+     * 个代资料提交
+     * @param sysUser
+     * @param dto
+     * @return
+     */
+    void agentSubmit(SysUser sysUser, AgentSubmitDto dto);
+
+    /**
+     *
+     * @param roleId 角色id
+     * @param deptId 机构id
+     * @return 用户信息
+     */
+    SysUser getByRoleIdAndDeptId(String roleId, String deptId);
+
 }
 
 

+ 210 - 5
src/main/java/com/ydtech/modules/admin/service/impl/AppCustomerManagementImpl.java

@@ -1,26 +1,40 @@
 package com.ydtech.modules.admin.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.constants.enums.dict.organization.OrganizationSource;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.SysUserInfo;
-import com.ydtech.modules.admin.model.SysUserTrack;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.RoleConstants;
+import com.ydtech.modules.admin.constants.UserAgentStatus;
+import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamInfoDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.utils.DateUtil;
 import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
+import org.apache.bcel.generic.LADD;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
@@ -31,12 +45,17 @@ public class AppCustomerManagementImpl implements AppCustomerManagementService {
 
     private final SysDeptService sysDeptService;
 
+    private final SysUserRoleService sysUserRoleService;
+
+
     private final EsmUserReferrerService esmUserReferrerService;
 
     private final SysUserInfoService sysUserInfoService;
 
     private final SysUserTrackService sysUserTrackService;
 
+    private final SysUserAgentTrackService sysUserAgentTrackService;
+
 
     @Override
     public HttpResult<BasePageResult<SysUserTeamDto>> authenticationQuery(AppCustomerManagementQueryVo managementQueryVo) {
@@ -62,7 +81,7 @@ public class AppCustomerManagementImpl implements AppCustomerManagementService {
             return HttpResult.ok(sysUserBasePageResult);
         }
 
-        BasePageResult<SysUserTeamDto> sysUserBasePageResult = esmUserReferrerService.getTeamUser(managementQueryVo, userId);
+        BasePageResult<SysUserTeamDto> sysUserBasePageResult = esmUserReferrerService.getTeamUser(managementQueryVo, userId,dept);
         return HttpResult.ok(sysUserBasePageResult);
     }
 
@@ -89,7 +108,193 @@ public class AppCustomerManagementImpl implements AppCustomerManagementService {
             sysUserTeamInfoDto.setReferrersId(esmUserReferrer.getReferrerId());
             sysUserTeamInfoDto.setReferrersName(esmUserReferrer.getReferrerName());
         }
+        SysUserRole role = sysUserRoleService.selectByUserId(userId);
+        if(Objects.nonNull(role)){
+            RoleConstants roleConstants = Enum.valueOf(RoleConstants.class, "R" + role.getRoleId());
+            sysUserTeamInfoDto.setRoleName(roleConstants.getName());
+        }
 
+        switch (dept.getManagementSource()){
+            case "1":
+                sysUserTeamInfoDto.setSource(OrganizationSource.OS_1.getDesc());
+                break;
+            case "2":
+                sysUserTeamInfoDto.setSource(OrganizationSource.OS_2.getDesc());
+                break;
+            case "3":
+                sysUserTeamInfoDto.setSource(OrganizationSource.OS_3.getDesc());
+                break;
+        }
+        // 个代
+        if (OrganizationSource.OS_2.getCode().equals(dept.getManagementSource())) {
+            // 实名认证通过
+            if (UserWorkStatus.UWS_8.getCode().equals(sysUser.getStatus())) {
+                SysUserAgentTrack track = sysUserAgentTrackService.queryTrack(sysUser.getId(),
+                        UserAgentStatus.UAS_1.getCode());
+                if (Objects.nonNull(track)) {
+                    String desc = track.getCreateTime() + "由系统认证通过";
+                    sysUserTeamInfoDto.setPassDesc(desc);
+                }
+            // 实名认证未通过
+            } else if(UserWorkStatus.UWS_0.getCode().equals(sysUser.getStatus()) && sysUser.getFactorVerify().equals(2)){
+                SysUserAgentTrack track = sysUserAgentTrackService.queryTrack(sysUser.getId(),
+                        UserAgentStatus.UAS_2.getCode());
+                if (Objects.nonNull(track)) {
+                    String desc = "认证申请被驳回,驳回理由:" + track.getApproveMess();
+                    sysUserTeamInfoDto.setPassDesc(desc);
+                }
+            }
+            // 审核驳回
+            if (UserWorkStatus.UWS_3.getCode().equals(sysUser.getStatus())) {
+                String desc = sysUserTrackService.getApproveMessByUserId(sysUser.getId(),"1");
+                String passDesc = "提交资料申请被驳回,驳回理由:" + desc;
+                sysUserTeamInfoDto.setPassDesc(passDesc);
+            // 审核通过
+            } else {
+                SysUserTrack track = sysUserTrackService.getLastTime(sysUser.getId());
+                if (Objects.nonNull(track)) {
+                    String desc = DateUtil.getDateFormat(track.getApproveTime(),"yyyy-MM-dd HH:mm:ss") + "由"+track.getApproveBy()+"审核通过";
+                    sysUserTeamInfoDto.setPassDesc(desc);
+                }
+            }
+        }
         return HttpResult.ok(sysUserTeamInfoDto);
     }
+
+    @Override
+    public HttpResult authStatics(Integer dateType) {
+        String userId = BaseController.getUserId();
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        String start = "";
+        String end = "";
+        // 格式化输出
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        // 设置结束时间(当前时间)
+        LocalDateTime endTime = now.withHour(23).withMinute(59).withSecond(59).withNano(0);
+        LocalDateTime startTime = null;
+        // 当天
+        if (dateType.equals(1)){
+            startTime = now.toLocalDate().atStartOfDay();
+        // 七天
+        } else if(dateType.equals(2)){
+            // 获取七天前的日期
+            LocalDateTime sevenDaysAgo = now.minusDays(7);
+            startTime = sevenDaysAgo.toLocalDate().atStartOfDay();
+        // 三十天
+        } else if(dateType.equals(3)){
+            // 获取三十天前的日期
+            LocalDateTime sevenDaysAgo = now.minusDays(30);
+            startTime = sevenDaysAgo.toLocalDate().atStartOfDay();
+        }
+        if(!dateType.equals(0)){
+            start = startTime.format(formatter);
+            end = endTime.format(formatter);
+        }
+        List<SysUserTeamStaticDto> dtos = esmUserReferrerService.authStatics(userId,start,end,dateType);
+
+        /** 前端统计图所需数据组装 start */
+        SysUserTeamStaticDto result = new SysUserTeamStaticDto();
+        JSONObject res = new JSONObject();
+        JSONArray cate = new JSONArray();
+        JSONArray series = new JSONArray();
+        if(CollUtil.isEmpty(dtos)){
+            result.setAllCount(0);
+            result.setOneCount(0);
+            result.setTwoCount(0);
+            result.setThreeCount(0);
+            result.setNoCount(0);
+            result.setTempCount(0);
+            result.setYesCount(0);
+            if (dateType.equals(1)){
+                cate.add("一级代理");
+                cate.add("二级代理");
+                cate.add("三级代理");
+                cate.add("临时代理");
+                series.add(0);
+                series.add(0);
+                series.add(0);
+                series.add(0);
+            }
+        }
+        if (dateType.equals(1)){
+            if(CollUtil.isNotEmpty(dtos)){
+                for (SysUserTeamStaticDto dto : dtos) {
+                    BeanUtils.copyProperties(dto, result);
+                    cate.add("一级代理");
+                    cate.add("二级代理");
+                    cate.add("三级代理");
+                    cate.add("临时代理");
+                    series.add(dto.getOneCount());
+                    series.add(dto.getTwoCount());
+                    series.add(dto.getThreeCount());
+                    series.add(dto.getTempCount());
+                }
+            }
+            res.put("categories", cate);
+            res.put("series", series);
+            result.setStaticsData(res);
+            // 七天
+        } else if(dateType.equals(2) || dateType.equals(3)){
+            Integer totalOne = 0;
+            Integer totalTwo = 0;
+            Integer totalThree = 0;
+            Integer totalTemp = 0;
+            Integer totalAll = 0;
+            Integer totalNo = 0;
+            Integer totalYes = 0;
+
+            JSONObject one = new JSONObject();
+            one.put("name","一级代理");
+            JSONArray oneArray = new JSONArray();
+            JSONObject two = new JSONObject();
+            two.put("name","二级代理");
+            JSONArray twoArray = new JSONArray();
+            JSONObject three = new JSONObject();
+            three.put("name","三级代理");
+            JSONArray threeArray = new JSONArray();
+            JSONObject temp = new JSONObject();
+            temp.put("name","临时代理");
+            JSONArray tempArray = new JSONArray();
+            for (SysUserTeamStaticDto dto : dtos) {
+                totalOne += dto.getOneCount();
+                totalTwo += dto.getTwoCount();
+                totalThree += dto.getThreeCount();
+                totalTemp += dto.getTempCount();
+                totalAll += dto.getAllCount();
+                totalNo += dto.getNoCount();
+                totalYes += dto.getYesCount();
+                oneArray.add(dto.getOneCount());
+                twoArray.add(dto.getTwoCount());
+                threeArray.add(dto.getThreeCount());
+                tempArray.add(dto.getTempCount());
+                cate.add(dto.getTimeDay().substring(5));
+            }
+            one.put("data",oneArray);
+            two.put("data",twoArray);
+            three.put("data",threeArray);
+            temp.put("data",tempArray);
+            series.add(one);
+            series.add(two);
+            series.add(three);
+            series.add(temp);
+            res.put("categories", cate);
+            res.put("series", series);
+            result.setOneCount(totalOne);
+            result.setTwoCount(totalTwo);
+            result.setThreeCount(totalThree);
+            result.setTempCount(totalTemp);
+            result.setAllCount(totalAll);
+            result.setNoCount(totalNo);
+            result.setYesCount(totalYes);
+            result.setStaticsData(res);
+        }else{
+            if(CollUtil.isNotEmpty(dtos)){
+                BeanUtils.copyProperties(dtos.get(0), result);
+            }
+        }
+        /** 前端统计图所需数据组装 end */
+        return HttpResult.ok(result);
+    }
+
 }

+ 28 - 15
src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java

@@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.aop.exception.DescribeException;
+import com.ydtech.constants.enums.WechatOpenSystem;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.dao.*;
@@ -32,6 +33,7 @@ import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
@@ -52,6 +54,7 @@ import java.util.stream.Collectors;
  * @author makejava
  * @since 2024-08-01 11:20:57
  */
+@Slf4j
 @Service("sysPartnerService")
 public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPartner> implements SysPartnerService {
     @Resource
@@ -94,9 +97,9 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
     private SysProportionConfigMapper sysProportionConfigMapper;
     @Resource
     private EsmUserReferrerMapper esmUserReferrerMapper;
-    @Resource
-    private WxMpService wxMpService;
 
+    @Resource
+    private Map<String, WxMpService> wxMpService;
 
     @Override
     public List<SysPartner> queryRecommendAndPartner(String id) {
@@ -1601,12 +1604,15 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         if (sysRelationPersonList.size() > 0) {
             List<String> collect = sysRelationPersonList.stream().map(SysRelationPerson::getSuggestId).collect(Collectors.toList());
 
-            if (collect.size() > 4) {
-                List<String> collect1 = collect.stream().limit(4).collect(Collectors.toList());
-                ids.addAll(collect1);
-            } else {
+//            if (collect.size() > 4) {
+//                List<String> collect1 = collect.stream().limit(4).collect(Collectors.toList());
+//                ids.addAll(collect1);
+//            } else {
+//                ids.addAll(collect);
+//
+//            }
+            if (collect.size()>0) {
                 ids.addAll(collect);
-
             }
 
         }
@@ -1616,12 +1622,15 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         if (sysRelationList.size() > 0) {
 
             List<String> collect1 = sysRelationList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
-            if (collect1.size() > 4) {
-                List<String> collect2 = collect1.stream().limit(4).collect(Collectors.toList());
-                ids.addAll(collect2);
-            } else {
+//            if (collect1.size() > 4) {
+//                List<String> collect2 = collect1.stream().limit(4).collect(Collectors.toList());
+//                ids.addAll(collect2);
+//            } else {
+//                ids.addAll(collect1);
+//
+//            }
+            if (collect1.size() >0) {
                 ids.addAll(collect1);
-
             }
         }
         if (CollectionUtil.isNotEmpty(ids)) {
@@ -2052,6 +2061,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
 //        AlipayVo alipayVo = new AlipayVo(token, sysUser.getId());
         StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
         aapLoginVo.setToken(token);
+        log.info("支付宝登录返参:{}",aapLoginVo);
         return HttpResult.ok("", aapLoginVo);
     }
 
@@ -2090,6 +2100,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         boolean update = sysUserService.updateById(user);
 
         if (update) {
+            log.info("支付宝绑定成功");
             return HttpResult.ok("绑定成功");
         }
         throw new SystemException("绑定失败");
@@ -2113,8 +2124,9 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
     @Override
     public HttpResult<AAPLoginVo> loginWechat(WechatLoginVo wechatLoginVo) throws WxErrorException {
         AAPLoginVo aapLoginVo = new AAPLoginVo();
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.HHR.getCode()).getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
         String openId = accessToken.getOpenId();
+        log.info("微信登录openId:{}",openId);
         SysUser sysUser = sysUserService.lambdaQuery()
                 .eq(SysUser::getOpenid, openId)
                 .one();
@@ -2141,13 +2153,13 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         String token = StpUtil.createLoginSession(sysUser.getId());
         StpUtil.getSessionByLoginId(sysUser.getId()).set(SaSession.USER, sysUser);
         aapLoginVo.setToken(token);
-
+        log.info("微信登录返参:{}",aapLoginVo);
         return HttpResult.ok("", aapLoginVo);
     }
 
     @Override
     public HttpResult<Object> bindWechat(WechatBindVo wechatBindVo, String userId) throws WxErrorException {
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatBindVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.HHR.getCode()).getOAuth2Service().getAccessToken(wechatBindVo.getCode());
         String openId = accessToken.getOpenId();
 
         SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getOpenid, openId).one();
@@ -2164,6 +2176,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         boolean update = sysUserService.updateById(user);
 
         if (update) {
+            log.info("微信绑定成功");
             return HttpResult.ok("绑定成功");
         }
         throw new SystemException("绑定失败");

+ 1 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java

@@ -80,7 +80,7 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         sysPcAddress.setCity(ipInfoDto.getCity());
         sysPcAddress.setDistrict(ipInfoDto.getDistrict());
         sysPcAddress.setSource(sysDept.getManagementSource());
-        sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + ipInfoDto.getDistrict());
+        sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + Optional.ofNullable(ipInfoDto.getDistrict()).orElse(""));
         sysPcAddress.setOperationTime(new Date());
         sysPcAddress.setLeaderName(user.getLeaderName());
 

+ 39 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserAgentTrackServiceImpl.java

@@ -0,0 +1,39 @@
+package com.ydtech.modules.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysUserAgentTrackMapper;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+import com.ydtech.modules.admin.service.SysUserAgentTrackService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_user_agent_track(个代用户认证审核轨迹表)】的数据库操作Service实现
+* @createDate 2024-11-04 14:57:40
+*/
+@Service
+public class SysUserAgentTrackServiceImpl extends ServiceImpl<SysUserAgentTrackMapper, SysUserAgentTrack>
+    implements SysUserAgentTrackService {
+
+    @Override
+    public SysUserAgentTrack queryTrack(String id, Integer status) {
+        LambdaQueryWrapper<SysUserAgentTrack> trackLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        trackLambdaQueryWrapper.eq(SysUserAgentTrack::getUserId, id)
+                .eq(SysUserAgentTrack::getStatus, status)
+                .orderByDesc(SysUserAgentTrack::getId);
+        List<SysUserAgentTrack> trackList = this.list(trackLambdaQueryWrapper);
+        if(CollUtil.isNotEmpty(trackList)){
+            return trackList.get(0);
+        }
+        return new SysUserAgentTrack();
+    }
+
+}
+
+
+
+

+ 266 - 24
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.admin.service.impl;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -19,29 +20,37 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.handler.CreateAndUpdateMetaObjectHandler;
-import com.ydtech.modules.admin.constants.QuMarks;
-import com.ydtech.modules.admin.constants.RoleConstants;
-import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.components.UnionPayRequestApiComponent;
+import com.ydtech.modules.admin.components.request.UnionPayRequest;
+import com.ydtech.modules.admin.components.response.UnionPayResponse;
+import com.ydtech.modules.admin.constants.*;
 import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.dao.SysPartnerMapper;
 import com.ydtech.modules.admin.dao.SysUserLinkAreaMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.*;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.admin.utils.RecordUserUtils;
+import com.ydtech.modules.admin.utils.UserAgentTrackUtils;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.model.EsmUserImage;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
+import com.ydtech.modules.esm.model.vo.EsmUserImageQueryVo;
 import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
 import com.ydtech.modules.esm.service.EsmUserImageService;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.service.MessageSecretaryService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.security.utils.PasswordUtils;
+import com.ydtech.utils.IDCardUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import lombok.extern.slf4j.Slf4j;
@@ -128,8 +137,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     private SysPartnerMapper sysPartnerMapper;
 
+    @Autowired
+    private MessageSecretaryService messageSecretaryService;
+
+    @Autowired
+    private UnionPayRequestApiComponent unionPayRequestApiComponent;
+
+    @Autowired
+    private SysUserAgentTrackService sysUserAgentTrackService;
+
+    @Autowired
+    private SysUserBankCardService bankCardService;
+
     @Value("${httpUrl}")
     private String httpUrl;
+
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
         PageVo<SysUserBaseVO> pageVo = new PageVo();
@@ -302,15 +324,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             return HttpResult.error("手机号不能为空");
         }
 //            if ("0".equals(type)) {  // 0 登录 1 注册
-            SysUser sysUser = this.findByPhone(phone);
-            if (sysUser == null) {
-                return HttpResult.error("手机号不存在!");
-            }
+        SysUser sysUser = this.findByPhone(phone);
+        if (sysUser == null) {
+            return HttpResult.error("手机号不存在!");
+        }
 //            }
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String timeCreate = simpleDateFormat.format(sysUser.getCreateTime());
         String userId = sysUser.getId();
-        List<SysUserTrack> sysUserTracks = sysUserTrackService.list(new LambdaQueryWrapper<SysUserTrack>().eq(SysUserTrack::getUserId,userId).orderByDesc(SysUserTrack::getApproveTime));
+        List<SysUserTrack> sysUserTracks = sysUserTrackService.list(new LambdaQueryWrapper<SysUserTrack>().eq(SysUserTrack::getUserId, userId).orderByDesc(SysUserTrack::getApproveTime));
         SysUserTrack sysUserTrack = sysUserTracks.get(0);
 
         Integer type = sysUser.getType();
@@ -342,7 +364,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         Map params = new HashMap();//请求参数
         params.put("mobile", phone);//接收短信的手机号码
         params.put("tpl_id", "265910");//短信模板ID,请参考个人中心短信模板设置
-        params.put("vars",varsJson);
+        params.put("vars", varsJson);
         params.put("key", "fbe7b165e9e13e52f3b1f2654eab9c0e");//应用APPKEY(应用详细页查询)
         params.put("dtype", "json");//返回数据的格式,xml或json,默认json
 
@@ -944,14 +966,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             esmUserImageService.saveBatch(esmUserImages);
         }
         SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, userId);
-        return HttpResult.ok("新增成功",sysUserMapper.selectById(userId));
+        return HttpResult.ok("新增成功", sysUserMapper.selectById(userId));
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult saveUserInfo1(SysUser2Vo sysUserVo) {
 
-        log.info("添加团队入参:{}",sysUserVo);
+        log.info("添加团队入参:{}", sysUserVo);
         SysUser sysUser = sysUserVo.getSysUser();
         sysUser.setType(3);
         sysUser.setCreateTime(new Date());
@@ -1107,7 +1129,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             esmUserImageService.saveBatch(esmUserImages);
         }
         SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, userId);
-        return HttpResult.ok("新增成功",sysUserMapper.selectById(userId));
+        return HttpResult.ok("新增成功", sysUserMapper.selectById(userId));
     }
 
     /**
@@ -1211,6 +1233,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userId = sysUser.getId();
                 updateById(sysUser);
             }
+
+            if(StringUtils.isEmpty(sysUser.getLeaderId())){
+                SysUser leaderUser = baseMapper.getByRoleIdAndDeptId("21", sysUser.getDeptId());
+                sysUser.setLeaderId(leaderUser.getLeaderId());
+                sysUser.setLeaderName(leaderUser.getLeaderName());
+            }
+
+
             SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
             sysUserInfo.setId(userId);
             sysUserInfoService.saveOrUpdate(sysUserInfo);
@@ -1218,6 +1248,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUser.setStatus(sysUserVo.getSysUser().getStatus());
             updateById(sysUser);
 
+            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+            // 渠道负责人更新数据
+            if (ManagementSource.MS_01.getCode().equals(sysDept.getManagementSource()) && "21".equals(sysUser.getRoleId())) {
+                boolean update = lambdaUpdate()
+                        .set(SysUser::getLeaderId, sysUser.getLeaderId())
+                        .set(SysUser::getLeaderName, sysUser.getLeaderName())
+                        .eq(SysUser::getDeptId, sysDept.getId())
+                        .update();
+                AssertionUtils.isSucceed(update, "出单员数据更新失败");
+            }
+
             //角色配置
             SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
             sysUserRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
@@ -1338,10 +1379,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userId = sysUser.getId();
                 updateById(sysUser);
             }
+
+            if(StringUtils.isEmpty(sysUser.getLeaderId())){
+                SysUser leaderUser = baseMapper.getByRoleIdAndDeptId("21", sysUser.getDeptId());
+                sysUser.setLeaderId(leaderUser.getLeaderId());
+                sysUser.setLeaderName(leaderUser.getLeaderName());
+            }
+
             SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
             sysUserInfo.setId(userId);
             sysUserInfoService.saveOrUpdate(sysUserInfo);
         } else {
+
+            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+            // 渠道负责人更新数据
+            if (ManagementSource.MS_01.getCode().equals(sysDept.getManagementSource()) && "21".equals(sysUser.getRoleId())) {
+                boolean update = lambdaUpdate()
+                        .set(SysUser::getLeaderId, sysUser.getLeaderId())
+                        .set(SysUser::getLeaderName, sysUser.getLeaderName())
+                        .eq(SysUser::getDeptId, sysDept.getId())
+                        .update();
+                AssertionUtils.isSucceed(update, "出单员数据更新失败");
+            }
+
             sysUser.setStatus(sysUserVo.getSysUser().getStatus());
             // 设置跳过填充
             CreateAndUpdateMetaObjectHandler.setSkipFill(true);
@@ -2268,7 +2328,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
 
-
     @Override
     public HttpResult updateManagementPersonnel(UpdateManagementDto managementDto) {
         try {
@@ -2301,11 +2360,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public List<SysUser> findDxUserList() {
         return sysUserMapper.findDxUserList();
     }
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/25 19:23
-     *  @Description: 查询用户管理的电销组员
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/25 19:23
+     * @Description: 查询用户管理的电销组员
      */
     @Override
     public List<String> getGroupByUserId(String userId) {
@@ -2330,11 +2390,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         List<SysDeptTreeVo> sysDeptTreeVos = BeanUtil.copyToList(sysDeptList, SysDeptTreeVo.class);
         Map<String, List<SysDeptTreeVo>> map = sysDeptTreeVos.stream().sorted(Comparator.comparing(SysDeptTreeVo::getId)).collect(Collectors.groupingBy(SysDeptTreeVo::getParentId));
         sysDeptTreeVos.forEach(i -> {
-            if(map.get(i.getId()) ==null ){
+            if (map.get(i.getId()) == null) {
                 List<SysUser> orDefault = groupedByDeptId.getOrDefault(i.getId(), new ArrayList<>());
                 List<SysDeptTreeVo> sysDeptTreeVos1 = BeanUtil.copyToList(orDefault, SysDeptTreeVo.class);
                 i.setChildren(sysDeptTreeVos1);
-            }else {
+            } else {
                 i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
                 i.setDeptCount(i.getChildren().size());
             }
@@ -2343,8 +2403,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
         return sysDeptTreeVos;
     }
+
     /**
      * 获取人员数
+     *
      * @return
      */
     @Override
@@ -2364,10 +2426,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean addInfo(SysUser sysUser) {
-        SysUserTrack sysUserTrack = new SysUserTrack(sysUser);
+    public void addInfo(SysUser sysUser) {
 
-        sysUserTrackService.save(sysUserTrack);
         Integer type = sysUser.getType();
         if (type == 1) {
             SysPartner sysPartner = sysPartnerMapper.selectOne(new LambdaQueryWrapper<SysPartner>().eq(SysPartner::getUserId, sysUser.getId()));
@@ -2382,7 +2442,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 sysPartnerDto.setLevel(sysUser.getLevel());
                 sysPartnerService.insert(sysPartnerDto);
             }
-        } else if (type == 2){
+        } else if (type == 2) {
             SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
             SysDept sysDeptParent = sysDeptService.getById(sysDept.getParentId());
             SysUser sysUserReferrerId = this.getById(sysUser.getReferrerId());
@@ -2416,9 +2476,191 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysAgencyLeaderService.insert(sysAgencyLeaderDto);
         }
 
-        return this.updateById(sysUser);
+    }
+
 
+    @Override
+    @Transactional
+    public String agentRegist(AgentUserNewDto dto, SysUser recommender) {
+        int noCount = 3;
+        //根据机构号获取userid最大值,不需要加人员类型判断  从sys_user获取
+        String maxId = this.findMaxId(recommender.getDeptId());
+        String nextPK = StringUtils.isNullOrEmpty(maxId) ? recommender.getDeptId() + "001"
+                : IdGenerate.nextCode(maxId, noCount);
+        SysUser sysUser = new SysUser();
+        sysUser.setId(nextPK);
+        sysUser.setName(dto.getName());
+        sysUser.setMobile(dto.getMobile());
+        sysUser.setDeptId(recommender.getDeptId());
+        //密码加密
+        String salt = PasswordUtils.getSalt();
+        sysUser.setSalt(salt);
+        String password = PasswordUtils.encode(dto.getPassword(), salt);
+        sysUser.setPassword(password);
+        sysUser.setStatus(UserWorkStatus.UWS_0.getCode());
+        sysUser.setCreateBy("admin");
+        sysUser.setCreateTime(new Date());
+        sysUser.setFactorVerify(0);  // 未认证状态
+        sysUser.setUpdateTime(new Date());
+        sysUser.setUpdateBy("admin");
+        this.save(sysUser);
+        //角色配置
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(nextPK);
+        userRole.setRoleId(20l);
+        sysUserRoleService.save(userRole);
+        //添加增员服务消息
+        //添加订单消息
+        messageSecretaryService.addMessage(MessageTypeConstants.M_6, dto.getReferrerId(),
+                dto.getMobile() + "(" + dto.getName() + ")" + "进行注册,请立即认证审核.");
+        esmUserReferrerService.addReferrer(dto.getReferrerId(), nextPK);
+
+        // 保存个代认证轨迹
+        SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
+                sysUser.getId(), UserAgentStatus.UAS_0.getCode(),
+                "admin");
+        return sysUser.getId();
+    }
+
+    @Override
+    @Transactional
+    public SysUserAgentVo agentAuth(SysUser sysUser, AgentAuthDto dto) {
+        SysUser user = this.getById(sysUser.getId());
+        String msg;
+        Integer status;
+        SysUserAgentVo userAgentVo = new SysUserAgentVo();
+        // 三要素认证
+        UnionPayRequest request = new UnionPayRequest();
+        request.setName(dto.getName());
+        request.setPhoneNo(dto.getMobile());
+        request.setCertNo(dto.getIdentity());
+        UnionPayResponse response = unionPayRequestApiComponent.threeFactorVerifyRequest(request);
+        if (response != null && !"00".equals(response.getRespCode())) {
+            msg = "认证信息不一致:" + response.getDetailRespMsg();
+            status = UserAgentStatus.UAS_2.getCode();
+            user.setFactorVerify(2); // 认证失败 即未认证状态
+            userAgentVo.setStatus(status);
+            userAgentVo.setDesc(msg);
+        } else {
+            msg = "认证成功";
+            status = UserAgentStatus.UAS_1.getCode();
+            user.setFactorVerify(1);
+            user.setStatus(UserWorkStatus.UWS_8.getCode());
+            userAgentVo.setStatus(status);
+        }
+        user.setName(dto.getName());
+        user.setMobile(dto.getMobile());
+        user.setIdentity(dto.getIdentity());
+        user.setIdentityTime(dto.getIdentityTime());
+        user.setUpdateBy("admin");
+        user.setUpdateTime(new Date());
+        this.saveOrUpdate(user);
+
+        SysUserInfo sysUserInfo = new SysUserInfo();
+        sysUserInfo.setId(user.getId());
+        // 根据身份证获取出生日期和性别
+        sysUserInfo.setBirthday(LocalDate.parse(IDCardUtils.GetBirthday(dto.getIdentity())));
+        sysUserInfo.setSex(IDCardUtils.GetSex(dto.getIdentity()).equalsIgnoreCase("FEMALE") ? "F" : "M");
+        sysUserInfo.setBankName(dto.getBankName());
+        sysUserInfo.setAccountno(dto.getAccountno());
+        sysUserInfoService.saveOrUpdate(sysUserInfo);
+        // 影像资料
+        LambdaQueryWrapper<EsmUserImage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EsmUserImage::getUserId, user.getId());
+        esmUserImageService.remove(wrapper);
+
+        List<EsmUserImageVo> esmUserImageVo = dto.getEsmUserImageVo();
+        String finalUserId = user.getId();
+        List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, finalUserId)).collect(Collectors.toList());
+        esmUserImageService.saveBatch(esmUserImages);
+        // 保存个代认证轨迹
+        SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
+                user.getId(), status,
+                BaseController.getUserName(),
+                null, msg);
+        return userAgentVo;
+    }
+
+    @Override
+    public SysUserAgentVo getAuthResult(SysUser sysUser, AgentAuthResultDto dto) {
+        SysUser user = this.getById(sysUser.getId());
+        SysUserInfo info = sysUserInfoService.getById(sysUser.getId());
+        SysUserAgentVo userAgentVo = new SysUserAgentVo();
+        userAgentVo.setSysUser(user);
+        if (Objects.nonNull(info)) {
+            userAgentVo.setSysUserInfo(info);
+        }
+
+        if (UserWorkStatus.UWS_0.getCode().equals(user.getStatus()) && user.getFactorVerify().equals(2)) {
+            SysUserAgentTrack track = sysUserAgentTrackService.queryTrack(sysUser.getId(),
+                    UserAgentStatus.UAS_2.getCode());
+            if (Objects.nonNull(track)) {
+                userAgentVo.setDesc(track.getApproveMess());
+            }
+        } else if (UserWorkStatus.UWS_3.getCode().equals(user.getStatus())) {
+            userAgentVo.setDesc(sysUserTrackService.getApproveMessByUserId(sysUser.getId(), "1"));
+        }
+        List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(sysUser.getId());
+        if (CollUtil.isNotEmpty(esmUserImageQueryVo)) {
+            userAgentVo.setEsmUserImageVo(esmUserImageQueryVo);
+        }
+        return userAgentVo;
     }
 
+    @Override
+    @Transactional
+    public void agentSubmit(SysUser user, AgentSubmitDto dto) {
+        SysUserInfo info = sysUserInfoService.getById(user.getId());
+        // 银行卡认证
+        UnionPayRequest request = new UnionPayRequest();
+        request.setName(user.getName());
+        request.setPhoneNo(user.getMobile());
+        request.setCertNo(user.getIdentity());
+        request.setCardNo(dto.getBankName());
+        UnionPayResponse response = unionPayRequestApiComponent.bankCardVerifyRequest(request);
+        String msg;
+        Integer status;
+        if (response != null && !"00".equals(response.getRespCode())) {
+            msg = "认证信息不一致:" + response.getDetailRespMsg();
+            status = UserAgentStatus.UAS_4.getCode();
+        } else {
+            msg = "银行卡认证成功";
+            status = UserAgentStatus.UAS_3.getCode();
+            SysUserBankCardVO sysUserBankCardVO = new SysUserBankCardVO();
+            sysUserBankCardVO.setUserId(dto.getUserId());
+            sysUserBankCardVO.setBankNumber(dto.getBankName());
+            sysUserBankCardVO.setBankAccount(dto.getAccountno());
+            sysUserBankCardVO.setPhoneNo(user.getMobile());
+            sysUserBankCardVO.setRealUserName(user.getName());
+            sysUserBankCardVO.setUserName(user.getName());
+            bankCardService.insertByBankNumber(sysUserBankCardVO);
+        }
+        // 保存个代银行卡认证轨迹
+        SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
+                user.getId(), status,
+                BaseController.getUserName(),
+                null, msg);
+
+        user.setStatus(UserWorkStatus.UWS_2.getCode());
+        user.setUpdateBy("admin");
+        user.setUpdateTime(new Date());
+        this.saveOrUpdate(user);
+        info.setBankName(dto.getBankName());
+        info.setAccountno(dto.getAccountno());
+        sysUserInfoService.saveOrUpdate(info);
+        // 影像资料
+        LambdaQueryWrapper<EsmUserImage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EsmUserImage::getUserId, user.getId());
+        esmUserImageService.remove(wrapper);
+
+        List<EsmUserImageVo> esmUserImageVo = dto.getEsmUserImageVo();
+        String finalUserId = user.getId();
+        List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, finalUserId)).collect(Collectors.toList());
+        esmUserImageService.saveBatch(esmUserImages);
+    }
 
+    @Override
+    public SysUser getByRoleIdAndDeptId(String roleId, String deptId) {
+        return baseMapper.getByRoleIdAndDeptId(roleId, deptId);
+    }
 }

+ 6 - 3
src/main/java/com/ydtech/modules/admin/service/impl/WechatServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.service.impl;
 
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import com.ydtech.constants.enums.WechatOpenSystem;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.dao.SysUserRoleMapper;
@@ -21,6 +22,8 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
+import java.util.Map;
+
 @Slf4j
 @Service
 @RequiredArgsConstructor
@@ -31,11 +34,11 @@ public class WechatServiceImpl implements WechatService {
 
     private final SysUserService sysUserService;
 
-    private final WxMpService wxMpService;
+    private final Map<String, WxMpService> wxMpService;
 
     @Override
     public HttpResult<WechatVo> login(WechatLoginVo wechatLoginVo) throws WxErrorException {
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.JZG.getCode()).getOAuth2Service().getAccessToken(wechatLoginVo.getCode());
         String openId = accessToken.getOpenId();
         SysUser sysUser = sysUserService.lambdaQuery()
                 .eq(SysUser::getOpenid, openId)
@@ -56,7 +59,7 @@ public class WechatServiceImpl implements WechatService {
 
     @Override
     public HttpResult<Object> bind(WechatBindVo wechatBindVo, String userId) throws WxErrorException {
-        WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(wechatBindVo.getCode());
+        WxOAuth2AccessToken accessToken = wxMpService.get(WechatOpenSystem.JZG.getCode()).getOAuth2Service().getAccessToken(wechatBindVo.getCode());
         String openId = accessToken.getOpenId();
 
         SysUser sysUser = sysUserService.lambdaQuery().eq(SysUser::getOpenid, openId).one();

+ 59 - 0
src/main/java/com/ydtech/modules/admin/utils/UserAgentTrackUtils.java

@@ -0,0 +1,59 @@
+package com.ydtech.modules.admin.utils;
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserRecord;
+import com.ydtech.modules.admin.model.po.SysUserAgentTrack;
+import com.ydtech.modules.admin.service.SysUserAgentTrackService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Service
+public class UserAgentTrackUtils {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private SysUserAgentTrackService sysUserAgentTrackService;
+
+    @Async
+    public void addTrack (String userId ,
+                          Integer status,
+                          String createBy,
+                          String approveId,
+                          String msg){
+        SysUserAgentTrack sysUserAgentTrack = new SysUserAgentTrack();
+        sysUserAgentTrack.setUserId(userId);
+        sysUserAgentTrack.setCreateBy(createBy);
+        sysUserAgentTrack.setCreateTime(LocalDateTime.now());
+        sysUserAgentTrack.setStatus(status);
+        sysUserAgentTrack.setApproveMess(msg);
+        if(StringUtils.isNotBlank(approveId)){
+            SysUser approveUser = sysUserService.getByUserId(approveId);
+            sysUserAgentTrack.setApproveId(approveId);
+            sysUserAgentTrack.setApproveName(approveUser.getName());
+        }else {
+            sysUserAgentTrack.setApproveName("系统认证");
+        }
+        sysUserAgentTrackService.save(sysUserAgentTrack);
+    }
+
+    @Async
+    public void addTrack (String userId ,
+                          Integer status,
+                          String createBy){
+        SysUserAgentTrack sysUserAgentTrack = new SysUserAgentTrack();
+        sysUserAgentTrack.setUserId(userId);
+        sysUserAgentTrack.setCreateBy(createBy);
+        sysUserAgentTrack.setCreateTime(LocalDateTime.now());
+        sysUserAgentTrack.setStatus(status);
+        sysUserAgentTrackService.save(sysUserAgentTrack);
+    }
+}

+ 40 - 4
src/main/java/com/ydtech/modules/esm/dao/EsmUserReferrerMapper.java

@@ -3,10 +3,7 @@ package com.ydtech.modules.esm.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.dto.EmployeeIncreaseReportDto;
-import com.ydtech.modules.admin.model.dto.EsmUserReferrerDTO;
-import com.ydtech.modules.admin.model.dto.SysUserDto;
-import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
@@ -261,5 +258,44 @@ public interface EsmUserReferrerMapper extends BaseMapper<EsmUserReferrer> {
      */
     List<SysUserTeamDto>  getByTeamByLevel(@Param("userId") String userId,@Param("level") String level,@Param("status") String status);
 
+    /**
+     * 个代当天认证统计
+     * @param userId
+     * @param level
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<SysUserTeamStaticDto> authNowStatics(@Param("userId")String userId, @Param("level")int level, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    /**
+     * 个代七天认证统计
+     *
+     * @param userId
+     * @param level
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<SysUserTeamStaticDto> authSevenStatics(@Param("userId")String userId, @Param("level")int level, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+
+    /**
+     * 个代三十天认证统计
+     * @param userId
+     * @param level
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<SysUserTeamStaticDto> authThreeStatics(@Param("userId")String userId, @Param("level")int level, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    /**
+     *  个代总数统计
+     * @param userId
+     * @param level
+     * @return
+     */
+    List<SysUserTeamStaticDto> authStatics(@Param("userId")String userId, @Param("level")int level);
 
 }

+ 5 - 5
src/main/java/com/ydtech/modules/esm/model/vo/EsmUserCountVO.java

@@ -51,11 +51,11 @@ public class EsmUserCountVO implements Serializable {
         public AggregateDataList(List<EsmUserPolicyVO> userPolicyList) {
             AggregateData aggregateDataO = new AggregateData();
             userPolicyList.forEach(x->{
-                aggregateDataO.setOrdernum(aggregateDataO.getOrdernum() + aggregateDataO.getOrdernum());
-                aggregateDataO.setPolicynum(aggregateDataO.getPolicynum() + aggregateDataO.getPolicynum());
-                aggregateDataO.setSumpremium(aggregateDataO.getSumpremium() + aggregateDataO.getSumpremium());
-                aggregateDataO.setBjpolicynum(aggregateDataO.getBjpolicynum() + aggregateDataO.getBjpolicynum());
-                aggregateDataO.setBjsumpremium(aggregateDataO.getBjsumpremium() + aggregateDataO.getBjpolicynum());
+                aggregateDataO.setOrdernum(aggregateDataO.getOrdernum() + x.getOrdernum());
+                aggregateDataO.setPolicynum(aggregateDataO.getPolicynum() + x.getPolicynum());
+                aggregateDataO.setSumpremium(aggregateDataO.getSumpremium() + x.getSumpremium());
+                aggregateDataO.setBjpolicynum(aggregateDataO.getBjpolicynum() + x.getBjpolicynum());
+                aggregateDataO.setBjsumpremium(aggregateDataO.getBjsumpremium() + x.getBjpolicynum());
             });
             this.userPolicyList = userPolicyList;
             this.aggregateData = aggregateDataO;

+ 14 - 1
src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java

@@ -4,9 +4,11 @@ package com.ydtech.modules.esm.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
 import com.ydtech.modules.base.model.dto.PageDto;
@@ -72,7 +74,7 @@ public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
      * @param:
      * @return:
      **/
-    BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId);
+    BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId, SysDept dept);
 
     /**
      * 团队业绩统计
@@ -80,6 +82,17 @@ public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
      * @return 团队业绩
      */
     List<EsmUserPolicyForUserVO> queryUserCountForUser(TeamUserQryVO record);
+
+    /**
+     * 个代认证统计
+     *
+     * @param userId
+     * @param start
+     * @param end
+     * @param dateType
+     * @return
+     */
+    List<SysUserTeamStaticDto> authStatics(String userId, String start, String end, Integer dateType);
 }
 
 

+ 53 - 3
src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java

@@ -1,18 +1,25 @@
 package com.ydtech.modules.esm.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
+import com.ydtech.constants.enums.dict.organization.OrganizationSource;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
+import com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto;
 import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
 import com.ydtech.modules.admin.model.vo.SysReferrerVo;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
@@ -45,6 +52,10 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
     @Autowired
     private SysUserService sysUserService;
 
+    @Autowired
+    private SysDeptService sysDeptService;
+
+
     @Autowired
     private EsmUserReferrerService esmUserReferrerService;
 
@@ -393,7 +404,7 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
                         EsmTeamPolicyVO esmTeamPolicyVO3_t = this.baseMapper.queryOrderCountHz(userList3, record.getStartdate(), record.getEnddate());
                         esmTeamPolicyVO3.setTeamlevel("三级会员");
                         esmTeamPolicyVO3.setTeamnum(userList3.size());
-                        if (esmTeamPolicyVO2_t != null) {
+                        if (esmTeamPolicyVO3_t != null) {
                             esmTeamPolicyVO3.setSumpremium(esmTeamPolicyVO3_t.getSumpremium());
                             esmTeamPolicyVO3.setUsernum(userPolicyList3.size());
                         }
@@ -477,17 +488,36 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
 
 
     @Override
-    public BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId) {
-        List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).list();
+    public BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId, SysDept dept) {
+        List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).orderByDesc(EsmUserReferrer::getLevel).list();
         if (esmUserReferrers.isEmpty()) {
             return new BasePageResult<>();
         }
+        int level = esmUserReferrers.get(0).getLevel();
         int i = esmUserReferrers.get(0).getLevel() + 3;
         PageHelper.startPage(managementQueryVo.getPageNum(), managementQueryVo.getPageSize());
         if ("2".equals(managementQueryVo.getAuthenticationStatus())) {
             managementQueryVo.setAuthenticationStatus("-1");
         }
         List<SysUserTeamDto> byTeam = baseMapper.getByTeam(managementQueryVo, userId, i);
+        // 个代特殊处理返回
+        if (OrganizationSource.OS_2.getCode().equals(dept.getManagementSource())) {
+            if(CollUtil.isNotEmpty(byTeam)){
+                for (SysUserTeamDto sysUserTeamDto : byTeam) {
+                    if (UserWorkStatus.UWS_1.getCode().equals(sysUserTeamDto.getStatus())){
+                        if(sysUserTeamDto.getLevel().equals(level)){
+                            sysUserTeamDto.setLevelName("一级代理");
+                        } else if (sysUserTeamDto.getLevel().equals(level + 1)){
+                            sysUserTeamDto.setLevelName("二级代理");
+                        } else if (sysUserTeamDto.getLevel().equals(level + 2)){
+                            sysUserTeamDto.setLevelName("三级代理");
+                        }
+                    }else{
+                        sysUserTeamDto.setLevelName("临时代理");
+                    }
+                }
+            }
+        }
         PageResult<SysUserTeamDto> sysUserPageResult = new PageResult<>(byTeam);
         return new BasePageResult<>(managementQueryVo.getPageNum(), managementQueryVo.getPageSize(), sysUserPageResult.getTotalSize(),
                 sysUserPageResult.getTotalPages(), sysUserPageResult.getContent());
@@ -503,6 +533,26 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
         return this.baseMapper.queryOrderCountForUser(record.getId(), record.getStartdate(), record.getEnddate());
     }
 
+    @Override
+    public List<SysUserTeamStaticDto> authStatics(String userId, String startTime, String endTime, Integer dateType) {
+        List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).orderByDesc(EsmUserReferrer :: getLevel).list();
+        if (esmUserReferrers.isEmpty()) {
+            return new ArrayList<>();
+        }
+        int i = esmUserReferrers.get(0).getLevel() + 3;
+        List<SysUserTeamStaticDto> dtoList;
+        if (dateType.equals(0)) {
+            dtoList = baseMapper.authStatics(userId, i);
+        } else if (dateType.equals(1)){
+            dtoList = baseMapper.authNowStatics(userId, i,startTime,endTime);
+        } else if(dateType.equals(2)){
+            dtoList = baseMapper.authSevenStatics(userId, i,startTime,endTime);
+        } else{
+            dtoList = baseMapper.authThreeStatics(userId, i,startTime,endTime);
+        }
+        return dtoList;
+    }
+
 }
 
 

+ 53 - 2
src/main/java/com/ydtech/modules/fnc/controller/contract/ContractController.java

@@ -20,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
 
 @RestController
 @Api(tags = "公司内部合同")
@@ -77,9 +79,8 @@ public class ContractController extends BaseController {
     }
 
     /**
-     *
      * @param contractDto
-     * @return  合同协议新增
+     * @return 合同协议新增
      */
     @PostMapping("copyContract")
     @ApiOperation("合同协议新增")
@@ -88,4 +89,54 @@ public class ContractController extends BaseController {
         return HttpResult.ok();
     }
 
+
+    /**
+     * @param contractVo
+     * @return 合同协议检查是否失效
+     */
+    @PostMapping("checkCopyContract")
+    @ApiOperation("合同协议检查是否失效")
+    public HttpResult<HashMap<String,Object>> checkCopyContract(@RequestBody ContractVo contractVo) {
+        HashMap<String, Object> code = contractService.checkCopyContract(contractVo);
+        return HttpResult.ok(code);
+    }
+
+  /**
+     * @param contractVo
+     * @return 同以及未失效的关联合同列表
+     */
+    @PostMapping("copyContractList")
+    @ApiOperation("关联合同列表")
+    public HttpResult<List<ContractDto>> copyContractList(@RequestBody ContractVo contractVo) {
+        List<ContractDto> result = contractService.copyContractList(contractVo);
+        return HttpResult.ok(result);
+    }
+
+
+    /**
+     * @param contractVo
+     * @return 补充协议修改状态
+     */
+    @PutMapping("updateFileStatus")
+    @ApiOperation("补充协议修改状态")
+    public HttpResult updateFileStatus(@RequestBody ContractVo contractVo) {
+        contractService.updateFileStatus(contractVo);
+        return HttpResult.ok("补充协议状态修改成功");
+    }
+
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    @PostMapping("supplierContractPage")
+    @ApiOperation(value = "合同报表分页")
+    public HttpResult<IPage<ContractDto>> supplierContractPage(@RequestBody ContractVo contractVO) {
+        try {
+            IPage<ContractDto> result = contractService.supplierContractPage(contractVO);
+            return HttpResult.ok("查询数据成功", result);
+        } catch (Exception e) {
+            return HttpResult.error("查询错误" + e.getMessage());
+        }
+    }
 }

+ 3 - 0
src/main/java/com/ydtech/modules/fnc/dao/contract/ContractMapper.java

@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.HashMap;
+import java.util.List;
 
 @Mapper
 public interface ContractMapper  extends BaseMapper<ContractEntity> {
@@ -32,4 +33,6 @@ public interface ContractMapper  extends BaseMapper<ContractEntity> {
      * @return  获取新增协议最大的合同编码
      */
     HashMap<String, Object> copyContractCode(String id);
+
+
 }

+ 5 - 0
src/main/java/com/ydtech/modules/fnc/dao/contract/ContractSupplierMapper.java

@@ -1,8 +1,12 @@
 package com.ydtech.modules.fnc.dao.contract;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
 import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
 import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.vo.ContractVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -28,4 +32,5 @@ public interface ContractSupplierMapper  extends BaseMapper<ContractSupplierEnti
      */
     List<ContractSupplierEntity> selecSupplierList(ContractSupplierDto contractSupplierDto);
 
+    IPage<ContractDto> queryPage(@Param("page") Page page,@Param("vo") ContractVo contractVO);
 }

+ 7 - 0
src/main/java/com/ydtech/modules/fnc/dto/contract/ContractDto.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.fnc.dto.contract;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.fnc.entity.ContractFileEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -108,4 +109,10 @@ public class ContractDto implements Serializable {
 
     @ApiModelProperty("父级id")
     private String parentId;
+
+    @ApiModelProperty("账户简称")
+    private String namesimple;
+
+    @ApiModelProperty("合同附件集合")
+    private List<ContractFileEntity> contractFileEntityList;
 }

+ 28 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/ContractService.java

@@ -7,6 +7,9 @@ import com.ydtech.modules.fnc.dto.contract.ContractDto;
 import com.ydtech.modules.fnc.entity.ContractEntity;
 import com.ydtech.modules.fnc.vo.ContractVo;
 
+import java.util.HashMap;
+import java.util.List;
+
 
 public interface ContractService extends IService<ContractEntity> {
 
@@ -36,4 +39,29 @@ public interface ContractService extends IService<ContractEntity> {
      * @return  合同协议新增
      */
     void copyContract(ContractDto contractDto);
+
+    /**
+     *     合同协议检查是否失效
+     * @param contractVo
+     */
+    HashMap<String,Object> checkCopyContract(ContractVo contractVo);
+
+
+    /**
+     * 同以及未失效的关联合同列表
+     * @param contractVo
+     */
+    List<ContractDto> copyContractList(ContractVo contractVo);
+    /**
+     * @param contractVo
+     * @return 补充协议修改状态
+     */
+    void updateFileStatus(ContractVo contractVo);
+
+    /**
+     *
+     * @param contractVO
+     * @return  合同供应商分页
+     */
+    IPage<ContractDto> supplierContractPage(ContractVo contractVO);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/ContractSupplierService.java

@@ -1,7 +1,10 @@
 package com.ydtech.modules.fnc.service.contract;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
 import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
 import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
+import com.ydtech.modules.fnc.vo.ContractVo;
 
 import java.util.List;
 
@@ -17,4 +20,11 @@ public interface ContractSupplierService {
 
 
     List<ContractSupplierEntity> selecSupplierList(ContractSupplierDto contractSupplierDto);
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    IPage<ContractDto> supplierContractPage(ContractVo contractVO);
+
 }

+ 35 - 0
src/main/java/com/ydtech/modules/fnc/service/contract/impl/ContractSupplierServiceImpl.java

@@ -1,21 +1,32 @@
 package com.ydtech.modules.fnc.service.contract.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.fnc.dao.contract.ContractSupplierMapper;
+import com.ydtech.modules.fnc.dto.contract.ContractDto;
 import com.ydtech.modules.fnc.dto.contract.ContractSupplierDto;
+import com.ydtech.modules.fnc.entity.ContractEntity;
 import com.ydtech.modules.fnc.entity.ContractSupplierEntity;
 import com.ydtech.modules.fnc.service.contract.ContractSupplierService;
+import com.ydtech.modules.fnc.vo.ContractVo;
 import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ContractSupplierServiceImpl extends ServiceImpl<ContractSupplierMapper, ContractSupplierEntity> implements ContractSupplierService {
+    @Autowired
+    private ContractSupplierService contractSupplierService;
+
     /**
      * 合同供应商关联新增
      *
@@ -50,4 +61,28 @@ public class ContractSupplierServiceImpl extends ServiceImpl<ContractSupplierMap
     public List<ContractSupplierEntity> selecSupplierList(ContractSupplierDto contractSupplierDto) {
         return baseMapper.selecSupplierList(contractSupplierDto);
     }
+
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    @Override
+    public IPage<ContractDto> supplierContractPage(ContractVo contractVO) {
+        PageVo<ContractVo> pageVo = new PageVo<>();
+        Page page = new Page(contractVO.getPageNum(), contractVO.getPageSize());
+        pageVo.setPageNum(contractVO.getPageNum());
+        pageVo.setPageSize(contractVO.getPageSize());
+
+        if (contractVO.getSupplierIdList() != null && !contractVO.getSupplierIdList().isEmpty()) { //查关联表获取合同id
+            ContractSupplierDto contractSupplierDto = new ContractSupplierDto();
+            contractSupplierDto.setSupplierIdList(contractVO.getSupplierIdList());
+            List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierService.selecSupplierList(contractSupplierDto);
+            List<String> contractIdList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getContractId).collect(Collectors.toList());
+            contractVO.setContractIdList(contractIdList);
+
+        }
+        IPage<ContractDto> queriedPage = baseMapper.queryPage(page, contractVO);
+        return queriedPage;
+    }
 }

+ 151 - 5
src/main/java/com/ydtech/modules/fnc/service/contract/impl/contractServiceImpl.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.fnc.service.contract.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.vo.SysDeptTreeVo;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.fnc.dao.contract.ContractMapper;
@@ -32,9 +34,11 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -77,6 +81,14 @@ public class contractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
             contractEntity.setContractCode(contractCode);
 //           添加关联表  供应商与合同
             List<String> supplierIdList = contractDto.getSupplierIdList();
+            //甲方名称
+            String name = this.getNameInv(contractDto.getExternalCompaniesId());
+            contractEntity.setExternalCompaniesName(name);
+
+            //乙方名称
+            String interName = this.getNameInv(contractDto.getInternalCompanyId());
+            contractEntity.setInternalCompanyName(interName);
+
             contractEntity.setContractStatus("0");
             baseMapper.insert(contractEntity);
             if (contractDto.getSupplierIdList() != null) {
@@ -88,10 +100,20 @@ public class contractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
         } else {
             ContractEntity contractEntity = new ContractEntity();
             BeanUtils.copyProperties(contractDto, contractEntity);
-            String contractCode = this.generateCode(contractDto);
-            contractEntity.setContractCode(contractCode);
+            if (StringUtils.isNotEmpty(contractDto.getExternalCompaniesId())) {
+                String contractCode = this.generateCode(contractDto);
+                contractEntity.setContractCode(contractCode);
+                //甲方名称
+                String name = this.getNameInv(contractDto.getExternalCompaniesId());
+                contractEntity.setExternalCompaniesName(name);
+            }
+            if (StringUtils.isNotEmpty(contractDto.getInternalCompanyId())) {
+                //乙方名称
+                String interName = this.getNameInv(contractDto.getInternalCompanyId());
+                contractEntity.setInternalCompanyName(interName);
+            }
             baseMapper.updateById(contractEntity);
-            if (!contractDto.getSupplierIdList().isEmpty()) {
+            if (contractDto.getSupplierIdList() != null && !contractDto.getSupplierIdList().isEmpty()) {
                 contractSupplierService.saveAndUpdate(contractDto.getSupplierIdList(), contractEntity.getId());
             }
 
@@ -101,6 +123,13 @@ public class contractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
         }
     }
 
+    private String getNameInv(String externalCompaniesId) {
+        QueryWrapper<InvAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", externalCompaniesId);
+        InvAccount exinvAccount = invAccountMapper.selectOne(queryWrapper);
+        return exinvAccount.getAccountName();
+    }
+
     /**
      * @param contractDto
      * @return 合同编码规则   甲方简称 首字母 大写 +  当前年份 + 000
@@ -262,6 +291,13 @@ public class contractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
         contractEntity.setId(null);
         contractEntity.setParentId(contractDto.getId());
 
+        //甲方名称
+        String name = this.getNameInv(contractDto.getExternalCompaniesId());
+        contractEntity.setExternalCompaniesName(name);
+
+        //乙方名称
+        String interName = this.getNameInv(contractDto.getInternalCompanyId());
+        contractEntity.setInternalCompanyName(interName);
         baseMapper.insert(contractEntity);
         if (contractDto.getSupplierIdList() != null) {
             contractSupplierService.saveAndUpdate(supplierIdList, contractEntity.getId());
@@ -271,15 +307,125 @@ public class contractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
         }
     }
 
+    /**
+     * 合同协议检查是否失效
+     *
+     * @param contractVo
+     */
+    @Override
+    public HashMap<String, Object> checkCopyContract(ContractVo contractVo) {
+        int i = 0;
+        HashMap<String, Object> resultMap = new HashMap<>();
+        // 检查当前合同状态是否为"0"
+        QueryWrapper<ContractEntity> contractQueryWrapper = new QueryWrapper<>();
+        contractQueryWrapper.eq("id", contractVo.getId());
+        List<ContractEntity> contracts = baseMapper.selectList(contractQueryWrapper);
+        if (!contracts.isEmpty()) {
+            i = 0;
+        }
+        // 检查是否有以当前合同为父合同的合同且状态为"0"
+        QueryWrapper<ContractEntity> parentContractQueryWrapper = new QueryWrapper<>();
+        parentContractQueryWrapper.eq("contract_status", "0").eq("parent_id", contractVo.getId());
+        List<ContractEntity> parentContracts = baseMapper.selectList(parentContractQueryWrapper);
+        if (!parentContracts.isEmpty()) {
+            i = i + parentContracts.size();
+        }
+        // 如果有以当前合同为父合同的合同且状态为"0",则设置failStatus为"1",否则为"0"
+        resultMap.put("failStatus", i);
+
+        return resultMap;
+    }
+
+    @Override
+    public List<ContractDto> copyContractList(ContractVo contractVo) {
+        // 查询当前状态的合同
+        QueryWrapper<ContractEntity> contractQueryWrapper = new QueryWrapper<>();
+        contractQueryWrapper.eq("id", contractVo.getId());
+        if (StringUtils.isNotEmpty(contractVo.getContractStatus())) {
+            contractQueryWrapper.eq("contract_status", "0");
+        }
+        List<ContractEntity> currentContracts = baseMapper.selectList(contractQueryWrapper);
+
+        // 查询以其为父合同的合同
+        QueryWrapper<ContractEntity> parentContractQueryWrapper = new QueryWrapper<>();
+        parentContractQueryWrapper.eq("parent_id", contractVo.getId());
+        if (StringUtils.isNotEmpty(contractVo.getContractStatus())) {
+            parentContractQueryWrapper.eq("contract_status", "0");
+        }
+        List<ContractEntity> parentContracts = baseMapper.selectList(parentContractQueryWrapper);
+
+        // 根据业务逻辑处理查询结果(这里不合并列表)
+        // 假设我们需要检查是否有任何合同(当前或父合同)处于状态"0",并返回所有符合条件的合同的Dto列表
+        List<ContractDto> contractDtoList = new ArrayList<>();
+
+        // 将当前合同转换为Dto并添加到列表中
+        if (!currentContracts.isEmpty()) {
+            contractDtoList.addAll(BeanUtil.copyToList(currentContracts, ContractDto.class));
+
+            // 如果只需要一个“失败”状态来指示存在任何状态为"0"的合同,则可以在这里设置状态并返回
+            // 但由于您要求返回Dto列表,我们将继续处理父合同
+        }
+
+        // 将父合同转换为Dto并添加到列表中(如果需要的话)
+        if (!parentContracts.isEmpty()) {
+            contractDtoList.addAll(BeanUtil.copyToList(parentContracts, ContractDto.class));
+        }
+
+        for (ContractDto contractDto : contractDtoList) {
+            //      供应商
+            List<ContractSupplierEntity> contractSupplierEntityList = contractSupplierService.getByContractById(contractDto.getId());
+            if (contractSupplierEntityList != null && !contractSupplierEntityList.isEmpty()) {
+                List<String> supplierIdList = contractSupplierEntityList.stream().map(ContractSupplierEntity::getSupplierId).collect(Collectors.toList());
+                contractDto.setSupplierIdList(supplierIdList);
+            }
+//    附件
+            List<ContractFileEntity> contractFileEntityList = contractFileService.getByContractById(contractDto.getId());
+            if (!contractFileEntityList.isEmpty()) {
+                contractDto.setContractFileEntityList(contractFileEntityList);
+            }
+        }
+
+        return contractDtoList;
+    }
+
     private String contractCopyCode(String contractCode, String id) {
         HashMap<String, Object> contractCodeCopy = baseMapper.copyContractCode(id);
         if (contractCodeCopy == null) {
             return contractCode + "-1";
         } else {
             int i = Integer.parseInt(contractCodeCopy.get("contractCode").toString());
-            i=i+1;
-            return contractCode+i;
+            i = i + 1;
+            return contractCode + i;
 
         }
     }
+
+    /**
+     * @param contractVo
+     * @return 补充协议修改状态
+     */
+    @Override
+    @Transactional
+    public void updateFileStatus(ContractVo contractVo) {
+        ArrayList<ContractEntity> contractEntities = new ArrayList<>();
+        if (contractVo.getIdList().isEmpty()) {
+            throw new SystemException("请选择有效合同");
+        }
+        for (String s : contractVo.getIdList()) {
+            ContractEntity contractEntity = new ContractEntity();
+            contractEntity.setId(s);
+            contractEntity.setContractStatus("1");
+            contractEntities.add(contractEntity);
+        }
+        this.saveOrUpdateBatch(contractEntities);
+    }
+
+    /**
+     * @description: 合同报表分页
+     * @author: whp
+     **/
+    @Override
+    public IPage<ContractDto> supplierContractPage(ContractVo contractVO) {
+        return contractSupplierService.supplierContractPage(contractVO);
+    }
 }

+ 8 - 0
src/main/java/com/ydtech/modules/fnc/vo/ContractVo.java

@@ -105,4 +105,12 @@ public class ContractVo implements Serializable {
     @ApiModelProperty("合同是否有效 0 有效 1 无效")
     private String contractStatus;
 
+
+    @ApiModelProperty("合同父id")
+    private String parentId;
+
+
+
+    @ApiModelProperty("合同idList")
+    private List<String> idList;
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -558,6 +558,12 @@ public class InsAreaCompany implements Serializable {
     @TableField(value = "leader_name")
     private String leaderName;
 
+    /**
+     * 验车链接
+     */
+    @TableField(value = "vehicle_inspection_url")
+    private String vehicleInspectionUrl;
+
     //入口总金额
     @TableField(exist = false)
     private BigDecimal entranceAllFee;

+ 13 - 0
src/main/java/com/ydtech/modules/order/entity/vo/ExternalOrderFeeVo.java

@@ -49,6 +49,12 @@ public class ExternalOrderFeeVo {
     @ApiModelProperty(value = "商业总比例")
     private BigDecimal syRadio;
 
+    @ApiModelProperty(value = "前端驾意")
+    private BigDecimal jyPremium;
+
+    @ApiModelProperty(value = "前端驾意比例")
+    private BigDecimal jyRadio;
+
     @ApiModelProperty(value = "驾意保费")
     private BigDecimal noPremium;
 
@@ -107,6 +113,13 @@ public class ExternalOrderFeeVo {
             this.noRadio = new BigDecimal(BigInteger.ZERO);
         }
 
+        if(!Objects.isNull(this.jyPremium) && !this.jyPremium.equals("") && !this.jyPremium.equals("0")){
+            this.noPremium = this.jyPremium;
+        }
+        if(!Objects.isNull(this.jyRadio) && !this.jyRadio.equals("") && !this.jyRadio.equals("0")){
+            this.noRadio = this.jyRadio;
+        }
+
     }
 
 }

+ 11 - 7
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -145,15 +145,15 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         LocalDate localDate = LocalDate.now();
         //add by  hxl  2024-10-25   注释掉从 协议调度授权部门的协议逻辑  ==================begin==================
         boolean flag = sysSwitchConfigService.xysqDisplaySwitches();
-        List<PtlAgreementInsCompanyDto> agreementCompany =new ArrayList<>();
-        if(flag){
+        List<PtlAgreementInsCompanyDto> agreementCompany = new ArrayList<>();
+        if (flag) {
             //新逻辑从协议组授权获取
-            if(StringUtils.isNotBlank(deptId)){
+            if (StringUtils.isNotBlank(deptId)) {
                 DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                 String dateNow = localDate.format(df);
-                agreementCompany =ptlAgreementGroupLinkDeptMapper.getAgreementCompany(dateNow, deptId);
+                agreementCompany = ptlAgreementGroupLinkDeptMapper.getAgreementCompany(dateNow, deptId);
             }
-        }else{
+        } else {
             //原先逻辑
             agreementCompany = baseMapper.getAgreementCompany(localDate, deptId);
         }
@@ -561,6 +561,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             }
             wrapper.apply("SUBSTRING(partner_companies_id, 6, " + sign + ") =" + prefix);
         }
+        wrapper.orderByDesc(PtlAgreement::getCreateTime);
         List<PtlAgreementDept> deptList = new ArrayList<>();
         if (StringUtils.isNotBlank(ptlAgreementPageVo.getDeptId())) {
             // 获取所有该部门下勾选的协议
@@ -573,8 +574,11 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             agreeMap = deptList.stream().collect(Collectors.toMap(PtlAgreementDept::getAgreementId, PtlAgreementDept::getDeptId));
         }
         Page<PtlAgreement> agreementPage = page(page, wrapper);
-        List<String> feeFileIds = agreementPage.getRecords().stream().map(m -> m.getFeeFileId()).filter(Objects::nonNull).collect(Collectors.toList());
-        List<InsUploadFiles> insUploadFiles = insUploadFilesService.listByIds(feeFileIds);
+        List<String> feeFileIds = agreementPage.getRecords().stream().map(PtlAgreement::getFeeFileId).filter(Objects::nonNull).collect(Collectors.toList());
+        List<InsUploadFiles> insUploadFiles = new ArrayList<>();
+        if (!feeFileIds.isEmpty()) {
+            insUploadFiles = insUploadFilesService.listByIds(feeFileIds);
+        }
 
         for (PtlAgreement agreement : agreementPage.getRecords()) {
             insUploadFiles.stream()

+ 15 - 2
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
 import com.ydtech.constants.enums.dict.agreement.ProductsType;
+import com.ydtech.constants.enums.dict.insurance.TrafficManagementVehicleType;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.vo.SysChannelGroupPageVo;
@@ -358,10 +359,22 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                     desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
                 }
                 if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                    desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+                    //车辆类型不显示代码k33 显示普通货车
+                    if(ptlAgreementUndwrtRulesAttr.getAttrCode().equals("CarClass"))
+                    {
+                        String[] split = v.get(i).getMin().split(",");
+                        desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含";
+                        for (String s : split) {
+                            desc += TrafficManagementVehicleType.getDesc(s) + ",";
+                        }
+                        desc = desc.substring(0,desc.length()-1);
+                        desc += "\n";
+                    }else{
+                        desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+                    }
                 }
                 if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                    if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("BrandandModel")) {
+                    if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("BrandandModel") || ptlAgreementUndwrtRulesAttr.getAttrCode().equals("CarOwnerName")) {
                         String operatorDesc = !Objects.isNull(v.get(i).getOperator()) && v.get(i).getOperator().equals("1") ? "包含" : "不包含";
                         desc += ptlAgreementUndwrtRulesAttr.getAttrName() + operatorDesc + v.get(i).getMin() + "\n";
                     } else {

+ 7 - 2
src/main/resources/application-pre.yml

@@ -214,8 +214,13 @@ upload:
   username: ''
 wechat:
   open:
-    componentAppId: wx612ca90988c46947
-    componentSecret: 75b7d4cda453b2075dec23f849278bc0
+    properties:
+      jzg:
+        componentAppId: wx612ca90988c46947
+        componentSecret: 75b7d4cda453b2075dec23f849278bc0
+      hhr:
+        componentAppId: wx8e8efe710bd99de2
+        componentSecret: 69d6024eb2f2a96a71f1f859a21cc9bf
   cp:
     corp-id: wwfe67d19509d43ec5
     secret: 5M_5mGONe-t4xCPlwPU-EJt53GiWaUjtbJjY5CR-dgc

+ 7 - 2
src/main/resources/application-prod.yml

@@ -206,8 +206,13 @@ upload:
   username: ''
 wechat:
   open:
-    componentAppId: wx612ca90988c46947
-    componentSecret: 75b7d4cda453b2075dec23f849278bc0
+    properties:
+      jzg:
+        componentAppId: wx612ca90988c46947
+        componentSecret: 75b7d4cda453b2075dec23f849278bc0
+      hhr:
+        componentAppId: wx8e8efe710bd99de2
+        componentSecret: 69d6024eb2f2a96a71f1f859a21cc9bf
   cp:
     corp-id: wwfe67d19509d43ec5
     secret: 5M_5mGONe-t4xCPlwPU-EJt53GiWaUjtbJjY5CR-dgc

+ 7 - 2
src/main/resources/application-test.yml

@@ -225,8 +225,13 @@ upload:
   username: ''
 wechat:
   open:
-    componentAppId: wx612ca90988c46947
-    componentSecret: 75b7d4cda453b2075dec23f849278bc0
+    properties:
+      jzg:
+        componentAppId: wx612ca90988c46947
+        componentSecret: 75b7d4cda453b2075dec23f849278bc0
+      hhr:
+        componentAppId: wx8e8efe710bd99de2
+        componentSecret: 69d6024eb2f2a96a71f1f859a21cc9bf
   cp:
     corp-id: wwfe67d19509d43ec5
     secret: 5M_5mGONe-t4xCPlwPU-EJt53GiWaUjtbJjY5CR-dgc

+ 23 - 0
src/main/resources/mapper/modules/admin/SysUserAgentTrackMapper.xml

@@ -0,0 +1,23 @@
+<?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.ydtech.modules.admin.dao.SysUserAgentTrackMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysUserAgentTrack">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="approveId" column="approve_id" jdbcType="VARCHAR"/>
+            <result property="approveName" column="approve_name" jdbcType="VARCHAR"/>
+            <result property="approveMess" column="approve_mess" jdbcType="VARCHAR"/>
+            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,status,
+        approve_id,approve_name,approve_mess,
+        create_by,create_time
+    </sql>
+</mapper>

Fichier diff supprimé car celui-ci est trop grand
+ 316 - 337
src/main/resources/mapper/modules/admin/SysUserMapper.xml


+ 249 - 2
src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml

@@ -131,7 +131,7 @@
         WHERE
             su.id != 'admin'
           AND su.STATUS = 1
-          AND referrer_id IS NOT NULL
+          AND eur.referrer_id IS NOT NULL
         <if test="dto.userId != null and dto.userId != ''">
             AND su.id = #{dto.userId}
         </if>
@@ -174,7 +174,7 @@
         from esm_user_referrer r1
         INNER JOIN t1 on t1.id = r1.referrer_id
         WHERE r1.level &lt; #{level})
-        select u.id as id , u.name as name , u.mobile as mobile, u.status as status
+        select u.id as id , u.name as name , u.mobile as mobile, u.status as status, t1.level as level, u.update_time as updateTime
         from t1
         LEFT JOIN sys_user u on t1.id = u.id
         where 1=1
@@ -191,6 +191,7 @@
                 AND u.status = #{managementQueryVo.authenticationStatus}
             </when>
         </choose>
+            order by u.update_time desc
     </select>
 
     <select id="employeeIncreaseReportYear" resultType="com.ydtech.modules.admin.model.dto.EmployeeIncreaseReportDto">
@@ -424,4 +425,250 @@
             </if>
         </where>
     </select>
+    <select id="authSevenStatics" resultType="com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto">
+        SELECT
+        a.timeDay,
+        IFNULL(b.allCount,0) AS allCount,
+        IFNULL(b.noCount,0) AS noCount,
+        IFNULL(b.yesCount,0) AS yesCount,
+        IFNULL(b.oneCount,0) AS oneCount,
+        IFNULL(b.twoCount,0) AS twoCount,
+        IFNULL(b.threeCount,0) AS threeCount,
+        IFNULL(b.tempCount,0) AS tempCount
+        FROM
+        (
+        SELECT
+        curdate() AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 1 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 2 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 3 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 4 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 5 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 6 DAY ) AS timeDay
+        ) a
+        LEFT JOIN (
+        select
+        DATE_FORMAT( t2.updateTime, '%Y-%m-%d' ) AS time,
+        count(*) as allCount,
+        SUM(CASE WHEN t2.status <![CDATA[ <> ]]> 1 THEN 1 ELSE 0 END) AS noCount,
+        SUM(CASE WHEN t2.status = 1 THEN 1 ELSE 0 END) AS yesCount,
+        SUM(CASE WHEN t2.level = #{level} - 3 and t2.STATUS = 1 THEN 1 ELSE 0 END) AS oneCount,
+        SUM(CASE WHEN t2.level = #{level} - 2  and t2.STATUS = 1 THEN 1 ELSE 0 END) AS twoCount,
+        SUM(CASE WHEN t2.level = #{level} - 1 and t2.STATUS = 1 THEN 1 ELSE 0 END) AS threeCount,
+        SUM(CASE WHEN t2.status &lt;&gt; 1 THEN 1 ELSE 0 END) AS tempCount
+        FROM (
+        with recursive t1 as (select *
+        from esm_user_referrer
+        WHERE referrer_id = #{userId}
+        and id !=#{userId}
+        union all
+        select r1.*
+        from esm_user_referrer r1
+        INNER JOIN t1 on t1.id = r1.referrer_id
+        WHERE r1.level &lt; #{level})
+        select u.id as id , u.name as name , u.mobile as mobile, u.status as status, t1.level as level,u.update_time as
+        updateTime
+        from t1
+        LEFT JOIN sys_user u on t1.id = u.id
+        where 1=1
+        ) AS t2
+        WHERE 1=1
+        <if test="startDate !=null  and  startDate!='' and  endDate !=null and endDate !=''">
+            and DATE_FORMAT( t2.updateTime, '%Y-%m-%d') between DATE_FORMAT(#{startDate}, '%Y-%m-%d') and
+            DATE_FORMAT(#{endDate}, '%Y-%m-%d')
+        </if>
+        GROUP BY
+        DATE_FORMAT( t2.updateTime, '%Y-%m-%d' )
+        ORDER BY DATE_FORMAT( t2.updateTime, '%Y-%m-%d' ) desc
+        ) b ON a.timeDay = b.time
+    </select>
+    <select id="authNowStatics" resultType="com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto">
+        SELECT
+        a.timeDay,
+        IFNULL(b.allCount,0) AS allCount,
+        IFNULL(b.noCount,0) AS noCount,
+        IFNULL(b.yesCount,0) AS yesCount,
+        IFNULL(b.oneCount,0) AS oneCount,
+        IFNULL(b.twoCount,0) AS twoCount,
+        IFNULL(b.threeCount,0) AS threeCount,
+        IFNULL(b.tempCount,0) AS tempCount
+        FROM
+        (
+        SELECT
+        curdate() AS timeDay
+        ) a
+        LEFT JOIN (
+        select
+        DATE_FORMAT( t2.updateTime, '%Y-%m-%d' ) AS time,
+        count(*) as allCount,
+        SUM(CASE WHEN t2.status <![CDATA[ <> ]]> 1 THEN 1 ELSE 0 END) AS noCount,
+        SUM(CASE WHEN t2.status = 1 THEN 1 ELSE 0 END) AS yesCount,
+        SUM(CASE WHEN t2.level = #{level} - 3 and t2.STATUS = 1 THEN 1 ELSE 0 END) AS oneCount,
+        SUM(CASE WHEN t2.level = #{level} - 2  and t2.STATUS = 1 THEN 1 ELSE 0 END) AS twoCount,
+        SUM(CASE WHEN t2.level = #{level} - 1 and t2.STATUS = 1 THEN 1 ELSE 0 END) AS threeCount,
+        SUM(CASE WHEN t2.status &lt;&gt; 1 THEN 1 ELSE 0 END) AS tempCount
+        FROM (
+        with recursive t1 as (select *
+        from esm_user_referrer
+        WHERE referrer_id = #{userId}
+        and id !=#{userId}
+        union all
+        select r1.*
+        from esm_user_referrer r1
+        INNER JOIN t1 on t1.id = r1.referrer_id
+        WHERE r1.level &lt; #{level})
+        select u.id as id , u.name as name , u.mobile as mobile, u.status as status, t1.level as level,u.update_time as
+        updateTime
+        from t1
+        LEFT JOIN sys_user u on t1.id = u.id
+        where 1=1
+        ) AS t2
+        WHERE 1=1
+        <if test="startDate !=null  and  startDate!='' and  endDate !=null and endDate !=''">
+            and DATE_FORMAT( t2.updateTime, '%Y-%m-%d') between DATE_FORMAT(#{startDate}, '%Y-%m-%d') and
+            DATE_FORMAT(#{endDate}, '%Y-%m-%d')
+        </if>
+        GROUP BY
+        DATE_FORMAT( t2.updateTime, '%Y-%m-%d' )
+        ORDER BY DATE_FORMAT( t2.updateTime, '%Y-%m-%d' ) desc
+        ) b ON a.timeDay = b.time
+    </select>
+    <select id="authThreeStatics" resultType="com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto">
+        SELECT
+        a.timeDay,
+        IFNULL(b.allCount,0) AS allCount,
+        IFNULL(b.noCount,0) AS noCount,
+        IFNULL(b.yesCount,0) AS yesCount,
+        IFNULL(b.oneCount,0) AS oneCount,
+        IFNULL(b.twoCount,0) AS twoCount,
+        IFNULL(b.threeCount,0) AS threeCount,
+        IFNULL(b.tempCount,0) AS tempCount
+        FROM
+        (
+        SELECT
+        curdate() AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 1 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 2 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 3 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 4 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 5 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 6 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 7 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 8 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 9 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 10 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 11 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 12 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 13 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 14 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 15 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 16 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 17 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 18 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 19 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 20 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 21 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 22 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 23 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 24 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 25 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 26 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 27 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 28 DAY ) AS timeDay UNION ALL
+        SELECT
+        date_sub( curdate(), INTERVAL 29 DAY ) AS timeDay
+        ) a
+        LEFT JOIN (
+        select
+        DATE_FORMAT( t2.updateTime, '%Y-%m-%d' ) AS time,
+        count(*) as allCount,
+        SUM(CASE WHEN t2.status <![CDATA[ <> ]]> 1 THEN 1 ELSE 0 END) AS noCount,
+        SUM(CASE WHEN t2.status = 1 THEN 1 ELSE 0 END) AS yesCount,
+        SUM(CASE WHEN t2.level = #{level} - 3 and t2.STATUS = 1 THEN 1 ELSE 0 END) AS oneCount,
+        SUM(CASE WHEN t2.level = #{level} - 2  and t2.STATUS = 1 THEN 1 ELSE 0 END) AS twoCount,
+        SUM(CASE WHEN t2.level = #{level} - 1  and t2.STATUS = 1 THEN 1 ELSE 0 END) AS threeCount,
+        SUM(CASE WHEN t2.status &lt;&gt; 1 THEN 1 ELSE 0 END) AS tempCount
+        FROM (
+        with recursive t1 as (select *
+        from esm_user_referrer
+        WHERE referrer_id = #{userId}
+        and id !=#{userId}
+        union all
+        select r1.*
+        from esm_user_referrer r1
+        INNER JOIN t1 on t1.id = r1.referrer_id
+        WHERE r1.level &lt; #{level})
+        select u.id as id , u.name as name , u.mobile as mobile, u.status as status, t1.level as level,u.update_time as
+        updateTime
+        from t1
+        LEFT JOIN sys_user u on t1.id = u.id
+        where 1=1
+        ) AS t2
+        WHERE 1=1
+        <if test="startDate !=null  and  startDate!='' and  endDate !=null and endDate !=''">
+            and DATE_FORMAT( t2.updateTime, '%Y-%m-%d') between DATE_FORMAT(#{startDate}, '%Y-%m-%d') and
+            DATE_FORMAT(#{endDate}, '%Y-%m-%d')
+        </if>
+        GROUP BY
+        DATE_FORMAT( t2.updateTime, '%Y-%m-%d' )
+        ORDER BY DATE_FORMAT( t2.updateTime, '%Y-%m-%d' ) desc
+        ) b ON a.timeDay = b.time
+    </select>
+    <select id="authStatics" resultType="com.ydtech.modules.admin.model.dto.SysUserTeamStaticDto">
+        select
+        IFNULL(count(*),0) as allCount,
+        IFNULL(SUM(CASE WHEN t2.status <![CDATA[ <> ]]> 1 THEN 1 ELSE 0 END),0) AS noCount,
+        IFNULL(SUM(CASE WHEN t2.status = 1 THEN 1 ELSE 0 END),0) AS yesCount
+        FROM (
+        with recursive t1 as (select *
+        from esm_user_referrer
+        WHERE referrer_id = #{userId}
+        and id !=#{userId}
+        union all
+        select r1.*
+        from esm_user_referrer r1
+        INNER JOIN t1 on t1.id = r1.referrer_id
+        WHERE r1.level &lt; #{level})
+        select u.id as id , u.name as name , u.mobile as mobile, u.status as status, t1.level as level,u.update_time as
+        updateTime
+        from t1
+        LEFT JOIN sys_user u on t1.id = u.id
+        where 1=1
+        ) AS t2
+        WHERE 1=1
+    </select>
 </mapper>

+ 0 - 1
src/main/resources/mapper/modules/fnc/contract/ContractMapper.xml

@@ -63,7 +63,6 @@
               and  parent_id =#{id}
             </if>
         </where>
-
     </select>
 
 </mapper>

+ 60 - 0
src/main/resources/mapper/modules/fnc/contract/ContractSupplierMapper.xml

@@ -60,7 +60,67 @@
                 </foreach>
             </if>
         </where>
+    </select>
+
+    <select id="queryPage" resultType="com.ydtech.modules.fnc.dto.contract.ContractDto">
+        select
+        ics.supplier_id as "supplierId",
+        eic.namesimple as "namesimple",
+        ic.contract_code as "contractCode",
+        ic.contract_name as "contractName",
+        ic.contract_type as "contractType",
+        ic.internal_company_id as "internalCompanyId",
+        ic.internal_company_name as "internalCompanyName",
+        ic.external_companies_name as "externalCompaniesName",
+        ic.external_companies_id as "externalCompaniesId",
+        ic.extern_type as "externType",
+        ic.internal_type as "internalType",
+        ic.is_open_contract as "isOpenContract",
+        ic.effective_date as "effectiveDate",
+        ic.expiring_date as "expiringDate",
+        ic.should_postponed_effective_date as "shouldPostponedEffectiveDate",
+        ic.id as "id"
+        from ins_contract_supplier ics
+        left join esm_ins_company eic on eic.id =ics.supplier_id
+        left join  ins_contract  ic on ic.id =ics.contract_id
+        <where>
+            <if test="vo.contractCode !=null  and  vo.contractCode !=''">
+                and ic.contract_code like concat('%',#{vo.contractCode},'%')
+            </if>
+
+            <if test="vo.contractIdList != null  and vo.contractIdList !='' and  vo.contractIdList.size()>0 ">
+                and ic.id IN
+                <foreach collection="vo.contractIdList" item="id" index="index" open="(" close=")" separator=",">
+                    #{id}
+                </foreach>
+            </if>
+
+            <if test="vo.contractName !=null  and  vo.contractName !=''">
+                and ic.contract_name =#{vo.contractName}
+            </if>
+
+            <if test="vo.internalCompanyId !=null  and  vo.internalCompanyId !=''">
+                and ic.internal_company_id =#{vo.internalCompanyId}
+
+            </if>
+
+
+            <if test="vo.externalCompaniesId !=null  and  vo.externalCompaniesId !=''">
+                and ic.external_companies_id =#{vo.externalCompaniesId}
+            </if>
 
+            <if test="vo.supplierId !=null  and  vo.supplierId !=''">
+                and ic.supplier_id =#{vo.supplierId}
+            </if>
+
+            <if test="vo.contractType !=null  and  vo.contractType !=''">
+                and ic.contract_type =#{vo.contractType}
+            </if>
+
+            <if test="vo.contractStatus !=null  and  vo.contractStatus !=''  and vo.contractStatus !='all'">
+                and ic.contract_status =#{vo.contractStatus}
+            </if>
+        </where>
     </select>
 
 </mapper>

+ 1 - 1
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -1682,7 +1682,7 @@
               AND iac.jqpolicyno = #{param.jqpolicyno}
           </if>
         <if test="param.sypolicyno != null and param.sypolicyno != ''">
-            AND iac.sypolicyno = #{sypolicyno}
+            AND iac.sypolicyno = #{param.sypolicyno}
         </if>
     </select>
 

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff