diff --git a/api-admin/src/main/java/com/glxp/api/admin/dao/info/PlatformDao.java b/api-admin/src/main/java/com/glxp/api/admin/dao/info/PlatformDao.java new file mode 100644 index 00000000..2060ff32 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/dao/info/PlatformDao.java @@ -0,0 +1,31 @@ +package com.glxp.api.admin.dao.info; + +import com.glxp.api.admin.entity.info.PlatformEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface PlatformDao{ + + int batchSave(List list); + + List list( Map map); + + int count(Map map); + + PlatformEntity get(String id); + + /** + * 根据名称和访问地址查询平台信息 + * + * @param name + * @param host + * @return + */ + List selectByNameAndHost(@Param("name") String name, @Param("host") String host); + + PlatformEntity selectById(@Param("platformId") String platformId); +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/dao/inout/UnitMaintainPlatformDao.java b/api-admin/src/main/java/com/glxp/api/admin/dao/inout/UnitMaintainPlatformDao.java new file mode 100644 index 00000000..48265f1d --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/dao/inout/UnitMaintainPlatformDao.java @@ -0,0 +1,39 @@ +package com.glxp.api.admin.dao.inout; + +import com.glxp.api.admin.entity.inout.UnitMaintainPlatformEntity; +import com.glxp.api.admin.req.inout.PlatformLinkRequest; +import com.glxp.api.admin.res.info.PlatformLinkResponse; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface UnitMaintainPlatformDao{ + + /** + * 查询医院客户列表 + * + * @param page + * @param customerId + * @param key + * @return + */ + List getLinkPlatformList(@Param("customerId") String customerId, @Param("key") String key); + + /** + * 根据客户ID查询关联数据 + * + * @param customerId + * @return + */ + List selectByCustomerId(@Param("customerId") Long customerId); + + void updateById(UnitMaintainPlatformEntity maintainPlatform); + + void insert(UnitMaintainPlatformEntity unitMaintainPlatformEntity); + + List selectList(PlatformLinkRequest platformLinkRequest); + + UnitMaintainPlatformEntity findLinkData(@Param("customerId") long customerId, @Param("action") String action, @Param("unitId") String unitId); +} \ No newline at end of file diff --git a/api-admin/src/main/java/com/glxp/api/admin/entity/info/PlatformEntity.java b/api-admin/src/main/java/com/glxp/api/admin/entity/info/PlatformEntity.java new file mode 100644 index 00000000..9761f8df --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/entity/info/PlatformEntity.java @@ -0,0 +1,20 @@ +package com.glxp.api.admin.entity.info; + +import lombok.Data; + +@Data +public class PlatformEntity { + + private String id; + + /** + * 平台名称 + */ + private String name; + + /** + * 平台地址 + */ + private String host; + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/entity/inout/UnitMaintainPlatformEntity.java b/api-admin/src/main/java/com/glxp/api/admin/entity/inout/UnitMaintainPlatformEntity.java new file mode 100644 index 00000000..f8bcf925 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/entity/inout/UnitMaintainPlatformEntity.java @@ -0,0 +1,63 @@ +package com.glxp.api.admin.entity.inout; + +import lombok.Data; + +/** + * 医院客户表 + */ +@Data +public class UnitMaintainPlatformEntity { + + private Integer id; + + /** + * 往来单位ID + */ + private String unitId; + + /** + * 客户ID + */ + private Long customerId; + + /** + * 平台ID + */ + private String platformId; + + /** + * 源单据类型 + */ + private String sourceAction; + + /** + * 目标单据类型 + */ + private String targetAction; + + /** + * 仓库码 + */ + private String invCode; + + /** + * 分库码 + */ + private String invSubCode; + + /** + * 应用名称 + */ + private String appid; + + /** + * 秘钥 + */ + private String secretKey; + + /** + * 应用ID + */ + private String apiKey; + +} \ No newline at end of file diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/info/PlatformUserInfoRequest.java b/api-admin/src/main/java/com/glxp/api/admin/req/info/PlatformUserInfoRequest.java new file mode 100644 index 00000000..5f263538 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/req/info/PlatformUserInfoRequest.java @@ -0,0 +1,27 @@ +package com.glxp.api.admin.req.info; + +import lombok.Data; + +/** + * 关联医院客户表单用户信息参数 + */ +@Data +public class PlatformUserInfoRequest { + + /** + * 自助平台地址 + */ + private String platformId; + + /** + * 用户名 + */ + private String username; + + /** + * 密码 + */ + private String password; + + +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/inout/PlatformLinkRequest.java b/api-admin/src/main/java/com/glxp/api/admin/req/inout/PlatformLinkRequest.java new file mode 100644 index 00000000..0f776867 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/req/inout/PlatformLinkRequest.java @@ -0,0 +1,41 @@ +package com.glxp.api.admin.req.inout; + +import com.glxp.api.admin.req.ListPageRequest; +import lombok.Data; + +/** + * 医院客户请求参数 + */ +@Data +public class PlatformLinkRequest extends ListPageRequest { + + private Integer id; + + private String unitId; + + private String corpName; + + private String platformId; + + private String platformUsername; + + private String platformPassword; + + private String appid; + + private String apiKey; + + private String secretKey; + + private String sourceAction; + + private String targetAction; + + private String invCode; + + private String invSubCode; + + private String key; + + private String customerId; +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/res/info/PlatformLinkResponse.java b/api-admin/src/main/java/com/glxp/api/admin/res/info/PlatformLinkResponse.java new file mode 100644 index 00000000..e52f246f --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/res/info/PlatformLinkResponse.java @@ -0,0 +1,32 @@ +package com.glxp.api.admin.res.info; + +import lombok.Data; + +/** + * 往来单位关联自助平台数据实体类 + */ +@Data +public class PlatformLinkResponse { + + //往来单位ID + private Integer id; + //往来单位编码 + private String unitId; + //往来单位名称 + private String corpName; + //往来单位类型 + private Integer corpType; + //拼音码 + private String pinyinCode; + //自助平台名称 + private String platformName; + //自助平台ID + private String platformId; + //本地单据类型 + private String sourceAction; + //目标单据类型 + private String targetAction; + + private String invCode; + private String invSubCode; +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/info/PlatformService.java b/api-admin/src/main/java/com/glxp/api/admin/service/info/PlatformService.java new file mode 100644 index 00000000..169562e0 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/service/info/PlatformService.java @@ -0,0 +1,5 @@ +package com.glxp.api.admin.service.info; + + +public interface PlatformService { +} diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/info/impl/PlatformServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/info/impl/PlatformServiceImpl.java new file mode 100644 index 00000000..732cd328 --- /dev/null +++ b/api-admin/src/main/java/com/glxp/api/admin/service/info/impl/PlatformServiceImpl.java @@ -0,0 +1,284 @@ +package com.glxp.api.admin.service.info.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.glxp.api.admin.dao.info.PlatformDao; +import com.glxp.api.admin.dao.inout.UnitMaintainPlatformDao; +import com.glxp.api.admin.entity.info.PlatformEntity; +import com.glxp.api.admin.entity.inout.UnitMaintainPlatformEntity; +import com.glxp.api.admin.req.inout.PlatformLinkRequest; +import com.glxp.api.admin.res.info.PlatformLinkResponse; +import com.glxp.api.admin.service.info.PlatformService; +import com.glxp.api.admin.util.HttpClient; +import com.glxp.api.common.enums.ResultEnum; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class PlatformServiceImpl implements PlatformService { + + @Resource + private PlatformDao platformDao; + @Resource + private UnitMaintainPlatformDao unitMaintainPlatformDao; + + public int save(PlatformEntity platformEntity) { + if (StringUtils.isEmpty(platformEntity.getId())) { + platformEntity.setId(String.valueOf(IdUtil.getSnowflakeNextId())); + } + return platformDao.insert(platformEntity); + } + + public int remove(String id) { + return platformDao.deleteById(id); + } + + public BaseResponse update(PlatformEntity platformEntity) { + if (StrUtil.isBlank(platformEntity.getId())) { + if (!verifyPlatformExist(platformEntity)) { + save(platformEntity); + return ResultVOUtils.success("添加成功"); + } else { + return ResultVOUtils.error(500, "已存在相同数据"); + } + } + platformDao.updateById(platformEntity); + return ResultVOUtils.success("更新成功"); + } + + private boolean verifyPlatformExist(PlatformEntity platformEntity) { + //校验名称和地址是否重复 + List list = platformDao.selectByNameAndHost(platformEntity.getName(), platformEntity.getHost()); + if (CollUtil.isEmpty(list)) { + return false; + } + return true; + } + + public IPage list(Map map) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(String.valueOf(map.get("id"))) && !"null".equals(String.valueOf(map.get("id"))), "id", map.get("id")) + .like(StrUtil.isNotBlank(String.valueOf(map.get("name"))) && !"null".equals(String.valueOf(map.get("name"))), "name", map.get("name")) + .like(StrUtil.isNotBlank(String.valueOf(map.get("host"))) && !"null".equals(String.valueOf(map.get("host"))), "host", map.get("host")); + + if (map.get("page") != null && map.get("limit") != null) { + Integer page = Integer.valueOf(map.get("page").toString()); + Integer limit = Integer.valueOf(map.get("limit").toString()); + IPage pageParam = new Page<>(page, limit); + return platformDao.selectPage(pageParam, wrapper); + } else { + List list = platformDao.selectList(wrapper); + IPage pageResult = new Page<>(); + pageResult.setTotal(list.size()); + pageResult.setRecords(list); + return pageResult; + } + } + + public int count(Map map) { + return platformDao.count(map); + } + + public PlatformEntity get(String id) { + return platformDao.get(id); + } + + /** + * 查询往来单位和自助平台关联数据 + * + * @param platformLinkRequest + * @return + */ + public IPage getLinkPlatformList(PlatformLinkRequest platformLinkRequest) { + if (null == platformLinkRequest) { + return new Page<>(); + } + IPage page = new Page<>(platformLinkRequest.getPage(), platformLinkRequest.getLimit()); + return UnitMaintainPlatformEntityDao.getLinkPlatformList(page, platformLinkRequest.getCustomerId(), platformLinkRequest.getKey()); + } + + /** + * 往来单位和自助平台解绑 + * + * @param id + */ + public void unbindPlatform(String id) { + UnitMaintainPlatformEntityDao.deleteById(id); + } + + /** + * 获取自助平台单据类型 + * + * @param platformId + * @return + */ + public BaseResponse getTargetActions(String platformId, String invSubCode) { + PlatformEntity platformEntity = platformDao.get(platformId); + if (null == platformEntity) { + return ResultVOUtils.success(); + } + String host = platformEntity.getHost(); + Map paramMap = new HashMap<>(); + paramMap.put("invSubCode", invSubCode); + String resp = HttpClient.mipsGet(host + "/apiwms/bussinessType/apimsFilter", paramMap); + if (StrUtil.isNotBlank(resp) && resp.contains("20000")) { + return JSON.parseObject(resp, BaseResponse.class); + } else { + log.error("获取自助平台单据类型异常"); + return ResultVOUtils.error(500, "获取自助平台接口异常"); + } + } + + + //获取自助平台一级仓库 + public BaseResponse getTargetInv(String platformId) { + PlatformEntity platformEntity = platformDao.get(platformId); + if (null == platformEntity) { + return ResultVOUtils.success(); + } + String host = platformEntity.getHost(); + String url = host + "/spms/inv/warehouse/filterInv/forapims"; + log.info("拉取自助平台仓库数据:" + url); + String resp = HttpUtil.get(url); + log.info("拉取结果:" + resp); + if (StrUtil.isNotBlank(resp) && resp.contains("20000")) { + try { + return JSON.parseObject(resp, BaseResponse.class); + } catch (Exception e) { + log.error("格式化自助平台仓库信息异常", e); + return ResultVOUtils.error(500, "调用自助平台接口异常"); + } + } else { + log.error("获取自助平台仓库失败"); + return ResultVOUtils.error(500, "调用自助平台接口异常"); + } + } + + + //获取自助平台一级仓库所属分库 + public BaseResponse getTargetSubInv(String platformId, String invCode) { + PlatformEntity platformEntity = platformDao.get(platformId); + if (null == platformEntity) { + return ResultVOUtils.success(); + } + String host = platformEntity.getHost(); + Map paramMap = new HashMap<>(); + paramMap.put("invCode", invCode); + String resp = HttpClient.mipsGet(host + "/spms/sub/inv/warehouse/getSubInvForapims", paramMap); + if (StrUtil.isNotBlank(resp) && resp.contains("20000")) { + return JSON.parseObject(resp, BaseResponse.class); + } else { + log.error("获取自助平台分库失败"); + return ResultVOUtils.error(500, "获取自助平台接口异常"); + } + } + + /** + * 测试自助平台连通性 + * + * @param host + * @return + */ + public BaseResponse testPlatformConnection(String host) { + String testUrl = host + "/apiwms/auth/device/connect"; + String response = HttpUtil.get(testUrl); + if (StrUtil.isNotBlank(response)) { + try { + BaseResponse result = JSONUtil.toBean(response, BaseResponse.class); + if (result.getCode() == 20000) { + return ResultVOUtils.success(); + } + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } catch (Exception e) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + } else { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + } + + /** + * 根据ID查询自助平台信息 + * + * @param platformId + * @return + */ + public PlatformEntity getPlatformById(String platformId) { + return platformDao.selectById(platformId); + } + + /** + * 保存医院客户关联关系 + * + * @param UnitMaintainPlatformEntity + */ + public void saveUnitPlatform(UnitMaintainPlatformEntity UnitMaintainPlatformEntity) { + if (null != UnitMaintainPlatformEntity.getId()) { + unitMaintainPlatformDao.updateById(UnitMaintainPlatformEntity); + } else { + unitMaintainPlatformDao.insert(UnitMaintainPlatformEntity); + } + + //更新当前客户关联数据的所有key + List list = unitMaintainPlatformDao.selectByCustomerId(UnitMaintainPlatformEntity.getCustomerId()); + if (CollUtil.isNotEmpty(list)) { + for (UnitMaintainPlatformEntity maintainPlatform : list) { + maintainPlatform.setAppid(UnitMaintainPlatformEntity.getAppid()); + maintainPlatform.setApiKey(UnitMaintainPlatformEntity.getApiKey()); + maintainPlatform.setSecretKey(UnitMaintainPlatformEntity.getSecretKey()); + unitMaintainPlatformDao.updateById(maintainPlatform); + } + } + + } + + /** + * 校验关联数据 + * + * @param platformLinkRequest + * @return + */ + public String verifyUnitMaintainPlatformEntity(PlatformLinkRequest platformLinkRequest) { + List list = unitMaintainPlatformDao.selectList(platformLinkRequest); + if (CollUtil.isEmpty(list)) { + return "success"; + } else { + for (UnitMaintainPlatformEntity maintainPlatform : list) { + if (maintainPlatform.getId().equals(platformLinkRequest.getId())) { + return "success"; + } else { + return "重复添加"; + } + } + } + return "重复添加"; + } + + /** + * 查询关联数据 + * + * @param customerId + * @param action + * @param unitId + * @return + */ + public UnitMaintainPlatformEntity findLinkData(long customerId, String action, String unitId) { + return unitMaintainPlatformDao.findLinkData(customerId, action, unitId); + } + +} diff --git a/api-admin/src/main/resources/mybatis/mapper/info/PlatformDao.xml b/api-admin/src/main/resources/mybatis/mapper/info/PlatformDao.xml new file mode 100644 index 00000000..7957bf73 --- /dev/null +++ b/api-admin/src/main/resources/mybatis/mapper/info/PlatformDao.xml @@ -0,0 +1,64 @@ + + + + + + replace into auth_platform + (id, name, host) + values + + (#{item.id}, #{item.name,jdbcType=VARCHAR}, #{item.host,jdbcType=VARCHAR}) + + + + + + + + + + + + + diff --git a/api-admin/src/main/resources/mybatis/mapper/inout/UnitMaintainPlatformDao.xml b/api-admin/src/main/resources/mybatis/mapper/inout/UnitMaintainPlatformDao.xml new file mode 100644 index 00000000..3cd00a7b --- /dev/null +++ b/api-admin/src/main/resources/mybatis/mapper/inout/UnitMaintainPlatformDao.xml @@ -0,0 +1,129 @@ + + + + + + + + + update io_unit_maintain_platform + + + unitId = #{unitId}, + + + customerId = #{customerId}, + + + platformId = #{platformId}, + + + sourceAction = #{sourceAction}, + + + targetAction = #{targetAction}, + + + invCode = #{invCode}, + + + invSubCode = #{invSubCode}, + + + appid = #{appid}, + + + apiKey = #{apiKey}, + + + secretKey = #{secretKey} + + + where id = #{id} + + + + insert into io_unit_maintain_platform (unitId, customerId, platformId, sourceAction, targetAction, invCode, + invSubCode, appid, apiKey, secretKey) + VALUES (#{unitId}, #{customerId}, #{platformId}, #{sourceAction}, #{targetAction}, #{invCode}, #{invSubCode}, + #{appid}, #{apiKey}, #{secretKey}) + + + + + + \ No newline at end of file