ic_excellent 2023-07-19 14:02:00 +08:00
commit eb7636fc39
10 changed files with 309 additions and 104 deletions

View File

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

View File

@ -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();

View File

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

View File

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

View File

@ -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);
}
}
}
}

View File

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

View File

@ -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);
}
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}