commit
eb7636fc39
|
@ -4092,6 +4092,53 @@ public class Util extends weaver.general.Util {
|
|||
Util.getLogger().error(getErrString(e));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <h1>获取下一个部门id</h1>
|
||||
* @author xuanran.wang
|
||||
* @dateTime 2023/7/19 11:24
|
||||
* @return 部门id
|
||||
**/
|
||||
public static int getNextDepartmentId(){
|
||||
return getNextDepartmentId(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* <h1>获取下一个部门id</h1>
|
||||
* @author xuanran.wang
|
||||
* @dateTime 2023/7/19 11:24
|
||||
* @param subId 分部id
|
||||
* @return 部门id
|
||||
**/
|
||||
public static int getNextDepartmentId(int subId){
|
||||
RecordSet insertRs = new RecordSet();
|
||||
char separator = weaver.general.Util.getSeparator();
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
String para = uuid + separator +uuid + separator +
|
||||
"" + separator + "" + separator + subId + separator + 1 + separator + "";
|
||||
insertRs.executeProc("HrmDepartment_Insert", para);
|
||||
if(insertRs.next()){
|
||||
return insertRs.getInt(1);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <h1>获取下一个人员id</h1>
|
||||
* @author xuanran.wang
|
||||
* @dateTime 2023/4/12 13:24
|
||||
* @return 人员id
|
||||
**/
|
||||
public static int getNextHrmId(){
|
||||
RecordSet procRs = new RecordSet();
|
||||
procRs.executeProc("HrmResourceMaxId_Get", "");
|
||||
if (procRs.next()) {
|
||||
return procRs.getInt(1);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -22,9 +22,6 @@ public class InsertOrUpdateState extends State{
|
|||
|
||||
@Override
|
||||
public void handle() {
|
||||
if(ResponseUtil.parameterIsNotNull(this.context.getTableDefinitionCallback())){
|
||||
this.context.getTableDefinitionCallback().tableHandle(this.context);
|
||||
}
|
||||
List<RowDefinition> rowDefinitionList = this.context.getRowDefinitionList();
|
||||
List<RowDefinition> updateRowList = new ArrayList<>();
|
||||
List<RowDefinition> insertRowList = new ArrayList<>();
|
||||
|
@ -55,7 +52,6 @@ public class InsertOrUpdateState extends State{
|
|||
BeanUtil.copyProperties(this.context,tableDefinition);
|
||||
tableDefinition.setState(null);
|
||||
tableDefinition.setRowDefinitionList(rowDefinitionList);
|
||||
tableDefinition.setTableDefinitionCallback(null);
|
||||
tableDefinition.setAssignType(assignType);
|
||||
tableDefinition.setDefaultState(null);
|
||||
tableDefinition.dataProcess();
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
package com.api.xuanran.wang.xk_hospital.data_async.definitions;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import aiyh.utils.excention.CustomerException;
|
||||
import aiyh.utils.response_deal.entity.FieldDefinition;
|
||||
import aiyh.utils.response_deal.entity.RowDefinition;
|
||||
import aiyh.utils.response_deal.intfaces.RowDefinitionCallback;
|
||||
import aiyh.utils.response_deal.mapper.ConfigMapper;
|
||||
import aiyh.utils.tool.cn.hutool.core.util.StrUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <h1></h1>
|
||||
*
|
||||
* @author xuanran.wang
|
||||
* @date 2023/7/18 11:13
|
||||
*/
|
||||
public class HrmDepartmentDefinition implements RowDefinitionCallback {
|
||||
|
||||
protected final ConfigMapper configMapper = Util.getMapper(ConfigMapper.class);
|
||||
|
||||
@Override
|
||||
public void rowHandle(RowDefinition rowDefinition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean judgmentRepetition(RowDefinition rowDefinition) {
|
||||
String conditionScript = rowDefinition.getConditionScript();
|
||||
String cusQuerySql = "select id from " + rowDefinition.getAssignTable() + " where " + conditionScript;
|
||||
String dataId = this.configMapper.executeCusQuerySql(cusQuerySql, rowDefinition.getWhereParam(),new HashMap<>());
|
||||
if(StrUtil.isBlank(dataId)){
|
||||
RecordSet insertRs = new RecordSet();
|
||||
char separator = weaver.general.Util.getSeparator();
|
||||
//使用存储过程新增分部
|
||||
String para = "" + separator + "" + separator +
|
||||
"" + separator + "" + separator + "1" + separator + "";
|
||||
insertRs.executeProc("HrmDepartment_Insert", para);
|
||||
if (insertRs.next()) {
|
||||
int depId = insertRs.getInt(1);
|
||||
rowDefinition.setDataId(depId);
|
||||
rowDefinition.getWhereParam().put("id", depId);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package com.api.xuanran.wang.xk_hospital.data_async.definitions;
|
||||
|
||||
import aiyh.utils.response_deal.entity.RowDefinition;
|
||||
import aiyh.utils.response_deal.intfaces.RowDefinitionCallback;
|
||||
|
||||
/**
|
||||
* <h1></h1>
|
||||
*
|
||||
* @author xuanran.wang
|
||||
* @date 2023/7/18 11:13
|
||||
*/
|
||||
public class HrmresourceDefinition implements RowDefinitionCallback {
|
||||
@Override
|
||||
public void rowHandle(RowDefinition rowDefinition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean judgmentRepetition(RowDefinition rowDefinition) {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
package com.api.xuanran.wang.xk_hospital.data_async.definitions;
|
||||
|
||||
import aiyh.utils.ThreadPoolConfig;
|
||||
import aiyh.utils.Util;
|
||||
import aiyh.utils.response_deal.mapper.ConfigMapper;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.mapper.XkHospitalDataAsyncMapper;
|
||||
import com.engine.common.service.impl.ThemeServiceImpl;
|
||||
import org.apache.log4j.Logger;
|
||||
import weaver.hrm.company.DepartmentComInfo;
|
||||
import weaver.hrm.resource.ResourceComInfo;
|
||||
import weaver.matrix.MatrixUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
/**
|
||||
* <h1></h1>
|
||||
*
|
||||
* @author xuanran.wang
|
||||
* @date 2023/7/19 10:22
|
||||
*/
|
||||
public class XkHospitalCommonDefinition {
|
||||
/**
|
||||
* <h2>部门表名</h2>
|
||||
**/
|
||||
public static final String DEPARTMENT = "hrmdepartment";
|
||||
/**
|
||||
* <h2>人员表名</h2>
|
||||
**/
|
||||
public static final String HRM_RESOURCE = "hrmresource";
|
||||
/**
|
||||
* <h2>日志对象</h2>
|
||||
**/
|
||||
protected static final Logger log = Util.getLogger();
|
||||
/**
|
||||
* <h2>数据同步mapper</h2>
|
||||
**/
|
||||
protected final XkHospitalDataAsyncMapper dataAsyncMapper = Util.getMapper(XkHospitalDataAsyncMapper.class);
|
||||
/**
|
||||
* <h2>执行自定义sql</h2>
|
||||
**/
|
||||
protected final ConfigMapper configMapper = Util.getMapper(ConfigMapper.class);
|
||||
/**
|
||||
* <h2>线程池对象</h2>
|
||||
**/
|
||||
protected final ExecutorService threadPoolInstance = ThreadPoolConfig.createThreadPoolInstance();
|
||||
/**
|
||||
* <h2>部门缓存</h2>
|
||||
**/
|
||||
protected static final DepartmentComInfo DEPARTMENT_COM_INFO = new DepartmentComInfo();
|
||||
/**
|
||||
* <h2>人员缓存</h2>
|
||||
**/
|
||||
protected static ResourceComInfo RESOURCE_COM_INFO = null;
|
||||
/**
|
||||
* <h2>系统主题接口</h2>
|
||||
**/
|
||||
protected static final ThemeServiceImpl THEME_SERVICE = new ThemeServiceImpl();
|
||||
static {
|
||||
try {
|
||||
RESOURCE_COM_INFO = new ResourceComInfo();
|
||||
}catch (Exception e){
|
||||
log.error("人员缓存类初始化失败! " + e.getMessage());
|
||||
Util.logErrorStr(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步系统缓存
|
||||
* @param table 表名
|
||||
* @param idList 数据id集合
|
||||
*/
|
||||
protected void synCache(String table, List<Integer> idList){
|
||||
if (DEPARTMENT.equals(table)) {
|
||||
threadPoolInstance.execute(()->{
|
||||
try {
|
||||
DEPARTMENT_COM_INFO.removeCache();
|
||||
MatrixUtil.sysDepartmentData();
|
||||
}catch (Exception e){
|
||||
log.error("同步系统部门缓存error : " + e.getMessage());
|
||||
Util.logErrorStr(e);
|
||||
}
|
||||
});
|
||||
}else if(HRM_RESOURCE.equals(table)){
|
||||
try {
|
||||
List<Map<String, Integer>> hrmSubList = dataAsyncMapper.selectHrmSubByHrmIdList(idList);
|
||||
hrmSubList.forEach(map->{
|
||||
THEME_SERVICE.createSubCompanyMenu(map.get("id"), map.get("sub"));
|
||||
});
|
||||
RESOURCE_COM_INFO.removeCache();
|
||||
}catch (Exception e){
|
||||
log.error("同步系统人员缓存error : " + e.getMessage());
|
||||
Util.logErrorStr(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.api.xuanran.wang.xk_hospital.data_async.definitions.row;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import aiyh.utils.excention.CustomerException;
|
||||
import aiyh.utils.response_deal.entity.RowDefinition;
|
||||
import aiyh.utils.response_deal.intfaces.RowDefinitionCallback;
|
||||
import aiyh.utils.response_deal.mapper.ConfigMapper;
|
||||
import aiyh.utils.tool.cn.hutool.core.util.StrUtil;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.definitions.XkHospitalCommonDefinition;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
import weaver.conn.RecordSet;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* <h1></h1>
|
||||
*
|
||||
* @author xuanran.wang
|
||||
* @date 2023/7/18 11:13
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class HrmDepartmentRowDefinition extends XkHospitalCommonDefinition implements RowDefinitionCallback {
|
||||
|
||||
private String table;
|
||||
|
||||
@Override
|
||||
public void rowHandle(RowDefinition rowDefinition) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean judgmentRepetition(RowDefinition rowDefinition) {
|
||||
String conditionScript = rowDefinition.getConditionScript();
|
||||
String cusQuerySql = "select id from " + rowDefinition.getAssignTable() + " where " + conditionScript;
|
||||
String dataId = configMapper.executeCusQuerySql(cusQuerySql, rowDefinition.getWhereParam(),new HashMap<>());
|
||||
if(StrUtil.isBlank(dataId)){
|
||||
int nextId = -1;
|
||||
if(HRM_RESOURCE.equals(table)){
|
||||
nextId = Util.getNextHrmId();
|
||||
}else if(DEPARTMENT.equals(table)){
|
||||
nextId = Util.getNextDepartmentId();
|
||||
}
|
||||
if(nextId < 0){
|
||||
throw new CustomerException("从 " + table + " 获取下一个id失败!");
|
||||
}
|
||||
rowDefinition.setDataId(nextId);
|
||||
rowDefinition.getWhereParam().put("id", nextId);
|
||||
rowDefinition.setConditionScript(" id = #{whereItem.id}");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.api.xuanran.wang.xk_hospital.data_async.definitions.table;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import aiyh.utils.excention.CustomerException;
|
||||
import aiyh.utils.response_deal.entity.RowDefinition;
|
||||
import aiyh.utils.response_deal.entity.TableDefinition;
|
||||
import aiyh.utils.response_deal.intfaces.TableDefinitionCallback;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.definitions.XkHospitalCommonDefinition;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <h1>部门/人员同步表回调</h1>
|
||||
*
|
||||
* @author xuanran.wang
|
||||
* @date 2023/7/19 10:11
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class HrmDepartmentTableDefinition extends XkHospitalCommonDefinition implements TableDefinitionCallback {
|
||||
|
||||
private String table;
|
||||
|
||||
@Override
|
||||
public void tableHandle(TableDefinition tableDefinition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterHandle(TableDefinition tableDefinition, boolean flag) {
|
||||
List<Integer> idList = tableDefinition.getRowDefinitionList()
|
||||
.stream()
|
||||
.map(RowDefinition::getDataId)
|
||||
.filter(dataId -> dataId > 0)
|
||||
.collect(Collectors.toList());
|
||||
if(CollectionUtils.isEmpty(idList)){
|
||||
return;
|
||||
}
|
||||
if(!flag){
|
||||
if (!this.dataAsyncMapper.deleteHrmDepart(idList)) {
|
||||
log.error("删除 " + table + " 表数据失败!");
|
||||
}
|
||||
throw new CustomerException("同步 " + table + " 表数据失败!");
|
||||
}else {
|
||||
synCache(table, idList);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.api.xuanran.wang.xk_hospital.data_async.mapper;
|
||||
|
||||
import aiyh.utils.annotation.recordset.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <h1>胸科医院数据同步mapper</h1>
|
||||
*
|
||||
* @author xuanran.wang
|
||||
* @date 2023/7/19 10:19
|
||||
*/
|
||||
@SqlMapper
|
||||
public interface XkHospitalDataAsyncMapper {
|
||||
|
||||
@Delete("delete from hrmdepartment where id in $t{idList}")
|
||||
boolean deleteHrmDepart(@ParamMapper("idList") List<Integer> idList);
|
||||
|
||||
@Select("select id, subcompanyid1 as sub from hrmresource where id in $t{idList}")
|
||||
@ToLowerCase
|
||||
List<Map<String, Integer>> selectHrmSubByHrmIdList(@ParamMapper("idList") List<Integer> idList);
|
||||
|
||||
}
|
|
@ -2,10 +2,12 @@ package com.api.xuanran.wang.xk_hospital.data_async.service.impl;
|
|||
|
||||
import aiyh.utils.response_deal.ResponseMappingDeal;
|
||||
import aiyh.utils.response_deal.intfaces.RowDefinitionCallback;
|
||||
import aiyh.utils.response_deal.intfaces.TableDefinitionCallback;
|
||||
import aiyh.utils.tool.cn.hutool.core.util.StrUtil;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.definitions.HrmresourceDefinition;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.definitions.XkHospitalCommonDefinition;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.definitions.row.HrmDepartmentRowDefinition;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.definitions.table.HrmDepartmentTableDefinition;
|
||||
import com.api.xuanran.wang.xk_hospital.data_async.service.XkHospitalCommonDataAsyncService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
@ -18,20 +20,29 @@ import java.util.Map;
|
|||
*/
|
||||
public class XkHospitalCommonDataAsyncServiceImpl implements XkHospitalCommonDataAsyncService {
|
||||
|
||||
private static final Map<String, RowDefinitionCallback> CUS_DEFINITIONS = new HashMap<>();
|
||||
private static final Map<String, RowDefinitionCallback> CUS_ROW_DEFINITIONS = new HashMap<>();
|
||||
|
||||
private static final Map<String, TableDefinitionCallback> CUS_TABLE_DEFINITIONS = new HashMap<>();
|
||||
|
||||
static {
|
||||
CUS_DEFINITIONS.put("hrm", new HrmresourceDefinition());
|
||||
CUS_DEFINITIONS.put("dept", new HrmresourceDefinition());
|
||||
CUS_ROW_DEFINITIONS.put("dept", new HrmDepartmentRowDefinition(XkHospitalCommonDefinition.DEPARTMENT));
|
||||
CUS_ROW_DEFINITIONS.put("hrm", new HrmDepartmentRowDefinition(XkHospitalCommonDefinition.HRM_RESOURCE));
|
||||
|
||||
CUS_TABLE_DEFINITIONS.put("dept", new HrmDepartmentTableDefinition(XkHospitalCommonDefinition.DEPARTMENT));
|
||||
CUS_TABLE_DEFINITIONS.put("hrm", new HrmDepartmentTableDefinition(XkHospitalCommonDefinition.HRM_RESOURCE));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void async(String configCode, String type, Map<String, Object> params){
|
||||
ResponseMappingDeal deal = new ResponseMappingDeal();
|
||||
if(StrUtil.isNotBlank(type)){
|
||||
RowDefinitionCallback callback = CUS_DEFINITIONS.get(type);
|
||||
if(null != callback){
|
||||
deal.setRowCallback(callback);
|
||||
RowDefinitionCallback rowDefinitionCallback = CUS_ROW_DEFINITIONS.get(type);
|
||||
if(null != rowDefinitionCallback){
|
||||
deal.setRowCallback(rowDefinitionCallback);
|
||||
}
|
||||
TableDefinitionCallback tableDefinitionCallback = CUS_TABLE_DEFINITIONS.get(type);
|
||||
if(null != tableDefinitionCallback){
|
||||
deal.setTableCallback(tableDefinitionCallback);
|
||||
}
|
||||
}
|
||||
deal.doResponseSync(configCode, params);
|
||||
|
|
|
@ -22,26 +22,15 @@ public class XkHospitalTest extends BaseTest {
|
|||
@Test
|
||||
public void testA(){
|
||||
String json = "{\n" +
|
||||
"\t\"ID\":\"主键\",\n" +
|
||||
"\t\"DeptCode\":\"科室代码\",\n" +
|
||||
"\t\"DeptName\":\"科室名称\",\n" +
|
||||
"\t\"DeptLevel\": \"科室级别,int类型,可为null\", \n" +
|
||||
"\t\"ParentDeptCode\":\"上级科室代码\",\n" +
|
||||
"\t\"IsDelete\": \"是否停用,bool类型\", \n" +
|
||||
"\t\"Remark\":\"备注\",\n" +
|
||||
"\t\"Mapping\": [\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"ID\":\"主键\",\n" +
|
||||
"\t\t\t\"DeptID\":\"源科室主键\",\n" +
|
||||
"\t\t\t\"SourceDeptName\":\"源科室名称\",\n" +
|
||||
"\t\t\t\"SystemID\":\"第三方系统主键\",\n" +
|
||||
"\t\t\t\"SystemName\":\"第三方系统名称\",\n" +
|
||||
"\t\t\t\"DeptCode\":\"科室代码\",\n" +
|
||||
"\t\t\t\"DeptName\":\"科室名称\",\n" +
|
||||
"\t\t\t\"Remark\":\"备注\",\n" +
|
||||
"\t\t}\n" +
|
||||
"\t]\n" +
|
||||
"\t\"ID\":\"1\",\n" +
|
||||
"\t\"DeptCode\":\"test3\",\n" +
|
||||
"\t\"DeptName\":\"科室测试名称3\",\n" +
|
||||
"\t\"DeptLevel\": null, \n" +
|
||||
"\t\"ParentDeptCode\": \"test2\",\n" +
|
||||
"\t\"IsDelete\": false, \n" +
|
||||
"\t\"Remark\":\"备注\"\n" +
|
||||
"}\n";
|
||||
|
||||
Map map = JSONObject.parseObject(json, Map.class);
|
||||
service.async("4bce0693734a","dept",map);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue