|  | @@ -0,0 +1,328 @@
 | 
	
		
			
				|  |  | +package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.enums.CertificateTypeEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.SysUserTsign;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.*;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.constant.SysConfigConstant;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.enums.SysUserType;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.base.exception.BizException;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.thirdparty.eseal.ESealPlugin;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.thirdparty.storage.StoragePluginContext;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.thirdparty.storage.provider.KS3StoragePlugin;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPluginContext;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.thirdparty.user.realname.provider.LinkfaceRealnameAuthenticationPlugin;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.utils.date.DateUtil;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.utils.freemarker.FreemarkerTemplateEngine;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.utils.pdf.PDFUtil;
 | 
	
		
			
				|  |  | +import org.apache.commons.io.FileUtils;
 | 
	
		
			
				|  |  | +import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.slf4j.Logger;
 | 
	
		
			
				|  |  | +import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | +import org.springframework.scheduling.annotation.Async;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Isolation;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Propagation;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.io.File;
 | 
	
		
			
				|  |  | +import java.io.IOException;
 | 
	
		
			
				|  |  | +import java.text.DateFormat;
 | 
	
		
			
				|  |  | +import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | +import java.time.LocalDateTime;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@Service
 | 
	
		
			
				|  |  | +public class ContractServiceImpl implements ContractService {
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysUserService sysUserService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysUserTsignService sysUserTsignService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private ContractTemplateService contractTemplateService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysUserContractRecordService contractRecordService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentService studentService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private TeacherService teacherService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysConfigService sysConfigService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private RealnameAuthenticationPluginContext realnameAuthenticationPluginContext;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StoragePluginContext storagePluginContext;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private ESealPlugin eSealPlugin;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${contract.baseDir:/var/pdf}")
 | 
	
		
			
				|  |  | +    private String contractBaseDir;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${message.debugMode}")
 | 
	
		
			
				|  |  | +    private boolean debugMode;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private DateFormat dateFormatOss = new SimpleDateFormat("yyyy/MM/dd");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private DateFormat dateFormat1 = new SimpleDateFormat("yyMMddHHmmSS");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private final Logger logger = LoggerFactory.getLogger(ContractService.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Async
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW)
 | 
	
		
			
				|  |  | +    public HttpResponseResult<String> transferProduceContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType) {
 | 
	
		
			
				|  |  | +        SysUser user = sysUserService.findUserById(userId);
 | 
	
		
			
				|  |  | +        if (user == null) {
 | 
	
		
			
				|  |  | +            logger.error("用户不存在({})", userId);
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("用户不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCardNo())) {
 | 
	
		
			
				|  |  | +            logger.error("身份信息缺失({})", userId);
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("身份信息缺失");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
 | 
	
		
			
				|  |  | +        if (sysUserTsign == null) {
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 | 
	
		
			
				|  |  | +            } catch (Exception e) {
 | 
	
		
			
				|  |  | +                logger.error("用户电子签章注册失败", e);
 | 
	
		
			
				|  |  | +                return HttpResponseResult.failed("用户电子签章注册失败");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 合成freemarker
 | 
	
		
			
				|  |  | +        String srcPdfPath = contractBaseDir + "/product/" + dateFormat1.format(date) + "/" + userId + "_" + LocalDateTime.now().getSecond() + ".pdf";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        File srcFile = new File(srcPdfPath);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        File debtFile = new File(srcFile.getParent());
 | 
	
		
			
				|  |  | +        if (!debtFile.exists()) {
 | 
	
		
			
				|  |  | +            debtFile.mkdirs();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
 | 
	
		
			
				|  |  | +        templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Boolean signflag = contractRecordService.checkContractSign(userId, userType, contractType);
 | 
	
		
			
				|  |  | +        if (signflag) {
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("用户已经签署协议");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 查询最新协议模板
 | 
	
		
			
				|  |  | +        ContractTemplate tenantContractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
 | 
	
		
			
				|  |  | +        if (tenantContractTemplate == null) {
 | 
	
		
			
				|  |  | +            logger.error("最新协议模板查询失败");
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("最新协议模板查询失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String mainContent = tenantContractTemplate.getContractTemplateContent();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<String, Object> params = new HashMap<>();
 | 
	
		
			
				|  |  | +        String companyName = sysConfigService.findConfigValue(SysConfigConstant.COMPANY_NAME);
 | 
	
		
			
				|  |  | +        params.put("companyName", companyName);
 | 
	
		
			
				|  |  | +        params.put("companySealPicture", sysConfigService.findConfigValue(SysConfigConstant.COMPANY_SEAL_PICTURE));
 | 
	
		
			
				|  |  | +        params.put("contractMainContent", mainContent);
 | 
	
		
			
				|  |  | +        params.put("isShowVisualSeal", false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<String, Object> userInfo = new HashMap<>();
 | 
	
		
			
				|  |  | +        userInfo.put("realName", user.getRealName());
 | 
	
		
			
				|  |  | +        userInfo.put("phone", user.getPhone());
 | 
	
		
			
				|  |  | +        userInfo.put("idCardNo", user.getIdCardNo());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (SysUserType.STUDENT.equals(userType)) {
 | 
	
		
			
				|  |  | +            StudentVo detail = studentService.detail(userId);
 | 
	
		
			
				|  |  | +            userInfo.put("subjectName", detail.getSubjectName());
 | 
	
		
			
				|  |  | +        } else if (SysUserType.TEACHER.equals(userType)) {
 | 
	
		
			
				|  |  | +            TeacherVo detail = teacherService.detail(userId);
 | 
	
		
			
				|  |  | +            userInfo.put("subjectName", detail.getSubjectName());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        params.put("userInfo", userInfo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 生成借款协议PDF
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(srcFile), srcPdfPath, "simsun.ttc");
 | 
	
		
			
				|  |  | +        } catch (IOException e) {
 | 
	
		
			
				|  |  | +            logger.error("生成产品协议失败", e);
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("生成产品协议失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        String organCode = sysConfigService.findConfigValue(SysConfigConstant.COMPANY_ORGAN_CODE);
 | 
	
		
			
				|  |  | +        SysUserTsign organTsign = sysUserTsignService.queryByCardNo(organCode);
 | 
	
		
			
				|  |  | +        if (organTsign == null) {
 | 
	
		
			
				|  |  | +            //创建企业签章
 | 
	
		
			
				|  |  | +            organTsign = addTsign(0L, organCode, companyName);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
 | 
	
		
			
				|  |  | +        if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
 | 
	
		
			
				|  |  | +            eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 上传到oss
 | 
	
		
			
				|  |  | +        String dateStrOss = dateFormatOss.format(date);
 | 
	
		
			
				|  |  | +        dateStrOss = "product/" + dateStrOss + "/" + DateUtil.getHour(date);
 | 
	
		
			
				|  |  | +        String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
 | 
	
		
			
				|  |  | +        FileUtils.deleteQuietly(srcFile);
 | 
	
		
			
				|  |  | +        return HttpResponseResult.succeed(pdfFilePath);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(isolation = Isolation.READ_COMMITTED)
 | 
	
		
			
				|  |  | +    public HttpResponseResult<String> queryProductContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType) {
 | 
	
		
			
				|  |  | +        Map<String, Object> result = new HashMap<>();
 | 
	
		
			
				|  |  | +        result.put("code", "false");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        SysUser user = sysUserService.findUserById(userId);
 | 
	
		
			
				|  |  | +        if (user == null) {
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("用户不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCardNo())) {
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("身份信息缺失");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 合成freemarker
 | 
	
		
			
				|  |  | +        String srcPdfPath = contractBaseDir + "/product/" + dateFormat1.format(date) + "/" + userId + "_" + LocalDateTime.now().getSecond() + ".pdf";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        File srcFile = new File(srcPdfPath);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        File debtFile = new File(srcFile.getParent());
 | 
	
		
			
				|  |  | +        if (!debtFile.exists()) {
 | 
	
		
			
				|  |  | +            debtFile.mkdirs();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
 | 
	
		
			
				|  |  | +        templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 查询最新协议模板
 | 
	
		
			
				|  |  | +        ContractTemplate tenantContractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
 | 
	
		
			
				|  |  | +        if (tenantContractTemplate == null) {
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("最新协议模板查询失败");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String mainContent = tenantContractTemplate.getContractTemplateContent();
 | 
	
		
			
				|  |  | +        if(StringUtils.isEmpty(mainContent)){
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("没有协议内容");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<String, Object> params = new HashMap<>();
 | 
	
		
			
				|  |  | +        String companyName = sysConfigService.findConfigValue(SysConfigConstant.COMPANY_NAME);
 | 
	
		
			
				|  |  | +        params.put("companyName", companyName);
 | 
	
		
			
				|  |  | +        params.put("companySealPicture", sysConfigService.findConfigValue(SysConfigConstant.COMPANY_SEAL_PICTURE));
 | 
	
		
			
				|  |  | +        params.put("contractMainContent", mainContent);
 | 
	
		
			
				|  |  | +        params.put("isShowVisualSeal", true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<String, Object> userInfo = new HashMap<>();
 | 
	
		
			
				|  |  | +        userInfo.put("realName", user.getRealName());
 | 
	
		
			
				|  |  | +        userInfo.put("phone", user.getPhone());
 | 
	
		
			
				|  |  | +        userInfo.put("idCardNo", user.getIdCardNo());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (SysUserType.STUDENT.equals(userType)) {
 | 
	
		
			
				|  |  | +            StudentVo detail = studentService.detail(userId);
 | 
	
		
			
				|  |  | +            userInfo.put("subjectName", detail.getSubjectName());
 | 
	
		
			
				|  |  | +        } else if (SysUserType.TEACHER.equals(userType)) {
 | 
	
		
			
				|  |  | +            TeacherVo detail = teacherService.detail(userId);
 | 
	
		
			
				|  |  | +            userInfo.put("subjectName", detail.getSubjectName());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        params.put("userInfo", userInfo);
 | 
	
		
			
				|  |  | +        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        String html = "";
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            html = FileUtils.readFileToString(srcFile);
 | 
	
		
			
				|  |  | +        } catch (IOException e) {
 | 
	
		
			
				|  |  | +            return HttpResponseResult.failed("读取产品协议出错");
 | 
	
		
			
				|  |  | +        } finally {
 | 
	
		
			
				|  |  | +            FileUtils.deleteQuietly(srcFile);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return HttpResponseResult.succeed(html);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private SysUserTsign register(Long userId, String realName, String idCardNo, String mobileNo) {
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(realName) || StringUtils.isBlank(idCardNo) || StringUtils.isBlank(mobileNo)) {
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
 | 
	
		
			
				|  |  | +        if (sysUserTsign == null) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            String accountId = "";
 | 
	
		
			
				|  |  | +            String sealData = "";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            SysUser user = sysUserService.findUserById(userId);
 | 
	
		
			
				|  |  | +            if (user == null) {
 | 
	
		
			
				|  |  | +                throw new BizException("用户信息查询失败");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
 | 
	
		
			
				|  |  | +                if (!debugMode) {
 | 
	
		
			
				|  |  | +                    realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idCardNo);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                accountId = eSealPlugin.createUserAccount(realName, idCardNo, mobileNo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (StringUtils.isBlank(accountId)) {
 | 
	
		
			
				|  |  | +                    throw new BizException("创建电子存证账户失败");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                sealData = eSealPlugin.createUserSeal(accountId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (StringUtils.isBlank(sealData)) {
 | 
	
		
			
				|  |  | +                    throw new BizException("创建电子存证印章失败");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            sysUserTsign = new SysUserTsign(userId, accountId, sealData, realName, idCardNo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            sysUserTsignService.insert(sysUserTsign);
 | 
	
		
			
				|  |  | +            return sysUserTsign;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private SysUserTsign addTsign(Long userId, String organCode, String orgName) {
 | 
	
		
			
				|  |  | +        Optional.ofNullable(organCode).orElseThrow(() -> new BizException("营业执照编号不能为空!"));
 | 
	
		
			
				|  |  | +        Optional.ofNullable(orgName).orElseThrow(() -> new BizException("营业名称不能为空"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        SysUserTsign orignSysUserTsign = sysUserTsignService.queryByCardNo(organCode);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (orignSysUserTsign == null) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            String accountId = eSealPlugin.createOrganAccount(orgName, organCode);
 | 
	
		
			
				|  |  | +            if (StringUtils.isBlank(accountId)) {
 | 
	
		
			
				|  |  | +                throw new BizException("创建企业电子存证账户失败");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            String sealData = eSealPlugin.createOrganSeal(accountId, "", "");
 | 
	
		
			
				|  |  | +            if (StringUtils.isBlank(sealData)) {
 | 
	
		
			
				|  |  | +                throw new BizException("创建电子存证印章失败");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            orignSysUserTsign = new SysUserTsign(-userId, accountId, sealData, orgName, organCode);
 | 
	
		
			
				|  |  | +            sysUserTsignService.insert(orignSysUserTsign);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        } else if (!StringUtils.equals(orignSysUserTsign.getName(), orgName)) {
 | 
	
		
			
				|  |  | +            if (eSealPlugin.updateOrganAccount(orignSysUserTsign.getAccountId(), orgName, organCode)) {
 | 
	
		
			
				|  |  | +                orignSysUserTsign.setName(orgName);
 | 
	
		
			
				|  |  | +                sysUserTsignService.update(orignSysUserTsign);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return orignSysUserTsign;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |