diff --git a/src/main/java/com/qs/serve/common/config/MyBatisConfig.java b/src/main/java/com/qs/serve/common/config/MyBatisConfig.java index 5dc0761..c625149 100644 --- a/src/main/java/com/qs/serve/common/config/MyBatisConfig.java +++ b/src/main/java/com/qs/serve/common/config/MyBatisConfig.java @@ -26,7 +26,7 @@ public class MyBatisConfig { // 翻页拦截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 多租户、乐观锁等配置拦截 - interceptor.addInnerInterceptor(buildTenantHandler()); + //interceptor.addInnerInterceptor(buildTenantHandler()); // 添加防止全表更新与删除拦截器 interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); return interceptor; diff --git a/src/main/java/com/qs/serve/common/model/oa/BaseCreateCallbackBo.java b/src/main/java/com/qs/serve/common/model/oa/BaseCreateCallbackBo.java new file mode 100644 index 0000000..2c5a656 --- /dev/null +++ b/src/main/java/com/qs/serve/common/model/oa/BaseCreateCallbackBo.java @@ -0,0 +1,15 @@ +package com.qs.serve.common.model.oa; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/28 + */ +@Data +@AllArgsConstructor +public class BaseCreateCallbackBo { + String formType; + String formId; +} diff --git a/src/main/java/com/qs/serve/modules/flow/common/TbsSeeYonConst.java b/src/main/java/com/qs/serve/modules/flow/common/TbsSeeYonConst.java new file mode 100644 index 0000000..ca4e450 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/flow/common/TbsSeeYonConst.java @@ -0,0 +1,35 @@ +package com.qs.serve.modules.flow.common; + +/** + * @author YenHex + * @since 2024/9/19 + */ +public interface TbsSeeYonConst { + + + String API_TEST = "/testConnection"; + String API_PROCESS_CREATE = "/process/create"; + String API_CONTRACT_RELEASE_CANCEL = "/process/cancelReleaseContractApply"; + String API_CONTRACT_RELEASE = "/process/releaseContractApply"; + String API_PROCESS_GET_CONST = "/process/getConst"; + String API_PROCESS_CREATE_NEW = "/process/newCreate"; + String API_PROCESS_CREATE_CALLBACK = "/process/createCallback"; + String API_PROCESS_COMMIT = "/process/commit"; + String API_PROCESS_CANCEL = "/process/cancel"; + String API_GET_FORM_ID = "/process/getFormId"; + String API_GET_COST_FORM_ID = "/process/getCostApplyFormId"; + String API_GET_CHECK_FORM_ID = "/process/getCheckFormId"; + String API_PAGE_AFFAIR = "/process/pageMemberAffair"; + String API_CHECK_AFFAIR = "/process/checkAffair"; + String API_LIST_AFFAIR = "/process/listFormAffair"; + String API_LIST_CHECK = "/process/getCheckList"; + String API_ADD_NODE = "/process/addNode"; + String API_COUNT_NOT_OK = "/process/countUnfinished"; + String API_CHECK_SUMMERY = "/process/checkAffairSummery"; + String API_GET_TARGET_ID = "/process/getTargetByFormId"; + + String OA_USER_LIST = "/process/getUsersByCode"; + String OA_USER_INFO = "/process/getUserByCode"; + String OA_USER_LIST_1 = "/process/getUsersList"; + +} diff --git a/src/main/java/com/qs/serve/modules/flow/service/SeeYonOptionService.java b/src/main/java/com/qs/serve/modules/flow/service/SeeYonOptionService.java new file mode 100644 index 0000000..f50f53f --- /dev/null +++ b/src/main/java/com/qs/serve/modules/flow/service/SeeYonOptionService.java @@ -0,0 +1,11 @@ +package com.qs.serve.modules.flow.service; + +/** + * @author YenHex + * @since 2024/9/19 + */ +public interface SeeYonOptionService { + + String loadTemplateCode(); + +} diff --git a/src/main/java/com/qs/serve/modules/flow/service/SeeYonService.java b/src/main/java/com/qs/serve/modules/flow/service/SeeYonService.java new file mode 100644 index 0000000..5b3f2e0 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/flow/service/SeeYonService.java @@ -0,0 +1,29 @@ +package com.qs.serve.modules.flow.service; + +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.oa.BaseCreateCallbackBo; +import com.qs.serve.common.model.oa.OaFormMainProcess; + +/** + * @author YenHex + * @since 2024/9/19 + */ +public interface SeeYonService { + + R newCreateProcess(OaFormMainProcess createProcessBo); + + /** + * 获取表单id + * @param templateCode + * @param targetId + * @return + */ + R getFormId(String templateCode,String targetId); + + /** + * 创建流程后回调,更新记录状态 + * @param createCallbackBo + * @return + */ + R createCallbackStatus(BaseCreateCallbackBo createCallbackBo); +} diff --git a/src/main/java/com/qs/serve/modules/flow/service/impl/SeeYonServiceImpl.java b/src/main/java/com/qs/serve/modules/flow/service/impl/SeeYonServiceImpl.java new file mode 100644 index 0000000..880d08b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/flow/service/impl/SeeYonServiceImpl.java @@ -0,0 +1,72 @@ +package com.qs.serve.modules.flow.service.impl; + +import cn.hutool.crypto.SecureUtil; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.oa.BaseCreateCallbackBo; +import com.qs.serve.common.model.oa.OaFormMainProcess; +import com.qs.serve.common.util.HttpUtil; +import com.qs.serve.common.util.JsonUtil; +import com.qs.serve.modules.flow.common.TbsSeeYonConst; +import com.qs.serve.modules.flow.service.SeeYonService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.HashMap; + +/** + * @author YenHex + * @since 2024/9/19 + */ +@Slf4j +@Service +public class SeeYonServiceImpl implements SeeYonService { + + @Value("${apis.host.seeyon}") + public static String baseUrl; + + private R postBase(String url, Object param, String title){ + String token = SecureUtil.md5(LocalDate.now().getDayOfYear()+"000"+LocalDate.now().getYear()); + HashMap headers = new HashMap<>(); + headers.put("token",token); + R result = HttpUtil.doPostResult(baseUrl + url, JsonUtil.objectToJson(param),headers); + if(result.getStatus()!=200){ + log.error("致远服务失败[{},{}]\nParam:{}",title,result.getMsg(),JsonUtil.objectToJson(param)); + } + log.info("致远服务返回R:{}",JsonUtil.objectToJson(result)); + return result; + } + + private R getBase(String url2, String title){ + String token = SecureUtil.md5(LocalDate.now().getDayOfYear()+"000"+LocalDate.now().getYear()); + HashMap headers = new HashMap<>(); + headers.put("token",token); + R result = HttpUtil.doGetResult(baseUrl+url2,headers); + if(result.getStatus()!=200){ + log.error("致远服务失败[{},{}] url2:{}",title,result.getMsg(),url2); + } + return result; + } + + @Override + public R createCallbackStatus(BaseCreateCallbackBo createCallbackBo) { + String title = "【创建流程后回调】"; + return this.postBase(TbsSeeYonConst.API_PROCESS_CREATE_CALLBACK,createCallbackBo,title); + } + + + @Override + public R getFormId(String templateCode, String targetId) { + String title = "【获取表单ID】"; + String url2 = TbsSeeYonConst.API_GET_FORM_ID+"?templateCode="+templateCode+"&targetId="+targetId; + return this.getBase(url2,title); + } + + @Override + public R newCreateProcess(OaFormMainProcess createProcessBo) { + String title = "【创建流程2】"; + return this.postBase(TbsSeeYonConst.API_PROCESS_CREATE_NEW,createProcessBo,title); + } + +} diff --git a/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java b/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java index 2b39c52..c6ecdb8 100644 --- a/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java +++ b/src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java @@ -73,7 +73,6 @@ public class VisitMain implements Serializable { private String checkUserName; /** 预约拜访日期 */ - @NotNull(message = "预约拜访日期不能为空") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate preVisitDate; @@ -88,6 +87,8 @@ public class VisitMain implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private LocalDateTime submitTime; + private String syFormId; + /** 来访公司 */ @Length(max = 255,message = "来访公司长度不能超过255字") private String visitorCompany; diff --git a/src/main/java/com/qs/serve/modules/visit/service/impl/VisitMainServiceImpl.java b/src/main/java/com/qs/serve/modules/visit/service/impl/VisitMainServiceImpl.java index 13372d8..c8b9ada 100644 --- a/src/main/java/com/qs/serve/modules/visit/service/impl/VisitMainServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/visit/service/impl/VisitMainServiceImpl.java @@ -1,13 +1,28 @@ package com.qs.serve.modules.visit.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.oa.BaseCreateCallbackBo; +import com.qs.serve.common.model.oa.OaFormMainProcess; +import com.qs.serve.common.util.Assert; +import com.qs.serve.modules.flow.service.SeeYonOptionService; +import com.qs.serve.modules.flow.service.SeeYonService; +import com.qs.serve.modules.visit.common.VisitMainConst; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.qs.serve.modules.visit.entity.VisitMain; import com.qs.serve.modules.visit.service.VisitMainService; import com.qs.serve.modules.visit.mapper.VisitMainMapper; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + /** * 拜访 服务实现类 * @author YenHex @@ -16,11 +31,66 @@ import com.qs.serve.modules.visit.mapper.VisitMainMapper; @Slf4j @Service @AllArgsConstructor -public class VisitMainServiceImpl extends ServiceImpl implements VisitMainService { +public class VisitMainServiceImpl extends ServiceImpl implements VisitMainService, SeeYonOptionService { + + private final SeeYonService seeYonService; + + @Value("${project.flow-dev}") + private static Boolean flowDev; + + @Override + public String loadTemplateCode(){ + return flowDev?"visitApplyForm_Test":"visitApplyForm"; + } @Override public void submitOaFlow(String id) { + String templateCode = loadTemplateCode(); + VisitMain visitMain = this.getById(id); + Map mainData = new HashMap<>(); + mainData.put("deptName",visitMain.getDeptName()); + mainData.put("userCode",visitMain.getUserCode()); + mainData.put("userName",visitMain.getUserName()); + mainData.put("preVisitDate",visitMain.getPreVisitDate()); + mainData.put("visitorCompany",visitMain.getVisitorCompany()); + mainData.put("visitorName",visitMain.getVisitorName()); + mainData.put("visitorMobile",visitMain.getVisitorMobile()); + mainData.put("visitorSum",visitMain.getVisitorSum()); + mainData.put("visitorContext",visitMain.getVisitorContext()); + mainData.put("remark",visitMain.getRemark()); + OaFormMainProcess mainProcess = new OaFormMainProcess(); + mainProcess.setTargetId(visitMain.getId()); + mainProcess.setUploadFiles(new ArrayList<>()); + mainProcess.setTableName("formmain_2228"); + mainProcess.setData(mainData); + mainProcess.setTemplateCode(templateCode); + mainProcess.setUserId(visitMain.getUserId()); + mainProcess.setSenderLoginName(visitMain.getUserCode()); + + R flowIdResult = seeYonService.newCreateProcess(mainProcess); + if(flowIdResult==null||flowIdResult.getStatus()!=200){ + assert flowIdResult != null; + Assert.throwEx("远程服务调用失败:"+flowIdResult.getMsg()); + } + if(flowIdResult.getMsg()!=null && flowIdResult.getMsg().length()>45){ + log.error(flowIdResult.getMsg()); + JSONObject object = JSON.parseObject(flowIdResult.getMsg()); + if(!object.get("code").toString().equals("0")){ + Assert.throwEx("流程发起被拦截了"); + } + } + String formId = null; + R formIdResult = seeYonService.getFormId(templateCode,visitMain.getId()); + if(formIdResult.getStatus()==200){ + formId = formIdResult.getData(); + } + visitMain.setSyFormId(formId); + visitMain.setSubmitTime(LocalDateTime.now()); + visitMain.setCheckState(VisitMainConst.CheckState_0); + this.updateById(visitMain); + BaseCreateCallbackBo callbackBo = new BaseCreateCallbackBo(templateCode, visitMain.getId()); + seeYonService.createCallbackStatus(callbackBo); } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index ae25816..3307072 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,9 +1,14 @@ #项目配置 project: + flow-dev: true upload: #上传映射地址 proxy-url: https://qsjslservice.oss-cn-guangzhou.aliyuncs.com/jsl/ +api: + host: + seeyon: 'http://127.0.0.1:7444' + aliyun: oss: bucket: qsjslservice diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7c9b812..4f2ae63 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -16,14 +16,6 @@ spring: #项目配置 project: ignore-url: - tenants: #忽略租户拦截 - - /callback - - /favicon.ico - - /error - - /portal/syKeyLogin - - /bir/roiRate/test - - /static/* - - /web/* permits: #忽略登录 - /thirty/** #第三方接口 - /portal/flushToken #第三方接口 @@ -36,7 +28,6 @@ project: - /favicon.ico - /error - /callback - - /bir/roiRate/test #mybatis plus mybatis-plus: