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}