单据复制功能,中继服务相关修改

master
anthonywj 2 years ago
parent 5a48483845
commit fe27449cb7

@ -12,6 +12,7 @@ import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus; import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.controller.BaseController; import com.glxp.api.controller.BaseController;
import com.glxp.api.entity.auth.InvBusUserEntity; import com.glxp.api.entity.auth.InvBusUserEntity;
import com.glxp.api.entity.auth.InvWarehouseEntity;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity; import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.basic.EntrustReceEntity; import com.glxp.api.entity.basic.EntrustReceEntity;
import com.glxp.api.entity.inout.*; import com.glxp.api.entity.inout.*;
@ -24,6 +25,7 @@ import com.glxp.api.res.inout.IoOrderDetailBizResponse;
import com.glxp.api.res.inout.IoOrderResponse; import com.glxp.api.res.inout.IoOrderResponse;
import com.glxp.api.res.inout.PdaBusOrderResponse; import com.glxp.api.res.inout.PdaBusOrderResponse;
import com.glxp.api.service.auth.InvBusUserService; import com.glxp.api.service.auth.InvBusUserService;
import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.basic.EntrustReceService; import com.glxp.api.service.basic.EntrustReceService;
import com.glxp.api.service.basic.IBasicBussinessTypeService; import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.inout.*; import com.glxp.api.service.inout.*;
@ -472,23 +474,36 @@ public class IoOrderController extends BaseController {
@Resource @Resource
GennerOrderUtils gennerOrderUtils; GennerOrderUtils gennerOrderUtils;
@Resource
InvWarehouseService invWarehouseService;
@AuthRuleAnnotation("") @AuthRuleAnnotation("")
@PostMapping("/udiwms/stock/order/change") @PostMapping("/udiwms/stock/order/change")
public BaseResponse stockOrderChange(@RequestBody AddOrderChangeRequest addOrderChangeRequest) { public BaseResponse stockOrderChange(@RequestBody AddOrderChangeRequest addOrderChangeRequest) {
IoOrderEntity originOrder = orderService.findByBillNo(addOrderChangeRequest.getOrderId()); IoOrderEntity originOrder = orderService.findByBillNo(addOrderChangeRequest.getOrderId());
IoOrderEntity newOrder = new IoOrderEntity(); IoOrderEntity newOrder = new IoOrderEntity();
List<IoCodeEntity> originCodes = codeService.findByOrderId(originOrder.getBillNo()); List<IoCodeEntity> originCodes = codeService.findByOrderId(originOrder.getBillNo());
newOrder.setCreateTime(new Date()); newOrder.setCreateTime(new Date());
newOrder.setFromCorp(addOrderChangeRequest.getFromCorp()); newOrder.setFromCorp(addOrderChangeRequest.getFromCorp());
newOrder.setFromInvCode(addOrderChangeRequest.getFromInvCode()); newOrder.setFromInvCode(addOrderChangeRequest.getFromInvCode());
newOrder.setFromDeptCode(addOrderChangeRequest.getFromDeptCode()); if (addOrderChangeRequest.getFromInvCode() != null) {
InvWarehouseEntity fromInv = invWarehouseService.findByInvSubByCode(addOrderChangeRequest.getFromInvCode());
newOrder.setFromDeptCode(fromInv.getParentId());
}
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addOrderChangeRequest.getInvCode());
newOrder.setInvCode(addOrderChangeRequest.getInvCode()); newOrder.setInvCode(addOrderChangeRequest.getInvCode());
newOrder.setDeptCode(addOrderChangeRequest.getDeptCode()); newOrder.setDeptCode(invWarehouseEntity.getParentId());
newOrder.setCorpOrderId(CustomUtil.getId() + "x"); newOrder.setCorpOrderId(CustomUtil.getId() + "x");
newOrder.setMainAction(addOrderChangeRequest.getMainAction());
BasicBussinessTypeEntity basicBussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderChangeRequest.getAction());
newOrder.setAction(addOrderChangeRequest.getAction()); newOrder.setAction(addOrderChangeRequest.getAction());
newOrder.setMainAction(basicBussinessTypeEntity.getMainAction());
newOrder.setExportStatus(0); //设置导出状态为未导出 newOrder.setExportStatus(0); //设置导出状态为未导出
newOrder.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT);//设置单据未草稿状态 newOrder.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT);//设置单据未草稿状态
newOrder.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); //设置验收状态为未验收 newOrder.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); //设置验收状态为未验收

@ -8,82 +8,72 @@ import java.util.Map;
/*获取表相关信息*/ /*获取表相关信息*/
@Mapper @Mapper
public interface DbDao { public interface DbDao {
@Insert("${sql}") @Insert("${sql}")
int save(@Param("sql") String sql); int save(@Param("sql")String sql);
@Update("${sql}") @Update("${sql}")
int update(@Param("sql") String sql); int update(@Param("sql")String sql);
@Delete("${sql}") @Delete("${sql}")
int delete(@Param("sql") String sql); int delete(@Param("sql")String sql);
Map<String, Object> get(@Param("sql") String sql); Map<String,Object> get(@Param("sql")String sql);
List<Map<String,Object>> list(Map<String,Object> map);
List<Map<String, Object>> list(Map<String, Object> map); int count(Map<String,Object> map);
int count(Map<String, Object> map); @Select("select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables"
+ " where table_schema = (select database())")
@Select("select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables" List<Map<String, Object>> listMysql();
+ " where table_schema = (select database())")
List<Map<String, Object>> listMysql(); @Select("select tname as \"tableName\",'oracle' as \"engine\",tname as \"tableComment\",sysdate as \"createTime\" from tab where instr('BIN,ACT',substr(tname,1,3))<1")
List<Map<String, Object>> listOracle();
@Select("select tname as \"tableName\",'oracle' as \"engine\",tname as \"tableComment\",sysdate as \"createTime\" from tab where instr('BIN,ACT',substr(tname,1,3))<1")
List<Map<String, Object>> listOracle(); @Select("select name tableName, 'sqlserver' engine, name tableComment, crdate createTime from SYSOBJECTS"
+ " WHERE XTYPE='U' ORDER BY NAME")
@Select("select name tableName, 'sqlserver' engine, name tableComment, crdate createTime from SYSOBJECTS" List<Map<String, Object>> listSqlserver();
+ " WHERE XTYPE='U' ORDER BY NAME")
List<Map<String, Object>> listSqlserver(); @Select("select count(*) from information_schema.tables where table_schema = (select database())")
int countMysql(Map<String, Object> map);
@Select("select count(*) from information_schema.tables where table_schema = (select database())") @Select("select count(*) from tab where tabtype='TABLE' and instr('BIN,ACT',substr(tname,1,3))<1")
int countMysql(Map<String, Object> map); int countOracle(Map<String, Object> map);
@Select("select count(*) from SYSOBJECTS where XTYPE='U'")
@Select("select count(*) from tab where tabtype='TABLE' and instr('BIN,ACT',substr(tname,1,3))<1") int countSqlserver(Map<String, Object> map);
int countOracle(Map<String, Object> map); @Select("select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables \r\n"
+ " where table_schema = (select database()) and lower(table_name) = lower(#{tableName})")
@Select("select count(*) from SYSOBJECTS where XTYPE='U'") Map<String, String> getMysql(String tableName);
int countSqlserver(Map<String, Object> map); @Select("select tname as \"tableName\",'oracle' \"engine\",tname \"tableComment\",sysdate \"createTime\" from tab \r\n"
+ " where tname= upper(#{tableName})")
@Select("select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables \r\n" Map<String, String> getOracle(String tableName);
+ " where table_schema = (select database()) and lower(table_name) = lower(#{tableName})") @Select("select name tableName, 'sqlserver' engine, name tableComment, crdate createTime from SYSOBJECTS"
Map<String, String> getMysql(String tableName); + " WHERE lower(name)=lower(#{tableName})")
Map<String, String> getSqlserver(String tableName);
@Select("select tname as \"tableName\",'oracle' \"engine\",tname \"tableComment\",sysdate \"createTime\" from tab \r\n" @Select("select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra as extra,table_name tableName, "
+ " where tname= upper(#{tableName})") + "concat('(',if(NUMERIC_PRECISION>0,CONVERT(NUMERIC_PRECISION,CHAR),''),if(NUMERIC_SCALE>0,concat(',',CONVERT(NUMERIC_SCALE,CHAR)),''),if(CHARACTER_MAXIMUM_LENGTH>0,CONVERT(CHARACTER_MAXIMUM_LENGTH,CHAR),''),')') as width "
Map<String, String> getOracle(String tableName); + " from information_schema.columns\r\n"
+ " where lower(table_name) = lower(#{tableName}) and table_schema = (select database()) order by ordinal_position")
@Select("select name tableName, 'sqlserver' engine, name tableComment, crdate createTime from SYSOBJECTS" List<Map<String, String>> listColumnsMysql(String tableName);
+ " WHERE lower(name)=lower(#{tableName})") @Select("select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra as extra,table_name tableName, "
Map<String, String> getSqlserver(String tableName); + "concat('(',if(NUMERIC_PRECISION>0,CONVERT(NUMERIC_PRECISION,CHAR),''),if(NUMERIC_SCALE>0,concat(',',CONVERT(NUMERIC_SCALE,CHAR)),''),if(CHARACTER_MAXIMUM_LENGTH>0,CONVERT(CHARACTER_MAXIMUM_LENGTH,CHAR),''),')') as width "
+ " from information_schema.columns\r\n"
@Select("select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra as extra,table_name tableName, " + " where lower(table_name) = lower(#{tableName}) and column_key='PRI' and table_schema = (select database()) order by ordinal_position")
+ "concat('(',if(NUMERIC_PRECISION>0,CONVERT(NUMERIC_PRECISION,CHAR),''),if(NUMERIC_SCALE>0,concat(',',CONVERT(NUMERIC_SCALE,CHAR)),''),if(CHARACTER_MAXIMUM_LENGTH>0,CONVERT(CHARACTER_MAXIMUM_LENGTH,CHAR),''),')') as width " List<Map<String, String>> listKeyMysql(String tableName);
+ " from information_schema.columns\r\n" @Select("select cname as \"columnName\",coltype as \"dataType\",cname \"columnComment\",'' as \"columnKey\",'' as \"extra\",tname \"tableName\", "
+ " where lower(table_name) = lower(#{tableName}) and table_schema = (select database()) order by ordinal_position") +" '('||decode(sign(PRECISION),1,to_char(PRECISION),'')||decode(sign(SCALE),1,','||to_char(SCALE),'')||decode(sign(PRECISION),1,'',decode(sign(SCALE),1,'',to_char(width)))||')' as width "
List<Map<String, String>> listColumnsMysql(String tableName); + "from col \r\n"
+" where tname = upper(#{tableName}) order by colno")
@Select("select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra as extra,table_name tableName, " List<Map<String, String>> listColumnsOracle(String tableName);
+ "concat('(',if(NUMERIC_PRECISION>0,CONVERT(NUMERIC_PRECISION,CHAR),''),if(NUMERIC_SCALE>0,concat(',',CONVERT(NUMERIC_SCALE,CHAR)),''),if(CHARACTER_MAXIMUM_LENGTH>0,CONVERT(CHARACTER_MAXIMUM_LENGTH,CHAR),''),')') as width "
+ " from information_schema.columns\r\n" @Select("select syscolumns.name columnName, systypes.name as dataType, syscolumns.name columnComment, \r\n"
+ " where lower(table_name) = lower(#{tableName}) column_key='PRI' and table_schema = (select database()) order by ordinal_position") +"(select 'PRI' from sysindexkeys,sysobjects,sysindexes where sysindexkeys.id=syscolumns.id and sysindexkeys.colid=syscolumns.colid \r\n"
List<Map<String, String>> listKeyMysql(String tableName); +" and sysindexkeys.id=syscolumns.id and sysindexes.id=syscolumns.id and sysindexkeys.indid=sysindexes.indid and sysobjects.name=sysindexes.name and sysobjects.xtype='PK'"
+") columnKey,'' extra,#{tableName} tableName, "
@Select("select cname as \"columnName\",coltype as \"dataType\",cname \"columnComment\",'' as \"columnKey\",'' as \"extra\",tname \"tableName\", " +"'('+case when syscolumns.xprec>0 then cast(syscolumns.xprec as varchar) else '' end + case when syscolumns.xscale>0 then ','+cast(syscolumns.xscale as varchar) else '' end +case when syscolumns.xscale>0 or syscolumns.xprec>0 then '' else cast(syscolumns.length as varchar) end +')' as width "
+ " '('||decode(sign(PRECISION),1,to_char(PRECISION),'')||decode(sign(SCALE),1,','||to_char(SCALE),'')||decode(sign(PRECISION),1,'',decode(sign(SCALE),1,'',to_char(width)))||')' as width " + " from syscolumns,\r\n"
+ "from col \r\n" + " systypes"
+ " where tname = upper(#{tableName}) order by colno") + " where syscolumns.xtype=systypes.xtype and syscolumns.id = OBJECT_ID(#{tableName}) order by syscolumns.colid")
List<Map<String, String>> listColumnsOracle(String tableName); List<Map<String, String>> listColumnsSqlserver(String tableName);
@Select("select syscolumns.name columnName, systypes.name as dataType, syscolumns.name columnComment, \r\n"
+ "(select 'PRI' from sysindexkeys,sysobjects,sysindexes where sysindexkeys.id=syscolumns.id and sysindexkeys.colid=syscolumns.colid \r\n" @Select("select c.column_name as \"columnName\" from user_constraints con,user_cons_columns c where con.constraint_name=c.constraint_name and con.constraint_type='P' and c.table_name=upper(#{tableName})")
+ " and sysindexkeys.id=syscolumns.id and sysindexes.id=syscolumns.id and sysindexkeys.indid=sysindexes.indid and sysobjects.name=sysindexes.name and sysobjects.xtype='PK'" List<Map<String, String>> listKeyOracle(String tableName);
+ ") columnKey,'' extra,#{tableName} tableName, "
+ "'('+case when syscolumns.xprec>0 then cast(syscolumns.xprec as varchar) else '' end + case when syscolumns.xscale>0 then ','+cast(syscolumns.xscale as varchar) else '' end +case when syscolumns.xscale>0 or syscolumns.xprec>0 then '' else cast(syscolumns.length as varchar) end +')' as width "
+ " from syscolumns,\r\n"
+ " systypes"
+ " where syscolumns.xtype=systypes.xtype and syscolumns.id = OBJECT_ID(#{tableName}) order by syscolumns.colid")
List<Map<String, String>> listColumnsSqlserver(String tableName);
@Select("select c.column_name as \"columnName\" from user_constraints con,user_cons_columns c where con.constraint_name=c.constraint_name and con.constraint_type='P' and c.table_name=upper(#{tableName})")
List<Map<String, String>> listKeyOracle(String tableName);
} }

@ -16,55 +16,53 @@ import java.util.Map;
*/ */
@RestController @RestController
public class IdcController { public class IdcController {
@Resource @Resource
IdcService idcService; IdcService idcService;
@Resource @Resource
DbDao dbDao; DbDao dbDao;
/*通用上传接口*/
//@Log("中继服务数据接收,下级往上级上传")
@RequestMapping(value = "/spssync/common/upload")
public BaseResponse upload(HttpServletRequest request,
@RequestParam("content") String content,
@RequestParam(value = "files", required = false) MultipartFile[] files) {
//
return idcService.receive("U",request, content, files);
}
/*通用下发接口*/
//@Log("中继服务数据接收,上级往下级下发")
@RequestMapping(value = "/spssync/common/issued")
public BaseResponse issued(HttpServletRequest request,
@RequestParam("content") String content,
@RequestParam(value = "files", required = false) MultipartFile[] files) {
//
return idcService.receive("I",request, content, files);
}
/*通用上传接口*/ //@Log("数据同步测试")
// @Log("中继服务数据接收,下级往上级上传") @RequestMapping(value = "/spssync/common/test")
@RequestMapping(value = "/spssync/common/upload") public BaseResponse test(HttpServletRequest request,@RequestBody Map<String, Object> params) {
public BaseResponse upload(HttpServletRequest request, //
@RequestParam("content") String content, return idcService.send(params);
@RequestParam(value = "files", required = false) MultipartFile[] files) { }
//
return idcService.receive("U", request, content, files);
}
/*通用下发接口*/ //@Log("数据同步任务列表拉取")
// @Log("中继服务数据接收,上级往下级下发") @RequestMapping(value = "/spssync/common/list")
@RequestMapping(value = "/spssync/common/issued") public BaseResponse list(HttpServletRequest request,@RequestBody(required = false) Map<String, Object> params) {
public BaseResponse issued(HttpServletRequest request, return idcService.taskList(request,params);
@RequestParam("content") String content, }
@RequestParam(value = "files", required = false) MultipartFile[] files) {
//
return idcService.receive("I", request, content, files);
}
// @Log("数据同步测试") //@Log("数据同步任务根据任务ID下载数据")
@RequestMapping(value = "/spssync/common/test") @RequestMapping(value = "/spssync/common/download")
public BaseResponse test(HttpServletRequest request, @RequestBody Map<String, Object> params) { @ResponseBody
// public BaseResponse download(HttpServletRequest request,@RequestBody Map<String, Object> params) {
return idcService.send(params); return idcService.download(request,params);
} }
// @Log("数据同步任务列表拉取") //@Log("数据同步任务根据任务ID,返回下载成功标记")
@RequestMapping(value = "/spssync/common/list") @RequestMapping(value = "/spssync/common/success")
public BaseResponse list(HttpServletRequest request, @RequestBody(required = false) Map<String, Object> params) { @ResponseBody
return idcService.taskList(request, params); public BaseResponse success(HttpServletRequest request,@RequestBody Map<String, Object> params) {
} return idcService.downlaodSuccess(request,params);
}
// @Log("数据同步任务根据任务ID下载数据")
@RequestMapping(value = "/spssync/common/download")
@ResponseBody
public BaseResponse download(HttpServletRequest request, @RequestBody Map<String, Object> params) {
return idcService.download(request, params);
}
// @Log("数据同步任务根据任务ID,返回下载成功标记")
@RequestMapping(value = "/spssync/common/success")
@ResponseBody
public BaseResponse success(HttpServletRequest request, @RequestBody Map<String, Object> params) {
return idcService.downlaodSuccess(request, params);
}
} }

@ -22,9 +22,10 @@ public interface IdcService {
BaseResponse download(HttpServletRequest request, Map<String, Object> params); BaseResponse download(HttpServletRequest request, Map<String, Object> params);
void pull(); public void asyncFetchTask();
BaseResponse downlaodSuccess(HttpServletRequest request, Map<String, Object> params); BaseResponse downlaodSuccess(HttpServletRequest request, Map<String, Object> params);
public void asyncIdcTask(); public void asyncIdcTask();
} }

@ -53,8 +53,7 @@ public class IdcServiceImpl implements IdcService {
private String apiKey; private String apiKey;
@Value("${API_SECRET}") @Value("${API_SECRET}")
private String apiSecret; private String apiSecret;
// "sup_company/updateTime//配送供应商资质信息",
// "sup_company/updateTime//配送供应商资质信息",
/*自助平台->UDI*/ /*自助平台->UDI*/
private final String[] SPMS_TO_UDI_TABLES = { private final String[] SPMS_TO_UDI_TABLES = {
"basic_udirel/updateTime//耗材字典", "basic_products///耗材字典信息详情", "company_product_relevance/updateTime//供应商关联信息", "basic_udirel/updateTime//耗材字典", "basic_products///耗材字典信息详情", "company_product_relevance/updateTime//供应商关联信息",
@ -63,25 +62,19 @@ public class IdcServiceImpl implements IdcService {
"thr_inv_products/updateTime//第三方库存", "thr_inv_warehouse///第三方仓库", "thr_inv_products/updateTime//第三方库存", "thr_inv_warehouse///第三方仓库",
"thr_order/updateTime//第三方单据", "thr_order_detail/updateTime//第三方单据详情", "thr_order/updateTime//第三方单据", "thr_order_detail/updateTime//第三方单据详情",
"thr_products/updateTime//第三方产品信息", "sup_cert/updateTime/filePath/资质证书信息", "thr_products/updateTime//第三方产品信息", "sup_cert/updateTime/filePath/资质证书信息",
"sup_cert_set/updateTime//供应商资质证书设置", "sup_cert_set/updateTime//供应商资质证书设置", "sup_company/updateTime//配送供应商资质信息",
"sup_manufacturer/updateTime//生产企业资质信息", "sup_product/updateTime//产品资质信息"}; "sup_manufacturer/updateTime//生产企业资质信息", "sup_product/updateTime//产品资质信息"};
/*UDI->自助平台*/ /*UDI->自助平台*/
private final String[] UDI_TO_SPMS_TABLES = { private final String[] UDI_TO_SPMS_TABLES = {
"basic_udirel/updateTime//耗材字典", "basic_products///耗材字典信息详情", "company_product_relevance/updateTime//供应商关联信息", "basic_udirel/updateTime//耗材字典", "basic_products///耗材字典信息详情", "company_product_relevance/updateTime//供应商关联信息",
}; "basic_corp/updateTime//往来单位", "thr_bustype_origin/updateTime//第三方单据类型",
"thr_corp/updateTime//第三方往来单位", "thr_dept/updateTime//第三方部门",
"thr_inv_products/updateTime//第三方库存", "thr_inv_warehouse///第三方仓库",
/** "thr_order/updateTime//第三方单据", "thr_order_detail/updateTime//第三方单据详情",
* "basic_udirel/updateTime//耗材字典", "basic_products///耗材字典信息详情", "company_product_relevance/updateTime//供应商关联信息", "thr_products/updateTime//第三方产品信息", "sup_cert/updateTime/filePath/资质证书信息",
* "basic_corp/updateTime//往来单位", "thr_bustype_origin/updateTime//第三方单据类型", "sup_cert_set/updateTime//供应商资质证书设置", "sup_company/updateTime//配送供应商资质信息",
* "thr_corp/updateTime//第三方往来单位", "thr_dept/updateTime//第三方部门", "sup_manufacturer/updateTime//生产企业资质信息", "sup_product/updateTime//产品资质信息",
* "thr_inv_products/updateTime//第三方库存", "thr_inv_warehouse///第三方仓库", "productinfo/updateTime//国家库UDI数据,udicompany/updateTime//国际库医疗器械注册人信息"};
* "thr_order/updateTime//第三方单据", "thr_order_detail/updateTime//第三方单据详情",
* "thr_products/updateTime//第三方产品信息", "sup_cert/updateTime/filePath/资质证书信息",
* "sup_cert_set/updateTime//供应商资质证书设置",
* "sup_manufacturer/updateTime//生产企业资质信息", "sup_product/updateTime//产品资质信息",
* "productinfo/updateTime//国家库UDI数据,udicompany/updateTime//国际库医疗器械注册人信息"};
*/
private int orderNum = 0; private int orderNum = 0;
@ -116,18 +109,27 @@ public class IdcServiceImpl implements IdcService {
} }
/*拉取前一级中继服务数据*/ /*拉取前一级中继服务数据*/
@Async
@Override @Override
public void pull() { public void asyncFetchTask() {
Map<String, Object> query = new HashMap<String, Object>(); String[] directions = {"I", "U"};
String result = post(getNextHost("U") + "/spssync/common/list", query); for (String dir : directions) {
JSONObject json = JSON.parseObject(result); Map<String, Object> query = new HashMap<String, Object>();
if (json.getInteger("code") == 20000 && json.getString("data") != null) { String host = getNextHost(dir);
List<Map> list = JSON.parseArray(json.getString("data"), Map.class); if (!StringUtils.isEmpty(host)) {
if (list != null) { String result = post(host + "/spssync/common/list", query);
for (Map map : list) { if (IDCUtils.isJson(result)) {
Map<String, Object> params = new HashMap<String, Object>(); JSONObject json = JSON.parseObject(result);
params.put("taskId", map.get("taskId")); if (json != null && json.getInteger("code") == 20000 && json.getString("data") != null) {
pullData(getNextHost("U") + "/spssync/common/list", params); List<Map> list = JSON.parseArray(json.getString("data"), Map.class);
if (list != null) {
for (Map map : list) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("taskId", map.get("taskId"));
fetchData(host + "/spssync/common/list", params);
}
}
}
} }
} }
} }
@ -142,14 +144,14 @@ public class IdcServiceImpl implements IdcService {
if (direction.equals("I")) { if (direction.equals("I")) {
tNames = SPMS_TO_UDI_TABLES; tNames = SPMS_TO_UDI_TABLES;
} else { } else if (direction.equals("U")) {
tNames = UDI_TO_SPMS_TABLES; tNames = UDI_TO_SPMS_TABLES;
} }
/*为顶级或末级,以及下游或上游连通,可执行*/ /*为顶级或末级,以及下游或上游连通,可执行*/
Boolean isLastLevel = isLastLevel(direction); Boolean isLastLevel = isLastLevel(direction);
Boolean isRelay = isRelay(direction); Boolean isRelay = isRelay(direction);
logger.info("-----数据传输任务开始----" + direction + "\n"); logger.info("-----数据传输任务开始----" + direction + "\n");
logger.info("-----是否顶级或末级服务:" + isLastLevel + ",是否转发数据:" + isRelay + "----\n"); logger.info("-----是否需要上传或下发数据:" + isLastLevel + ",是否已配置接收地址:" + isRelay + "----\n");
if (isLastLevel && isRelay) { if (isLastLevel && isRelay) {
for (String t : tNames) { for (String t : tNames) {
uploadData(t); uploadData(t);
@ -158,18 +160,22 @@ public class IdcServiceImpl implements IdcService {
} }
private void uploadData(String t) { private void uploadData(String t) {
String[] tn = t.split("/"); String[] tn = t.split("/");
String lastUpdateTime = getUpdateTime(tn[0]); String lastUpdateTime = getUpdateTime(tn[0]);
Date nowUpdateTime = new Date(); Date nowUpdateTime = new Date();
List<Map<String, String>> keyList = dbDao.listKeyMysql(tn[0]);
String keyColumn = keyList != null && keyList.size() > 0 ? keyList.get(0).get("columnName").toString() : "id";
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
String sqlWhere = "not exists (select fkId from idc_record where fkId=" + tn[0] + ".id)"; String sqlWhere = "not exists (select fkId from idc_record where type='" + tn[0] + "' and fkId=" + tn[0] + "." + keyColumn + ")";
if (!StringUtils.isEmpty(tn[1])) { if (!StringUtils.isEmpty(tn[1])) {
sqlWhere += " and " + tn[1] + ">=cast('" + lastUpdateTime + "' as datetime)"; sqlWhere += " and " + tn[1] + ">=cast('" + lastUpdateTime + "' as datetime)";
// sqlWhere += " and ifnull(" + tn[1] + ",now())>=cast('" + lastUpdateTime + "' as datetime)";
} else { } else {
map.put("isEnd", "1"); map.put("isEnd", "1");
} }
if (tn[0].equals("thr_order"))
logger.info("-------------------" + sqlWhere);
map.put("sqlWhere", sqlWhere); map.put("sqlWhere", sqlWhere);
map.put("tableName", tn[0]); map.put("tableName", tn[0]);
map.put("filePathColumn", tn[2]); map.put("filePathColumn", tn[2]);
@ -185,15 +191,15 @@ public class IdcServiceImpl implements IdcService {
Date nextTimePoint = cronSequenceGenerator.next(DateUtil.parseDate(lastUpdateTime)); Date nextTimePoint = cronSequenceGenerator.next(DateUtil.parseDate(lastUpdateTime));
send = nextTimePoint.before(nowUpdateTime); send = nextTimePoint.before(nowUpdateTime);
} }
//if(send) { if (send) {
BaseResponse result = send(map); BaseResponse result = send(map);
if (result.getCode() == 20000) { if (result.getCode() == 20000) {
setUpdateTime(tn[0], DateUtil.formatDate(nowUpdateTime)); setUpdateTime(tn[0], DateUtil.formatDate(nowUpdateTime, "yyyy-MM-dd HH:mm:ss"));
}
} }
//}
} }
private String pullData(String url, Map<String, Object> params) { private String fetchData(String url, Map<String, Object> params) {
OkHttpClient client = new OkHttpClient().newBuilder() OkHttpClient client = new OkHttpClient().newBuilder()
.build(); .build();
MediaType mediaType = MediaType.parse("application/json"); MediaType mediaType = MediaType.parse("application/json");
@ -300,13 +306,20 @@ public class IdcServiceImpl implements IdcService {
/*数据同步,从数据库获取数据下发或上传下级中继服务*/ /*数据同步,从数据库获取数据下发或上传下级中继服务*/
@Override @Override
public BaseResponse send(Map<String, Object> params) { public BaseResponse send(Map<String, Object> params) {
return send(params.get("messageType").toString(), params.get("tableName").toString(), params); return send(params.get("messageType").toString(), params.get("tableName").toString(), params);
} }
@Override @Override
public BaseResponse send(String messageType, String tableName, Map<String, Object> params) { public BaseResponse send(String messageType, String tableName, Map<String, Object> params) {
if (sendOnPage(messageType, tableName, params)) try {
return ResultVOUtils.success(); if (sendOnPage(messageType, tableName, params))
return ResultVOUtils.success();
} catch (Exception ex) {
logger.error(ex.getMessage());
}
return ResultVOUtils.error(9999, ""); return ResultVOUtils.error(9999, "");
} }
@ -356,7 +369,7 @@ public class IdcServiceImpl implements IdcService {
} }
private boolean sendOnPage(String messageType, String tableName, Map<String, Object> params) { private boolean sendOnPage(String messageType, String tableName, Map<String, Object> params) {
boolean success = true; boolean success = false;
Map<String, String> table = dbDao.getMysql(tableName); Map<String, String> table = dbDao.getMysql(tableName);
if (!(table != null && table.get("tableName") != null)) if (!(table != null && table.get("tableName") != null))
return false; return false;
@ -376,9 +389,14 @@ public class IdcServiceImpl implements IdcService {
String filePathColumn = params.get("filePathColumn") != null ? params.get("filePathColumn").toString() : ""; String filePathColumn = params.get("filePathColumn") != null ? params.get("filePathColumn").toString() : "";
orderNum++; orderNum++;
saveIdcLog(messageType, "", tableName + ">" + where, 0, total); saveIdcLog(messageType, "", tableName + ">" + where, 0, total);
if (tableName.equals("thr_order"))
logger.info("tableName-->" + tableName + "-->row-->" + total + "-->sqlWhere-->" + where);
if (total > 0) { if (total > 0) {
success = true;
params.put("page", 0); params.put("page", 0);
params.put("limit", limit); params.put("limit", limit);
List<Map<String, String>> keyList = dbDao.listKeyMysql(tableName);
String keyColumn = keyList != null && keyList.size() > 0 ? keyList.get(0).get("columnName").toString() : "id";
for (int i = 0; i < Math.ceil(total / limit) + 1; i++) { for (int i = 0; i < Math.ceil(total / limit) + 1; i++) {
params.replace("page", i * limit); params.replace("page", i * limit);
params.replace("limit", limit); params.replace("limit", limit);
@ -395,7 +413,7 @@ public class IdcServiceImpl implements IdcService {
files[m] = list.get(m).get(filePathColumn).toString(); files[m] = list.get(m).get(filePathColumn).toString();
} }
recordSql += !StringUtils.isEmpty(recordSql) ? "," : ""; recordSql += !StringUtils.isEmpty(recordSql) ? "," : "";
recordSql += "('" + UUID.randomUUID().toString().replaceAll("-", "") + "','" + tableName + "','" + list.get(m).get("id") + "','" + isEnd + "',now())"; recordSql += "('" + UUID.randomUUID().toString().replaceAll("-", "") + "','" + tableName + "','" + list.get(m).get(keyColumn) + "','" + isEnd + "',now())";
} }
orderNum++; orderNum++;
@ -417,6 +435,7 @@ public class IdcServiceImpl implements IdcService {
} }
} }
} }
} }
return success; return success;
} }
@ -485,6 +504,7 @@ public class IdcServiceImpl implements IdcService {
String extra = columnList.get(k).get("extra") != null && columnList.get(k).get("extra").toLowerCase().contains("auto") ? "A" : "N"; String extra = columnList.get(k).get("extra") != null && columnList.get(k).get("extra").toLowerCase().contains("auto") ? "A" : "N";
String attrName = columnList.get(k).get("attrName"); String attrName = columnList.get(k).get("attrName");
String value = list.get(i).get(attrName) != null ? list.get(i).get(attrName).toString() : ""; String value = list.get(i).get(attrName) != null ? list.get(i).get(attrName).toString() : "";
value = DBAUtils.escape(value);
String dataType = columnList.get(k).get("dataType").toLowerCase().contains("char") || columnList.get(k).get("dataType").toLowerCase().contains("text") ? String dataType = columnList.get(k).get("dataType").toLowerCase().contains("char") || columnList.get(k).get("dataType").toLowerCase().contains("text") ?
"C" : columnList.get(k).get("dataType").toLowerCase().contains("date") ? "D" : "N"; "C" : columnList.get(k).get("dataType").toLowerCase().contains("date") ? "D" : "N";
if (extra.equals("N")) { if (extra.equals("N")) {
@ -583,44 +603,30 @@ public class IdcServiceImpl implements IdcService {
/*获取转发服务地址当前值允许单向只使用参数upper_server_ip*/ /*获取转发服务地址当前值允许单向只使用参数upper_server_ip*/
private String getNextHost(String direction) { private String getNextHost(String direction) {
SystemParamConfigEntity systemParamConfigEntity = getSystemParamConfig("upper_server_ip", "中继上传服务地址", "", ""); SystemParamConfigEntity systemParamConfigEntity =
//direction.equals("U") ? getSystemParamConfig("upper_server_ip","中继上传服务地址" , "",""): direction.equals("U") ? getSystemParamConfig("upper_server_host", "自助平台数据接收服务地址", "", "接收由UDI系统上传的数据") :
//getSystemParamConfig("sync_idc_lower_host","下级(下发)中继服务地址" , "","") ; direction.equals("I") ? getSystemParamConfig("lower_server_host", "UDI系统数据接收服务地址", "", "接收由自助平台下发的数据") : null;
return systemParamConfigEntity.getParamValue(); String host = systemParamConfigEntity != null ? systemParamConfigEntity.getParamValue() : "";
host = !StringUtils.isEmpty(host) && host.substring(host.length() - 1).equals("/") ? host.substring(0, host.length() - 1) : host;
return host;
} }
/*判断是否最后一级*/ /*判断是否上传或下发数据*/
private boolean isLastLevel(String direction) { private boolean isLastLevel(String direction) {
SystemParamConfigEntity systemParamConfigEntity = return direction.equals("I") || direction.equals("U") ? true : false;
direction.equals("I") ? getSystemParamConfig("sync_idc_top", "是否顶级中继服务(连接自助平台)", "0", "01是(是,接收下级上传数据后解析入库)") :
getSystemParamConfig("sync_idc_final", "是否末级中继服务(连接UDI管理系统)", "0", "01是(是,接收上级下发数据后解析入库)");
return systemParamConfigEntity.getParamValue().equals("0") ? false : true;
} }
/*检查当前系统为自助平台下发还是UDI系统(上传),返回传输方向,如果都未设置,默认返回下发*/ /*检查当前系统为自助平台下发还是UDI系统(上传),返回传输方向,如果都未设置,默认返回下发*/
private String getDirection() { private String getDirection() {
SystemParamConfigEntity systemParamConfigEntity = getSystemParamConfig("sync_idc_top", "是否顶级中继服务(连接自助平台)", "0", "01是(是,接收下级上传数据后解析入库)"); SystemParamConfigEntity systemParamConfigEntity = getSystemParamConfig("sync_system_type", "系统类型", "IDC", "UDI(UDI管理系统由UDI系统往自助平台上传数据),SPS(自助平台由自助平台往UDI系统下发数据),IDC(中继服务,只接收,转发或暂存数据供下一级服务拉取数据)");
System.out.print(">>>>>>>>>>" + JSON.toJSONString(systemParamConfigEntity) + "\n"); return systemParamConfigEntity.getParamValue().equals("UDI") ? "U" : systemParamConfigEntity.getParamValue().equals("SPS") ? "I" : "N";
if (systemParamConfigEntity.getParamValue().equals("0")) {
systemParamConfigEntity = getSystemParamConfig("sync_idc_final", "是否末级中继服务(连接UDI管理系统)", "0", "01是(是,接收上级下发数据后解析入库)");
if (systemParamConfigEntity.getParamValue().equals("1"))
return "U";
}
return "I";
} }
/*是否需要转发*/ /*是否需要转发*/
private boolean isRelay(String direction) { private boolean isRelay(String direction) {
String relayStr = direction.equals("U") ? "sync_upstream_enable" : "sync_downstream_enable"; String relayHost = getNextHost(direction);
SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey(relayStr); return !StringUtils.isEmpty(relayHost);
if (systemParamConfigEntity != null && systemParamConfigEntity.getParamValue() != null &&
systemParamConfigEntity.getParamValue().equals("0")) {
return false;
}
return true;
} }
@ -715,7 +721,7 @@ public class IdcServiceImpl implements IdcService {
String updateTime = ""; String updateTime = "";
Map<String, Object> map = dbDao.get("select * from idc_status where id='" + id + "'"); Map<String, Object> map = dbDao.get("select * from idc_status where id='" + id + "'");
if (map != null && map.get("id") != null) { if (map != null && map.get("id") != null) {
updateTime = DateUtil.formatDate(IDCUtils.parseDate(map.get("statusTime").toString())); updateTime = DateUtil.formatDate(IDCUtils.parseDate(map.get("statusTime").toString()), "yyyy-MM-dd HH:mm:ss");
} else { } else {
updateTime = "2000-01-01 00:00:00"; updateTime = "2000-01-01 00:00:00";
String sql = "insert into idc_status (id,statusTime) values ('" + id + "',cast('" + updateTime + "' as datetime))"; String sql = "insert into idc_status (id,statusTime) values ('" + id + "',cast('" + updateTime + "' as datetime))";

@ -0,0 +1,53 @@
package com.glxp.api.idc.thread;
import com.glxp.api.dao.schedule.ScheduledDao;
import com.glxp.api.entity.system.ScheduledEntity;
import com.glxp.api.idc.service.IdcService;
import com.glxp.api.req.system.ScheduledRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@EnableScheduling
public class AsyncFetchTask implements SchedulingConfigurer {
final Logger logger = LoggerFactory.getLogger(AsyncIdcTask.class);
@Resource
private ScheduledDao scheduledDao;
@Resource
private IdcService idcService;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(() -> process(),
triggerContext -> {
ScheduledRequest scheduledRequest = new ScheduledRequest();
scheduledRequest.setCronName("syncFetch");
logger.info("syncFetch----------------");
ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest);
String cron = scheduledEntity != null ? scheduledEntity.getCron() : "15 * * * * ?";
if (cron.isEmpty()) {
logger.error("cron is null");
}
logger.info("syncFetch----------------");
return new CronTrigger(cron).nextExecutionTime(triggerContext);
});
}
private void process() {
logger.info("syncFetch----process------------");
idcService.asyncFetchTask();
}
}

@ -34,7 +34,7 @@ public class AsyncIdcTask implements SchedulingConfigurer {
scheduledRequest.setCronName("syncIdc"); scheduledRequest.setCronName("syncIdc");
logger.info("syncIdc----------------"); logger.info("syncIdc----------------");
ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest);
String cron = scheduledEntity != null ? scheduledEntity.getCron() : "0 */5 * * * ?"; String cron = scheduledEntity != null ? scheduledEntity.getCron() : "0 */30 * * * ?";
if (cron.isEmpty()) { if (cron.isEmpty()) {
logger.error("cron is null"); logger.error("cron is null");

@ -390,8 +390,8 @@ public class DBAUtils {
public static String escape(String str) { public static String escape(String str) {
String value = str; String value = str;
if (value != null && value.contains("'")) { if (value != null && value.contains("'")) {
value = value.replaceAll("'", "AAA12345ZZZ"); value = value.replaceAll("'", "CCCBBBAAA12345ZZZYYYXXX");
value = value.replaceAll("AAA12345ZZZ", "''"); value = value.replaceAll("CCCBBBAAA12345ZZZYYYXXX", "''");
} }
return value; return value;
} }

@ -4,9 +4,9 @@ server:
spring: spring:
datasource: datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver driver-class-name: com.p6spy.engine.spy.P6SpyDriver
jdbc-url: jdbc:p6spy:mysql://miradio.51vip.biz:3364/udi_wms_wmd?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true jdbc-url: jdbc:p6spy:mysql://127.0.0.1:3306/udi_wms?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: Glxp@6066 password: 123456
hikari: hikari:
connection-timeout: 60000 connection-timeout: 60000
maximum-pool-size: 20 maximum-pool-size: 20

@ -3,7 +3,7 @@ server:
spring: spring:
datasource: datasource:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.0.66:3364/udi_wms_glxp?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true jdbc-url: jdbc:mysql://192.168.0.66:3364/udi_wms_wmd?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: Glxp@6066 password: Glxp@6066
hikari: hikari:

Loading…
Cancel
Save