|  | @@ -1,17 +1,39 @@
 | 
	
		
			
				|  |  |  package cn.newfeifan.mall.module.sale.service.merchantapply;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import cn.hutool.core.lang.Assert;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.framework.common.exception.ErrorCode;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.framework.ip.core.Area;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.framework.ip.core.utils.AreaUtils;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.member.api.user.MemberUserApi;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.member.api.user.dto.MemberUserRespDTO;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.member.enums.DictTypeConstants;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.sale.controller.app.merchantapply.vo.MerchantApplyPageReqVO;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.sale.controller.app.merchantapply.vo.MerchantApplySaveReqVO;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.sale.enums.MerchantApplyCheckPersonStatusEnum;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.sale.enums.MerchantApplyCheckStatusEnum;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.system.controller.admin.ip.vo.AreaNodeRespVO;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.system.service.user.AdminUserService;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.trade.api.wechat.WcChatMessageUtilsApi;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.trade.enums.wxmessage.WcChatMessageTemplateIdEnum;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import javax.annotation.Resource;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import org.springframework.validation.annotation.Validated;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import cn.newfeifan.mall.module.sale.controller.admin.merchantapply.vo.*;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.sale.dal.dataobject.merchantapply.MerchantApplyDO;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.framework.common.pojo.PageResult;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.sale.dal.mysql.merchantapply.MerchantApplyMapper;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.stream.Collectors;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
	
		
			
				|  |  | +import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 | 
	
		
			
				|  |  |  import static cn.newfeifan.mall.module.sale.enums.ErrorCodeConstants.*;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
	
		
			
				|  | @@ -26,22 +48,133 @@ public class MerchantApplyServiceImpl implements MerchantApplyService {
 | 
	
		
			
				|  |  |      @Resource
 | 
	
		
			
				|  |  |      private MerchantApplyMapper merchantApplyMapper;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private AdminUserService usersService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private MemberUserApi memberUserApi;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private WcChatMessageUtilsApi wcChatMessageUtilsApi;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public Long createMerchantApply(MerchantApplySaveReqVO createReqVO) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 校验商户账号是否已经存在
 | 
	
		
			
				|  |  | +        MemberUserRespDTO user = memberUserApi.getUser(getLoginUserId());
 | 
	
		
			
				|  |  | +        List<MemberUserRespDTO> users = memberUserApi.getUsersByMobile(user.getMobile());
 | 
	
		
			
				|  |  | +        List<MerchantApplyDO> merchantApplyDOS = merchantApplyMapper.selectList(MerchantApplyDO::getApplyMemberUserId, users.stream().map(MemberUserRespDTO::getId).collect(Collectors.toList()));
 | 
	
		
			
				|  |  | +        if(merchantApplyDOS != null && merchantApplyDOS.size() >= 1){
 | 
	
		
			
				|  |  | +            ErrorCode ERROR = new ErrorCode(1_002_029_003, "当前手机号已存在商户账号");
 | 
	
		
			
				|  |  | +            throw exception(ERROR);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 校验存在
 | 
	
		
			
				|  |  | +        if (usersService.getUserByMobile(createReqVO.getContactNumber()) != null) {
 | 
	
		
			
				|  |  | +            ErrorCode ERROR = new ErrorCode(1_002_029_003, "联络人账户已存在");
 | 
	
		
			
				|  |  | +            throw exception(ERROR);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          // 插入
 | 
	
		
			
				|  |  |          MerchantApplyDO merchantApply = BeanUtils.toBean(createReqVO, MerchantApplyDO.class);
 | 
	
		
			
				|  |  | +        merchantApply.setApplyMemberUserId(getLoginUserId());
 | 
	
		
			
				|  |  | +        merchantApply.setCheckPersonStatus(MerchantApplyCheckPersonStatusEnum.ONE.getStatus());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 默认log
 | 
	
		
			
				|  |  | +        if (createReqVO.getLogoUrl() == null || createReqVO.getLogoUrl().isEmpty()) {
 | 
	
		
			
				|  |  | +            merchantApply.setLogoUrl(DictTypeConstants.DEFAULT_AVATAR);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          merchantApplyMapper.insert(merchantApply);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 发送微信信息到系统用户
 | 
	
		
			
				|  |  | +        sentWxChantMessageToThSystemUser(merchantApply,MerchantApplyCheckPersonStatusEnum.ONE.getUserid());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          // 返回
 | 
	
		
			
				|  |  |          return merchantApply.getId();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 发送微信信息到系统用户
 | 
	
		
			
				|  |  | +     * @param merchantApply 入驻申请
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void sentWxChantMessageToThSystemUser(MerchantApplyDO merchantApply, Long sentSystemUserId){
 | 
	
		
			
				|  |  | +        List<String> params = new ArrayList<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        params.add(merchantApply.getName());
 | 
	
		
			
				|  |  | +        params.add(merchantApply.getContact());
 | 
	
		
			
				|  |  | +        params.add(merchantApply.getContactNumber());
 | 
	
		
			
				|  |  | +        params.add(merchantApply.getAddress() == null || merchantApply.getAddress().isEmpty() ? "-" : merchantApply.getAddress());
 | 
	
		
			
				|  |  | +        params.add(getAreaById(merchantApply.getAreaId().intValue()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        wcChatMessageUtilsApi.sendWcChatMessage(WcChatMessageTemplateIdEnum.MERCHANT_APPLY_CHECK.getTemplateId(),
 | 
	
		
			
				|  |  | +                params, sentSystemUserId, merchantApply.getId());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private String getAreaById(Integer id){
 | 
	
		
			
				|  |  | +        Area area = AreaUtils.getArea(Area.ID_CHINA);
 | 
	
		
			
				|  |  | +        Assert.notNull(area, "获取不到中国");
 | 
	
		
			
				|  |  | +        List<AreaNodeRespVO> bean = BeanUtils.toBean(area.getChildren(), AreaNodeRespVO.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (AreaNodeRespVO areaNode : bean) {
 | 
	
		
			
				|  |  | +            if (areaNode.getChildren() != null) {
 | 
	
		
			
				|  |  | +                String result = findInSubList(areaNode.getChildren(), id);
 | 
	
		
			
				|  |  | +                if (result != null) {
 | 
	
		
			
				|  |  | +                    return result;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return "未找到对应的省市区";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private String findInSubList(List<AreaNodeRespVO> subList, long childId) {
 | 
	
		
			
				|  |  | +        for (AreaNodeRespVO areaNode : subList) {
 | 
	
		
			
				|  |  | +            if (areaNode.getId() == childId) {
 | 
	
		
			
				|  |  | +                return areaNode.getName();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (areaNode.getChildren() != null) {
 | 
	
		
			
				|  |  | +                String result = findInSubList(areaNode.getChildren(), childId);
 | 
	
		
			
				|  |  | +                if (result != null) {
 | 
	
		
			
				|  |  | +                    // 假设我们想要返回整个路径,例如 "北京市东城区"
 | 
	
		
			
				|  |  | +                    return areaNode.getName() + result;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public void updateMerchantApply(MerchantApplySaveReqVO updateReqVO) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        MerchantApplyDO merchantApplyDO = merchantApplyMapper.selectById(updateReqVO.getId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 联系人手机号校验
 | 
	
		
			
				|  |  | +        if (!merchantApplyDO.getContactNumber().equals(updateReqVO.getContactNumber()) && usersService.getUserByMobile(updateReqVO.getContactNumber()) != null) {
 | 
	
		
			
				|  |  | +            ErrorCode ERROR = new ErrorCode(1_002_029_003, "联络人账户已存在");
 | 
	
		
			
				|  |  | +            throw exception(ERROR);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        updateReqVO.setApplyMemberUserId(getLoginUserId());
 | 
	
		
			
				|  |  |          // 校验存在
 | 
	
		
			
				|  |  |          validateMerchantApplyExists(updateReqVO.getId());
 | 
	
		
			
				|  |  |          // 更新
 | 
	
		
			
				|  |  |          MerchantApplyDO updateObj = BeanUtils.toBean(updateReqVO, MerchantApplyDO.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 默认log
 | 
	
		
			
				|  |  | +        if (updateObj.getLogoUrl() == null || updateObj.getLogoUrl().isEmpty()) {
 | 
	
		
			
				|  |  | +            updateObj.setLogoUrl(DictTypeConstants.DEFAULT_AVATAR);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 所有变动都需要重新审核
 | 
	
		
			
				|  |  | +        updateObj.setCheckStatus(MerchantApplyCheckStatusEnum.WAIT_AUDIT.getType());
 | 
	
		
			
				|  |  | +        updateObj.setCheckPersonStatus(MerchantApplyCheckPersonStatusEnum.ONE.getStatus());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          merchantApplyMapper.updateById(updateObj);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 发送微信信息到系统用户
 | 
	
		
			
				|  |  | +        sentWxChantMessageToThSystemUser(updateObj,MerchantApplyCheckPersonStatusEnum.ONE.getUserid());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -68,4 +201,20 @@ public class MerchantApplyServiceImpl implements MerchantApplyService {
 | 
	
		
			
				|  |  |          return merchantApplyMapper.selectPage(pageReqVO);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public MerchantApplyDO getMerchantApplyBYUserId(Long loginUserId) {
 | 
	
		
			
				|  |  | +        return merchantApplyMapper.selectOne(MerchantApplyDO::getApplyMemberUserId, loginUserId);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public Boolean isSystemUserByMobile() {
 | 
	
		
			
				|  |  | +        // 获取消费者手机号
 | 
	
		
			
				|  |  | +        MemberUserRespDTO user = memberUserApi.getUser(getLoginUserId());
 | 
	
		
			
				|  |  | +        // 获取申请入驻信息
 | 
	
		
			
				|  |  | +        MerchantApplyDO merchantApplyDO = merchantApplyMapper.selectOne(MerchantApplyDO::getApplyMemberUserId, getLoginUserId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 判断是否有系统用户
 | 
	
		
			
				|  |  | +        return usersService.getUserByMobile(user.getMobile()) != null && merchantApplyDO == null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }
 |