package com.ruoyi.user.service.impl;
|
|
import java.util.List;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.user.domain.AccountCertification;
|
import com.ruoyi.user.domain.AccountCertificationApply;
|
import com.ruoyi.user.domain.AccountUser;
|
import com.ruoyi.user.domain.vo.AccountCertificationApplyDetailVo;
|
import com.ruoyi.user.domain.vo.AccountCertificationApplyVo;
|
import com.ruoyi.user.mapper.AccountCertificationApplyMapper;
|
import com.ruoyi.user.mapper.AccountCertificationMapper;
|
import com.ruoyi.user.mapper.AccountUserMapper;
|
import com.ruoyi.user.service.IAccountCertificationApplyService;
|
|
/**
|
* 会员主体认证申请 业务层实现
|
*
|
* @author ruoyi
|
*/
|
@Service
|
public class AccountCertificationApplyServiceImpl implements IAccountCertificationApplyService
|
{
|
/** 审核结果:通过 */
|
private static final String AUDIT_PASS = "1";
|
|
/** 审核结果:驳回 */
|
private static final String AUDIT_REJECT = "2";
|
|
/** account_user.auth_status:已认证 */
|
private static final String AUTH_VERIFIED = "2";
|
|
/** account_user.auth_status:认证失败 */
|
private static final String AUTH_FAILED = "3";
|
|
@Autowired
|
private AccountCertificationApplyMapper certificationApplyMapper;
|
|
@Autowired
|
private AccountCertificationMapper certificationMapper;
|
|
@Autowired
|
private AccountUserMapper accountUserMapper;
|
|
@Override
|
public List<AccountCertificationApplyVo> selectCertificationApplyList(AccountCertificationApplyVo apply)
|
{
|
return certificationApplyMapper.selectCertificationApplyList(apply);
|
}
|
|
@Override
|
public AccountCertificationApplyDetailVo selectCertificationApplyDetail(Long id)
|
{
|
AccountCertificationApply apply = certificationApplyMapper.selectCertificationApplyById(id);
|
if (StringUtils.isNull(apply))
|
{
|
return null;
|
}
|
AccountCertificationApplyDetailVo detail = new AccountCertificationApplyDetailVo();
|
detail.setApply(apply);
|
// 用户信息/关系取 account_user 的实时值而非申请快照:审核要看会员当下的系统等级与
|
// 推荐/供货关系,这两项申请快照里根本没有。
|
detail.setUser(accountUserMapper.selectAccountUserVoById(apply.getUserId()));
|
return detail;
|
}
|
|
@Override
|
@Transactional
|
public int auditCertificationApply(Long id, String auditStatus, String auditRemark)
|
{
|
boolean pass = AUDIT_PASS.equals(auditStatus);
|
if (!pass && !AUDIT_REJECT.equals(auditStatus))
|
{
|
throw new ServiceException("审核结果只能是「通过」或「驳回」");
|
}
|
// 驳回不写原因,会员端只看到「认证失败」无从修改,等于把人卡死
|
if (!pass && StringUtils.isEmpty(auditRemark))
|
{
|
throw new ServiceException("驳回时必须填写审核意见");
|
}
|
AccountCertificationApply apply = certificationApplyMapper.selectCertificationApplyById(id);
|
if (StringUtils.isNull(apply))
|
{
|
throw new ServiceException("认证申请不存在");
|
}
|
|
String operator = SecurityUtils.getUsername();
|
AccountCertificationApply update = new AccountCertificationApply();
|
update.setId(id);
|
update.setAuditStatus(auditStatus);
|
update.setAuditBy(operator);
|
update.setAuditRemark(auditRemark);
|
update.setUpdateBy(operator);
|
// 更新条件带 audit_status='0',重复审核(或两人同时点)会更新 0 行,据此抛异常回滚,
|
// 避免下面几步用陈旧状态把 auth_status 改错。
|
if (certificationApplyMapper.auditCertificationApply(update) == 0)
|
{
|
throw new ServiceException("该申请已审核,不能重复处理");
|
}
|
|
// 同步到 account_user.auth_status:会员列表的「认证状态」列取的就是它
|
AccountUser user = new AccountUser();
|
user.setUserId(apply.getUserId());
|
user.setAuthStatus(pass ? AUTH_VERIFIED : AUTH_FAILED);
|
user.setUpdateBy(operator);
|
accountUserMapper.updateUserAuthStatus(user);
|
|
if (pass)
|
{
|
saveCertificationSnapshot(apply, operator);
|
}
|
return 1;
|
}
|
|
/**
|
* 审核通过后,把申请快照落成 account_certification 的当前有效资料
|
*
|
* 详情页「主体资料」读的是 account_certification,不落这一步会出现
|
* "审核已通过但详情页主体资料仍为空"的割裂。
|
*/
|
private void saveCertificationSnapshot(AccountCertificationApply apply, String operator)
|
{
|
AccountCertification old = certificationMapper.selectCertificationByUserId(apply.getUserId());
|
if (StringUtils.isNotNull(old))
|
{
|
// 旧行逻辑删除后新插一行,而不是原地 update:updateCertification 的 <if> 会跳过
|
// 空值列,个人主体的企业字段(company_name 等为 null)会残留上一份企业资料的值。
|
// 表上刻意没建 UNIQUE(user_id),本就允许留历史行。
|
certificationMapper.deleteCertificationByIds(new Long[] { old.getId() });
|
}
|
AccountCertification certification = new AccountCertification();
|
certification.setUserId(apply.getUserId());
|
certification.setRealName(apply.getRealName());
|
certification.setIdCard(apply.getIdCard());
|
certification.setCompanyName(apply.getCompanyName());
|
certification.setCreditCode(apply.getCreditCode());
|
certification.setLegalPerson(apply.getLegalPerson());
|
certification.setRegisteredRegion(apply.getRegisteredRegion());
|
certification.setCompanyAddress(apply.getCompanyAddress());
|
certification.setRegisterDate(apply.getRegisterDate());
|
certification.setLicenseValidPeriod(apply.getLicenseValidPeriod());
|
certification.setLicenseImage(apply.getLicenseImage());
|
certification.setCreateBy(operator);
|
certification.setRemark("由认证申请(申请号 " + apply.getId() + ")审核通过生成");
|
certificationMapper.insertCertification(certification);
|
}
|
}
|