diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java index 5a2211c8b..f47e126ac 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java @@ -8,8 +8,8 @@ package com.cool.store.enums; */ public enum DataSourceEnum { - SYNC(0, "同步"), - CREATE(1, "创建"); + SYNC(0, "EC同步"), + CREATE(1, "小程序创建"); private Integer code; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index e6650568f..c3e1b84a3 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -57,6 +57,8 @@ public enum ErrorCodeEnum { ZONE_NOT_EXIST(500004, "战区不存在!", null), INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null), + DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), + INTERVIEW_NOT_EXIST(1021103, "面试信息不存在!", null), SIGN_FAIL(600000, "验签失败", null), GET_ACCESSTOKEN_ERROR(600001, "获取小程序TOKEN错误!", null), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java index d8b321374..8223f7559 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java @@ -171,4 +171,8 @@ public class RedisUtil { public void delete(String key) { redisTemplate.delete(key); } + + public Long increment(String key) { + return redisTemplate.boundValueOps(key).increment(1L); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/DingdingUserMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/DingdingUserMapper.java new file mode 100644 index 000000000..b47279277 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/DingdingUserMapper.java @@ -0,0 +1,26 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.DingdingUserDO; + +/** + * @author zhangchenbiao + * @date 2023-06-15 10:03 + */ +public interface DingdingUserMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2023-06-15 10:03 + */ + int insertSelective(DingdingUserDO record); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2023-06-15 10:03 + */ + int updateByPrimaryKeySelective(DingdingUserDO record); + + DingdingUserDO selectDingDingUserByMobile(String mobile); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java index 4e0de1a97..87e8d11d7 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java @@ -68,4 +68,8 @@ public interface HyPartnerInterviewMapper { */ PartnerPassLetterDetailVO getPassLetterDetail(@Param("interviewId") String interviewId); + /** + * 根据面试 id 查询面试信息 + */ + HyPartnerInterviewDO selectByPrimaryKeySelective(String interviewId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/DingdingUserMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/DingdingUserMapper.xml new file mode 100644 index 000000000..f383f5093 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/DingdingUserMapper.xml @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, userid, unionid, remark, is_boss, hired_date, is_senior, tel, work_place, email, + active, avatar, is_admin, is_hide, job_number, name, state_code, real_authed, db_update_timestamp, + position, mobile, check_status, job_status, config_code_id + + + is_leader_in_depts, department, extattr, roles + + + insert into dingding_user + + + userid, + + + unionid, + + + remark, + + + is_boss, + + + hired_date, + + + is_senior, + + + tel, + + + work_place, + + + email, + + + active, + + + avatar, + + + is_admin, + + + is_hide, + + + job_number, + + + name, + + + state_code, + + + real_authed, + + + db_update_timestamp, + + + position, + + + mobile, + + + check_status, + + + job_status, + + + config_code_id, + + + is_leader_in_depts, + + + department, + + + extattr, + + + roles, + + + + + #{userid}, + + + #{unionid}, + + + #{remark}, + + + #{isBoss}, + + + #{hiredDate}, + + + #{isSenior}, + + + #{tel}, + + + #{workPlace}, + + + #{email}, + + + #{active}, + + + #{avatar}, + + + #{isAdmin}, + + + #{isHide}, + + + #{jobNumber}, + + + #{name}, + + + #{stateCode}, + + + #{realAuthed}, + + + #{dbUpdateTimestamp}, + + + #{position}, + + + #{mobile}, + + + #{checkStatus}, + + + #{jobStatus}, + + + #{configCodeId}, + + + #{isLeaderInDepts}, + + + #{department}, + + + #{extattr}, + + + #{roles}, + + + + + update dingding_user + + + userid = #{userid}, + + + unionid = #{unionid}, + + + remark = #{remark}, + + + is_boss = #{isBoss}, + + + hired_date = #{hiredDate}, + + + is_senior = #{isSenior}, + + + tel = #{tel}, + + + work_place = #{workPlace}, + + + email = #{email}, + + + active = #{active}, + + + avatar = #{avatar}, + + + is_admin = #{isAdmin}, + + + is_hide = #{isHide}, + + + job_number = #{jobNumber}, + + + name = #{name}, + + + state_code = #{stateCode}, + + + real_authed = #{realAuthed}, + + + db_update_timestamp = #{dbUpdateTimestamp}, + + + position = #{position}, + + + mobile = #{mobile}, + + + check_status = #{checkStatus}, + + + job_status = #{jobStatus}, + + + config_code_id = #{configCodeId}, + + + is_leader_in_depts = #{isLeaderInDepts}, + + + department = #{department}, + + + extattr = #{extattr}, + + + roles = #{roles}, + + + where id = #{id} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml index 0fa5d3610..d80bdd3c8 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml @@ -14,6 +14,7 @@ + @@ -41,7 +42,7 @@ id, status, partner_line_id, interview_plan_id, partner_id, deadline, interviewer, - recorder, process_info, record_time, summary, auth_code, pass_file_url, expiry_date, + recorder, process_info, record_time, summary, auth_code, qualify_verify_id, pass_file_url, expiry_date, latest_log_message, pass_reason, certify_file, create_time, update_time, approve_time, partner_enter_time, interviewer_enter_time @@ -244,6 +245,9 @@ interviewer_enter_time = #{interviewerEnterTime}, + + qualify_verify_id = #{qualifyVerifyId}, + where id = #{id} @@ -329,5 +333,14 @@ FROM hy_partner_intent_info WHERE partner_id = #{partner_id} + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/mdm/AccessTokenDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/mdm/AccessTokenDTO.java new file mode 100644 index 000000000..661d936d2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/mdm/AccessTokenDTO.java @@ -0,0 +1,27 @@ +package com.cool.store.dto.mdm; + +/** + * @Author: young.yu + * @Date: 2023-06-15 13:35 + * @Description: + */ +public class AccessTokenDTO { + private Long expiresIn; + private String accessToken; + + public Long getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(Long expiresIn) { + this.expiresIn = expiresIn; + } + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/response/MDMResultDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/response/MDMResultDTO.java new file mode 100644 index 000000000..ed0593839 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/response/MDMResultDTO.java @@ -0,0 +1,28 @@ +package com.cool.store.dto.response; + +/** + * @Author: young.yu + * @Date: 2023-06-14 16:39 + * @Description: + */ +public class MDMResultDTO extends ResultDTO{ + private Object bizKey; + + private String traceId; + + public Object getBizKey() { + return bizKey; + } + + public void setBizKey(Object bizKey) { + this.bizKey = bizKey; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/DingdingUserDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/DingdingUserDO.java new file mode 100644 index 000000000..826abc262 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/DingdingUserDO.java @@ -0,0 +1,104 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2023-06-15 10:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DingdingUserDO implements Serializable { + @ApiModelProperty("") + private Integer id; + + @ApiModelProperty("用户id") + private String userid; + + @ApiModelProperty("") + private String unionid; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("是不是老板") + private Integer isBoss; + + @ApiModelProperty("入职时间【毫秒时间戳】") + private String hiredDate; + + @ApiModelProperty("是否是高管") + private Integer isSenior; + + @ApiModelProperty("分机号") + private String tel; + + @ApiModelProperty("办公地点") + private String workPlace; + + @ApiModelProperty("员工电子邮箱") + private String email; + + @ApiModelProperty("是否已经激活,true表示已激活,false表示未激活") + private Integer active; + + @ApiModelProperty("头像url") + private String avatar; + + @ApiModelProperty("是否为企业的管理员,true表示是,false表示不是") + private Integer isAdmin; + + @ApiModelProperty("是否号码隐藏,true表示隐藏,false表示不隐藏") + private Integer isHide; + + @ApiModelProperty("员工工号") + private String jobNumber; + + @ApiModelProperty("员工名字") + private String name; + + @ApiModelProperty("国家地区码") + private String stateCode; + + @ApiModelProperty("是否实名认证") + private Integer realAuthed; + + @ApiModelProperty("数据库更新时间") + private Date dbUpdateTimestamp; + + @ApiModelProperty("职位") + private String position; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("审核状态[0、待审核;1、已审核;2、拒绝审核;3、首次同步不处理]") + private Integer checkStatus; + + @ApiModelProperty("工作状态[1、在职;0、离职]") + private Integer jobStatus; + + @ApiModelProperty("所在组织") + private Integer configCodeId; + + @ApiModelProperty("json格式的【是不是部门老大,多部门所以json】") + private String isLeaderInDepts; + + @ApiModelProperty("所属部门id") + private String department; + + @ApiModelProperty("扩展属性") + private String extattr; + + @ApiModelProperty("用户角色信息") + private String roles; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewDO.java index 2a13043ad..1fc9ad898 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewDO.java @@ -54,6 +54,9 @@ public class HyPartnerInterviewDO implements Serializable { @ApiModelProperty("授权码") private String authCode; + @ApiModelProperty("资质审核流程id") + private String qualifyVerifyId; + @ApiModelProperty("函文件url") private String passFileUrl; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/CreateQualifyVerifyReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/CreateQualifyVerifyReq.java new file mode 100644 index 000000000..7f0dd8739 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/CreateQualifyVerifyReq.java @@ -0,0 +1,72 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: young.yu + * @Date: 2023-06-14 14:18 + * @Description: + */ +@Data +@ApiModel(description = "发起加盟商资质审核请求") +public class CreateQualifyVerifyReq { + @ApiModelProperty(value = "线索id", required = true) + private String lineId; + + @ApiModelProperty(value = "会议id", required = true) + private String interviewId; + + @ApiModelProperty(value = "加盟商id", required = true) + private String partnerId; + + @ApiModelProperty(value = "面试表现记录", required = true) + private String summary; + + @ApiModelProperty(value = "合作关系: 1总部下属; 2小区代直营; 3县代直营; 4县代下属; 5区代直营; 6区代下属", required = true) + private Integer partnership; + + @ApiModelProperty(value = "意向签约时间", required = true, example = "YYYY-MM-DD") + private String wantSignTime; + + @ApiModelProperty(value = "加盟费", required = true) + private String partnerFee; + + @ApiModelProperty(value = "保证金", required = true) + private String securityFund; + + @ApiModelProperty(value = "技术服务费", required = true) + private String technicalServiceFee; + + @ApiModelProperty(value = "意向金金额", required = true) + private String intentionMoney; + + @ApiModelProperty(value = "意向签约人姓名", required = true) + private String intentionSignerUsername; + + @ApiModelProperty(value = "意向签约人手机号", required = true) + private String intentionSignerMobile; + + @ApiModelProperty(value = "意向签约人学历: 1.初中及以下 2.高中 3.大专 4.本科 5.硕士及以上", required = true) + private String intentionEdu; + + @ApiModelProperty(value = "实控人姓名", required = true) + private String realControlUsername; + + @ApiModelProperty(value = "实控人身份证", required = true) + private String realControlIdcard; + + @ApiModelProperty(value = "实控人与签约人关系: 1.本人 2.配偶 3.二代直系亲属 4.雇佣 5.其他", required = true) + private String signerRealControlRelation; + + @ApiModelProperty(value = "其他实控人与签约人关系") + private String signerOtherRealControlRelation; + + @ApiModelProperty(value = "实控人与签约人关系证明(文件上传地址,多个以英文逗号隔开)") + private String signerRealControlRelationCert; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RpcCreateQualifyVerfyReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RpcCreateQualifyVerfyReq.java new file mode 100644 index 000000000..c47ee84a0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RpcCreateQualifyVerfyReq.java @@ -0,0 +1,87 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; + +/** + * @Author: young.yu + * @Date: 2023-06-14 15:06 + * @Description: + */ +public class RpcCreateQualifyVerfyReq { + @ApiModelProperty(value = "意向签约时间", required = true) + private String intendedSignDate; + + @ApiModelProperty(value = "请求来源", required = true) + private String fraSource; + + @ApiModelProperty(value = "保证金(元)", required = true, example = "5000") + private int amtDeposit; + + @ApiModelProperty(value = "授权码", required = true) + private String authCode; + + @ApiModelProperty(value = "意向签约人", required = true) + private String intendedSigner; + + @ApiModelProperty(value = "手机号", required = true) + private String intendedSignerTel; + + @ApiModelProperty(value = "钉钉用户id", required = true) + private String dingUserId; + + public String getIntendedSignDate() { + return intendedSignDate; + } + + public void setIntendedSignDate(String intendedSignDate) { + this.intendedSignDate = intendedSignDate; + } + + public String getFraSource() { + return fraSource; + } + + public void setFraSource(String fraSource) { + this.fraSource = fraSource; + } + + public int getAmtDeposit() { + return amtDeposit; + } + + public void setAmtDeposit(int amtDeposit) { + this.amtDeposit = amtDeposit; + } + + public String getAuthCode() { + return authCode; + } + + public void setAuthCode(String authCode) { + this.authCode = authCode; + } + + public String getIntendedSigner() { + return intendedSigner; + } + + public void setIntendedSigner(String intendedSigner) { + this.intendedSigner = intendedSigner; + } + + public String getIntendedSignerTel() { + return intendedSignerTel; + } + + public void setIntendedSignerTel(String intendedSignerTel) { + this.intendedSignerTel = intendedSignerTel; + } + + public String getDingUserId() { + return dingUserId; + } + + public void setDingUserId(String dingUserId) { + this.dingUserId = dingUserId; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RpcGetMdmTokenReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RpcGetMdmTokenReq.java new file mode 100644 index 000000000..ae8e202e8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RpcGetMdmTokenReq.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +/** + * @Author: young.yu + * @Date: 2023-06-15 13:28 + * @Description: + */ +public class RpcGetMdmTokenReq { + private String appKey; + private String appSecret; + + public String getAppKey() { + return appKey; + } + + public void setAppKey(String appKey) { + this.appKey = appKey; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java new file mode 100644 index 000000000..c31da95ee --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FlowService.java @@ -0,0 +1,13 @@ +package com.cool.store.service; + +import com.cool.store.exception.ApiException; +import com.cool.store.request.CreateQualifyVerifyReq; + +/** + * @Author: young.yu + * @Date: 2023-06-14 13:51 + * @Description: + */ +public interface FlowService { + void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java new file mode 100644 index 000000000..be53f658a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FlowServiceImpl.java @@ -0,0 +1,188 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dto.login.UserIdInfoDTO; +import com.cool.store.dto.mdm.AccessTokenDTO; +import com.cool.store.dto.response.MDMResultDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.DataSourceEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.WorkflowStatusEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.DingdingUserMapper; +import com.cool.store.mapper.HyPartnerCertificationInfoMapper; +import com.cool.store.mapper.HyPartnerInterviewMapper; +import com.cool.store.mapper.HyPartnerLineInfoMapper; +import com.cool.store.request.CreateQualifyVerifyReq; +import com.cool.store.request.RpcCreateQualifyVerfyReq; +import com.cool.store.request.RpcGetMdmTokenReq; +import com.cool.store.service.FlowService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.RestTemplateUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * @Author: young.yu + * @Date: 2023-06-14 14:22 + * @Description: + */ +@Slf4j +@Service +public class FlowServiceImpl implements FlowService { + + // @Value("${hs.mdm.baseUrl}") + private String mdmBaseUrl; + @Autowired + private RedisUtilPool redisUtilPool; + + @Autowired + private HyPartnerLineInfoMapper hyPartnerLineInfoMapper; + + @Autowired + private EnterpriseUserDAO enterpriseUserDAO; + + @Autowired + private DingdingUserMapper dingdingUserMapper; + + @Autowired + private HyPartnerInterviewMapper hyPartnerInterviewMapper; + + @Autowired + private HyPartnerCertificationInfoMapper hyPartnerCertificationInfoMapper; + + @Override + public void createQualifyVerify(CreateQualifyVerifyReq request) throws ApiException { + //1.发起加盟商资质审核 + RpcCreateQualifyVerfyReq rpcRequest = new RpcCreateQualifyVerfyReq(); + rpcRequest.setIntendedSignDate(request.getWantSignTime()); + rpcRequest.setFraSource("HSAYPartner"); + rpcRequest.setAmtDeposit(Integer.valueOf(request.getSecurityFund())); + + //获取授权码 + String authCode = null; + if (StringUtils.isBlank(request.getLineId())) { + //根据线索id获取线索信息 + HyPartnerLineInfoDO hyPartnerLineInfoDO = hyPartnerLineInfoMapper.selectByPrimaryKeySelective(Long.valueOf(request.getLineId())); + if (!Objects.isNull(hyPartnerLineInfoDO)) { + String investmentManagerId = hyPartnerLineInfoDO.getInvestmentManager(); + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoById(investmentManagerId); + if (!Objects.isNull(enterpriseUserDO)) { + String jobNumber = enterpriseUserDO.getJobnumber(); + String mobile = enterpriseUserDO.getMobile(); + DingdingUserDO dingdingUserDO = dingdingUserMapper.selectDingDingUserByMobile(mobile); + if (Objects.isNull(dingdingUserDO)) { + throw new ServiceException(ErrorCodeEnum.DINGDING_USER_NOT_EXIST); + } + rpcRequest.setDingUserId(dingdingUserDO.getUserid()); + authCode = generateAuthCode(jobNumber); + rpcRequest.setAuthCode(authCode); + } + } + + } + rpcRequest.setIntendedSigner(request.getIntentionSignerUsername()); + rpcRequest.setIntendedSignerTel(request.getIntentionSignerMobile()); + + String qualifyVerifyId = createQualifyVerify(rpcRequest); + //2.更新审核信息 + HyPartnerCertificationInfoDO partnerCertificationInfoDO = new HyPartnerCertificationInfoDO(); + partnerCertificationInfoDO.setPartnerId(request.getPartnerId()); + partnerCertificationInfoDO.setPartnerLineId(Long.valueOf(request.getLineId())); + partnerCertificationInfoDO.setPartnerInterviewId(Long.valueOf(request.getInterviewId())); + partnerCertificationInfoDO.setPartnership(String.valueOf(request.getPartnership())); + partnerCertificationInfoDO.setWantSignTime(DateUtil.parseDate(request.getWantSignTime())); + partnerCertificationInfoDO.setPartnerFee(request.getPartnerFee()); + partnerCertificationInfoDO.setSecurityFund(request.getSecurityFund()); + partnerCertificationInfoDO.setTechnicalServiceFee(request.getTechnicalServiceFee()); + partnerCertificationInfoDO.setIntentionMoney(request.getIntentionMoney()); + partnerCertificationInfoDO.setIntentionSignerUsername(request.getIntentionSignerUsername()); + partnerCertificationInfoDO.setIntentionSignerMobile(request.getIntentionSignerMobile()); + partnerCertificationInfoDO.setIntentionEdu(request.getIntentionEdu()); + partnerCertificationInfoDO.setRealControlUsername(request.getRealControlUsername()); + partnerCertificationInfoDO.setRealControlIdcard(request.getRealControlIdcard()); + partnerCertificationInfoDO.setSignerRealControlRelation(request.getSignerRealControlRelation()); + partnerCertificationInfoDO.setSignerOtherRealControlRelation(request.getSignerOtherRealControlRelation()); + partnerCertificationInfoDO.setSignerRealControlRelationCert(request.getSignerRealControlRelationCert()); + partnerCertificationInfoDO.setCreateTime(new Date()); + partnerCertificationInfoDO.setUpdateTime(new Date()); + hyPartnerCertificationInfoMapper.updateByPrimaryKeySelective(partnerCertificationInfoDO); + //3.更新面试信息 + //根据面试id获取面试信息 + HyPartnerInterviewDO hyPartnerInterviewDO = hyPartnerInterviewMapper.selectByPrimaryKeySelective(request.getInterviewId()); + if (Objects.isNull(hyPartnerInterviewDO)) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + hyPartnerInterviewDO.setQualifyVerifyId(qualifyVerifyId); + hyPartnerInterviewDO.setUpdateTime(new Date()); + //更新 + hyPartnerInterviewDO.setStatus(Integer.valueOf(WorkflowStatusEnum.INTERVIEW_4.getCode())); + hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO); + + } + + + public String createQualifyVerify(RpcCreateQualifyVerfyReq rpcRequest) throws ApiException{ + String url = mdmBaseUrl + "/api/openapi/runtime/form/startFraQualExam"; + ResponseEntity responseEntity = null; + try { + RpcGetMdmTokenReq rpcGetMDMTokenReq = new RpcGetMdmTokenReq(); + Map headers = new HashMap<>(); + headers.put("Authorization", getMdmAccessToken(rpcGetMDMTokenReq)); + responseEntity = RestTemplateUtil.post(url, headers,rpcRequest, MDMResultDTO.class); + log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity)); + if (Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()) { + return JSONObject.toJSONString(responseEntity.getBody().getData()); + } + } catch (Exception e) { + log.info("调用MDM接口出错{}", e); + throw new ApiException(e.getMessage()); + } + return null; + + } + + public String getMdmAccessToken(RpcGetMdmTokenReq rpcGetMDMTokenReq) throws ApiException { + String url = mdmBaseUrl + "/api/oauth2/accessToken"; + ResponseEntity responseEntity = null; + try { + responseEntity = RestTemplateUtil.post(url,rpcGetMDMTokenReq, MDMResultDTO.class); + log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity)); + if (Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()) { + AccessTokenDTO accessTokenDTO = JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody().getData()), AccessTokenDTO.class); + if(accessTokenDTO==null || StringUtils.isBlank(accessTokenDTO.getAccessToken())){ + throw new ServiceException("获取Mdm token失败!"); + } + return accessTokenDTO.getAccessToken(); + } + } catch (Exception e) { + log.info("调用MDM接口出错{}", e); + throw new ApiException(e.getMessage()); + } + return null; + } + + + /** + * 生成授权码 + * + * @param jobNumber + * @return + */ + public String generateAuthCode(String jobNumber) { + String prefix = jobNumber + DateUtil.format(new Date(), "yyyyMMdd"); + return prefix + redisUtilPool.incrby(prefix, 1, 60 * 60 * 25); + } +} diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java new file mode 100644 index 000000000..c67f98f7a --- /dev/null +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FlowController.java @@ -0,0 +1,32 @@ +package com.cool.store.controller; + +import com.cool.store.exception.ApiException; +import com.cool.store.request.CreateQualifyVerifyReq; +import com.cool.store.request.FinishInterviewReq; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.FlowService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +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; + +/** + * @Author: young.yu + * @Date: 2023-06-14 13:47 + * @Description: 流程相关 + */ +@RestController +@RequestMapping({"/flow"}) +public class FlowController { + + @Autowired + private FlowService flowService; + @PostMapping("/qualifyVerify/create") + @ApiOperation("发起加盟商资质审核") + public ResponseResult createQualifyVerify(@RequestBody CreateQualifyVerifyReq request) throws ApiException { + flowService.createQualifyVerify(request); + return ResponseResult.success(); + } +} diff --git a/coolstore-partner-webb/src/main/resources/application-dev.properties b/coolstore-partner-webb/src/main/resources/application-dev.properties index 14ecbbb60..db374cdb5 100644 --- a/coolstore-partner-webb/src/main/resources/application-dev.properties +++ b/coolstore-partner-webb/src/main/resources/application-dev.properties @@ -53,6 +53,9 @@ corp.id = 171cddee76471740 trtc.sdkAppId=1400811820 trtc.secretKey=4854bab106c2ca2a2fda16a8c966933e28a078a34e458999d6227e8cd8ab8219 +#八佰流程配置 +hs.mdm.baseUrl=http://172.35.37.52:8080 + #xxljob配置 xxl.job.admin.addresses = https://djob.coolstore.cn/xxl-job-admin xxl.job.executor.appname = ${spring.application.name}