Browse Source

opt: 拜访API

master
Yen 10 months ago
parent
commit
eb9b3287b9
  1. 2
      src/main/java/com/qs/serve/common/config/MyBatisConfig.java
  2. 15
      src/main/java/com/qs/serve/common/model/oa/BaseCreateCallbackBo.java
  3. 35
      src/main/java/com/qs/serve/modules/flow/common/TbsSeeYonConst.java
  4. 11
      src/main/java/com/qs/serve/modules/flow/service/SeeYonOptionService.java
  5. 29
      src/main/java/com/qs/serve/modules/flow/service/SeeYonService.java
  6. 72
      src/main/java/com/qs/serve/modules/flow/service/impl/SeeYonServiceImpl.java
  7. 3
      src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java
  8. 72
      src/main/java/com/qs/serve/modules/visit/service/impl/VisitMainServiceImpl.java
  9. 5
      src/main/resources/application-dev.yml
  10. 9
      src/main/resources/application.yml

2
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(new PaginationInnerInterceptor(DbType.MYSQL));
// 多租户、乐观锁等配置拦截 // 多租户、乐观锁等配置拦截
interceptor.addInnerInterceptor(buildTenantHandler()); //interceptor.addInnerInterceptor(buildTenantHandler());
// 添加防止全表更新与删除拦截器 // 添加防止全表更新与删除拦截器
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor; return interceptor;

15
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;
}

35
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";
}

11
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();
}

29
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<String> newCreateProcess(OaFormMainProcess createProcessBo);
/**
* 获取表单id
* @param templateCode
* @param targetId
* @return
*/
R<String> getFormId(String templateCode,String targetId);
/**
* 创建流程后回调更新记录状态
* @param createCallbackBo
* @return
*/
R<String> createCallbackStatus(BaseCreateCallbackBo createCallbackBo);
}

72
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<String> postBase(String url, Object param, String title){
String token = SecureUtil.md5(LocalDate.now().getDayOfYear()+"000"+LocalDate.now().getYear());
HashMap<String,String> headers = new HashMap<>();
headers.put("token",token);
R<String> 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<String>:{}",JsonUtil.objectToJson(result));
return result;
}
private R<String> getBase(String url2, String title){
String token = SecureUtil.md5(LocalDate.now().getDayOfYear()+"000"+LocalDate.now().getYear());
HashMap<String,String> headers = new HashMap<>();
headers.put("token",token);
R<String> result = HttpUtil.doGetResult(baseUrl+url2,headers);
if(result.getStatus()!=200){
log.error("致远服务失败[{},{}] url2:{}",title,result.getMsg(),url2);
}
return result;
}
@Override
public R<String> createCallbackStatus(BaseCreateCallbackBo createCallbackBo) {
String title = "【创建流程后回调】";
return this.postBase(TbsSeeYonConst.API_PROCESS_CREATE_CALLBACK,createCallbackBo,title);
}
@Override
public R<String> 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<String> newCreateProcess(OaFormMainProcess createProcessBo) {
String title = "【创建流程2】";
return this.postBase(TbsSeeYonConst.API_PROCESS_CREATE_NEW,createProcessBo,title);
}
}

3
src/main/java/com/qs/serve/modules/visit/entity/VisitMain.java

@ -73,7 +73,6 @@ public class VisitMain implements Serializable {
private String checkUserName; private String checkUserName;
/** 预约拜访日期 */ /** 预约拜访日期 */
@NotNull(message = "预约拜访日期不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate preVisitDate; private LocalDate preVisitDate;
@ -88,6 +87,8 @@ public class VisitMain implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime submitTime; private LocalDateTime submitTime;
private String syFormId;
/** 来访公司 */ /** 来访公司 */
@Length(max = 255,message = "来访公司长度不能超过255字") @Length(max = 255,message = "来访公司长度不能超过255字")
private String visitorCompany; private String visitorCompany;

72
src/main/java/com/qs/serve/modules/visit/service/impl/VisitMainServiceImpl.java

@ -1,13 +1,28 @@
package com.qs.serve.modules.visit.service.impl; 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.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.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.qs.serve.modules.visit.entity.VisitMain; import com.qs.serve.modules.visit.entity.VisitMain;
import com.qs.serve.modules.visit.service.VisitMainService; import com.qs.serve.modules.visit.service.VisitMainService;
import com.qs.serve.modules.visit.mapper.VisitMainMapper; 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 * @author YenHex
@ -16,11 +31,66 @@ import com.qs.serve.modules.visit.mapper.VisitMainMapper;
@Slf4j @Slf4j
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class VisitMainServiceImpl extends ServiceImpl<VisitMainMapper,VisitMain> implements VisitMainService { public class VisitMainServiceImpl extends ServiceImpl<VisitMainMapper,VisitMain> 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 @Override
public void submitOaFlow(String id) { public void submitOaFlow(String id) {
String templateCode = loadTemplateCode();
VisitMain visitMain = this.getById(id);
Map<String, Object> 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<String> 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);
} }
} }

5
src/main/resources/application-dev.yml

@ -1,9 +1,14 @@
#项目配置 #项目配置
project: project:
flow-dev: true
upload: upload:
#上传映射地址 #上传映射地址
proxy-url: https://qsjslservice.oss-cn-guangzhou.aliyuncs.com/jsl/ proxy-url: https://qsjslservice.oss-cn-guangzhou.aliyuncs.com/jsl/
api:
host:
seeyon: 'http://127.0.0.1:7444'
aliyun: aliyun:
oss: oss:
bucket: qsjslservice bucket: qsjslservice

9
src/main/resources/application.yml

@ -16,14 +16,6 @@ spring:
#项目配置 #项目配置
project: project:
ignore-url: ignore-url:
tenants: #忽略租户拦截
- /callback
- /favicon.ico
- /error
- /portal/syKeyLogin
- /bir/roiRate/test
- /static/*
- /web/*
permits: #忽略登录 permits: #忽略登录
- /thirty/** #第三方接口 - /thirty/** #第三方接口
- /portal/flushToken #第三方接口 - /portal/flushToken #第三方接口
@ -36,7 +28,6 @@ project:
- /favicon.ico - /favicon.ico
- /error - /error
- /callback - /callback
- /bir/roiRate/test
#mybatis plus #mybatis plus
mybatis-plus: mybatis-plus:

Loading…
Cancel
Save