package com.mzl.flower.service.partner; import cn.binarywang.wx.miniapp.api.WxMaService; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.request.partner.*; import com.mzl.flower.dto.response.partner.PartnerDTO; import com.mzl.flower.entity.partner.Partner; import com.mzl.flower.entity.supplier.Supplier; import com.mzl.flower.mapper.partner.PartnerMapper; import com.mzl.flower.service.BaseService; import com.mzl.flower.service.UploadService; import com.mzl.flower.utils.DateUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.time.LocalDateTime; import java.util.List; @Service @Transactional @Slf4j public class PartnerService { private final static String PARTNER_STATUS_AUDIT = "U"; // 待审核 private final static String PARTNER_STATUS_PASS = "P"; // 审核通过 private final static String PARTNER_STATUS_REJECT = "R"; // 审核拒绝 private final PartnerMapper partnerMapper; private final WxMaService maService; private final UploadService uploadService; @Resource private BaseService baseService; public PartnerService(PartnerMapper partnerMapper, WxMaService maService, UploadService uploadService) { this.partnerMapper = partnerMapper; this.maService = maService; this.uploadService = uploadService; } public void addOrUpdatePartner(UpdatePartnerDTO dto) { Partner partner; if(dto.getId()==null){ //注册 if(checkExist(dto.getUserId())){ throw new ValidationException("合伙人信息已登记"); } partner = new Partner(); BeanUtils.copyProperties(dto, partner,"id"); partner.setIdCards(JSON.toJSONString(dto.getIdCards())); partner.create(SecurityUtils.getUserId()); partner.setStatus(PARTNER_STATUS_AUDIT); partner.setIsEnabled(true); partnerMapper.insert(partner); }else{//重新修改 partner = partnerMapper.selectById(dto.getId()); if(partner==null){ throw new ValidationException("合伙人信息未登记"); } BeanUtils.copyProperties(dto, partner,"id"); partner.setIdCards(JSON.toJSONString(dto.getIdCards())); partner.setStatus(PARTNER_STATUS_AUDIT); partner.update(SecurityUtils.getUserId()); partnerMapper.updateById(partner); } } private boolean checkExist(String userId) { return partnerMapper.selectCount(new LambdaQueryWrapper().eq(Partner::getUserId,userId))>0; } public Page queryPartner(QueryPartnerDTO dto, Page page) { if(StringUtils.isNotBlank(dto.getCreateDateBeginStr())){ dto.setCreateDateBegin(DateUtils.dateToLocalDateTime(dto.getCreateDateBeginStr(),true)); } if(StringUtils.isNotBlank(dto.getCreateDateEndStr())){ dto.setCreateDateEnd(DateUtils.dateToLocalDateTime(dto.getCreateDateEndStr(),false)); } List list = partnerMapper.queryPartner(dto,page); page.setRecords(list); return page; } public PartnerDTO findPartnerDetail(Long id) { Partner partner = partnerMapper.selectById(id); PartnerDTO dto = new PartnerDTO(); if(dto!=null){ BeanUtils.copyProperties(partner,dto); } return dto; } public void auditPartner(AuditPartnerDTO dto) { Partner partner = partnerMapper.selectById(dto.getId()); if(partner==null){ throw new ValidationException("合伙人信息不存在"); } if(Constants.AUDIT_STATUS.Y.name().equals(dto.getResult())){ partner.setStatus(PARTNER_STATUS_PASS); partner.setPassTime(LocalDateTime.now()); }else if(Constants.AUDIT_STATUS.N.name().equals(dto.getResult())){ partner.setStatus(PARTNER_STATUS_REJECT); partner.setRejectReason(dto.getRejectReason()); }else{ throw new ValidationException("审核结果不正确"); } partner.update(SecurityUtils.getUserId()); partnerMapper.updateById(partner); } public PartnerDTO getCurrentPartner() { return partnerMapper.getCurrentPartner(SecurityUtils.getUserId()); } public void changePartnerArea(ChangePartnerAreaDTO dto) { Partner partner = partnerMapper.selectById(dto.getId()); if(partner==null){ throw new ValidationException("合伙人信息不存在"); } partner.setProvince(dto.getProvince()); partner.setCity(dto.getCity()); partner.setRegion(dto.getRegion()); if(StringUtils.isNotBlank(dto.getName())){ partner.setName(dto.getName()); } if(StringUtils.isNotBlank(dto.getContactTel())){ partner.setContactTel(dto.getContactTel()); } partner.update(SecurityUtils.getUserId()); partnerMapper.updateById(partner); } public String generateCodeDTO(GenerateCodeDTO dto) { try { Partner partner = partnerMapper.selectById(dto.getId()); if(partner==null){ throw new ValidationException("合伙人信息不存在"); } File file = maService.getQrcodeService() .createWxaCodeUnlimit("partnerUserId="+partner.getId(),"pages/login/supplier-login","/opt/wx-code"); InputStream in = new FileInputStream(file); String url = uploadService.upload(in, file.getName()); partner.setWechatUrl("https://" + url); partner.update(SecurityUtils.getUserId()); partnerMapper.updateById(partner); return partner.getWechatUrl(); } catch (Exception e) { log.error("生成二维码失败",e.getMessage()); throw new RuntimeException("生成二维码失败"); } } public void uploadCodeDTO(UploadCodeDTO dto) { Partner partner = partnerMapper.selectById(dto.getId()); if(partner==null){ throw new ValidationException("合伙人信息不存在"); } partner.setCodeUrl(dto.getCodeUrl()); partner.update(SecurityUtils.getUserId()); partnerMapper.updateById(partner); } public void isEnable(Long id) { Partner partner = partnerMapper.selectById(id); if (partner == null) { throw new ValidationException("合伙人信息不存在"); } if (partner.getIsEnabled()) { partner.setIsEnabled(false); //强制下线 baseService.removeToken(partner.getUserId()); } else { partner.setIsEnabled(true); } partner.update(SecurityUtils.getUserId()); partnerMapper.updateById(partner); } }