diff --git a/pom.xml b/pom.xml index e136f5e..3edf6c6 100644 --- a/pom.xml +++ b/pom.xml @@ -136,6 +136,18 @@ ${project.artifactId} + + + + + src/main/resources + + **/** + + false + + + org.springframework.boot @@ -151,60 +163,86 @@ - + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + + lib/ + + false + + com.dpkj.Application + + + + resources/ + + + + + *.yml + *.xml + templates/** + win32-x86-64/** + win32-x86/** + + + ${project.build.directory}/output + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/output/lib/ + + + + + + + maven-resources-plugin + + + copy-resources + package + + copy-resources + + + + + + src/main/resources + + + + ${project.build.directory}/output/resources + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - src/main/resources - - **/** - - false - - diff --git a/src/main/java/com/dpkj/common/config/ChsConfig.java b/src/main/java/com/dpkj/common/config/ChsConfig.java new file mode 100644 index 0000000..17ef7b5 --- /dev/null +++ b/src/main/java/com/dpkj/common/config/ChsConfig.java @@ -0,0 +1,22 @@ +package com.dpkj.common.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Auther: 萧道子 + * @Date: 2024/4/28 14:55 + * @Description: + */ +@Data +@Component +@ConfigurationProperties(prefix = "dpkj.chs") +public class ChsConfig { + + /** + * 医保机构编码 + */ + private String orgcode; + +} diff --git a/src/main/java/com/dpkj/common/constant/ChsConst.java b/src/main/java/com/dpkj/common/constant/ChsConst.java new file mode 100644 index 0000000..5ab5eef --- /dev/null +++ b/src/main/java/com/dpkj/common/constant/ChsConst.java @@ -0,0 +1,36 @@ +package com.dpkj.common.constant; + +public interface ChsConst { + + /** + * 电子凭证二维码解码接口 + */ + String APITYPE_QRCODE = "ec.query"; + + /** + * 医保电子凭证密码核验接口 + */ + String APITYPE_VERIFY = "cn.nhsa.ec.pwd"; + + + /** + * 终端医保电子凭证码解码接口 + */ + String APITYPE_DECODE = "cn.nhsa.qrcode.get"; + + /** + * 刷脸获取医保用户身份授权接口 + */ + String APITYPE_AUTHORIZATION = "cn.nhsa.ec.auth"; + + /** + * 刷脸授权获取医保身份接口 + */ + String APITYPE_CHECK = "cn.nhsa.auth.check"; + + /** + * 结算结果通知接口 + */ + String APITYPE_Notify = "cn.nhsa.settle.notify"; + +} diff --git a/src/main/java/com/dpkj/modules/chs/controller/AlipayController.java b/src/main/java/com/dpkj/modules/chs/controller/AlipayController.java new file mode 100644 index 0000000..66452a7 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/controller/AlipayController.java @@ -0,0 +1,81 @@ +package com.dpkj.modules.chs.controller; + +import cn.hutool.core.lang.Console; +import com.alibaba.fastjson.JSONObject; +import com.dpkj.common.config.ChsConfig; +import com.dpkj.common.constant.ChsConst; +import com.dpkj.common.vo.Result; +import com.dpkj.modules.chs.dll.AlipayDll; +import com.dpkj.modules.chs.entity.AlipayEcRequestData; +import com.dpkj.modules.chs.service.IAlipayService; +import com.sun.jna.Memory; +import com.sun.jna.Pointer; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/22 16:25 + * @Description: 医保模块-阿里设备 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("/chs/alipay") +public class AlipayController { + + private final IAlipayService alipayService; + + private final ChsConfig charsConfig; + + + @GetMapping("test") + public Result test() { + try { + AlipayDll.Dll dll = AlipayDll.instance(); + // Native.load("libeay32", AlipayDll.Dll.class); + // Native.load("ssleay32", AlipayDll.Dll.class); + + + JSONObject data = new JSONObject(); + AlipayEcRequestData alipayEcRequestData = new AlipayEcRequestData() + .setOrgId(charsConfig.getOrgcode()) + .setTransType(ChsConst.APITYPE_DECODE) + .setData(data); + String dataJson = JSONObject.toJSONString(alipayEcRequestData); + + Pointer resultStr = new Memory(1024 * 10); + String rs = dll.NationEcTrans( + "http://172.16.11.13:5946/api/chs/qrCodeQuery", + dataJson, + resultStr + ); + String rsStrString = resultStr.getString(0, "GB18030"); + Console.log(rsStrString); + Console.log(rs); + + return Result.ok("成功", rsStrString); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("失败"); + } + } + + @PostMapping("qrCodeQuery") + public Result qrCodeQuery(@RequestBody JSONObject data) { + try { + + Console.log(data); + return Result.ok("成功", null); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("失败"); + } + } + +} diff --git a/src/main/java/com/dpkj/modules/chs/controller/HispayController.java b/src/main/java/com/dpkj/modules/chs/controller/HispayController.java new file mode 100644 index 0000000..f93b12b --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/controller/HispayController.java @@ -0,0 +1,50 @@ +package com.dpkj.modules.chs.controller; + +import cn.hutool.core.lang.Console; +import com.alibaba.fastjson.JSONObject; +import com.dpkj.common.config.ChsConfig; +import com.dpkj.common.constant.ChsConst; +import com.dpkj.common.vo.Result; +import com.dpkj.modules.chs.dll.AlipayDll; +import com.dpkj.modules.chs.entity.AlipayEcRequestData; +import com.dpkj.modules.chs.service.IAlipayService; +import com.dpkj.modules.chs.service.IHispayService; +import com.sun.jna.Memory; +import com.sun.jna.Pointer; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/22 16:25 + * @Description: 医保模块-HIS医保 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("/chs/hispay") +public class HispayController { + + private final IHispayService hispayService; + + private final ChsConfig charsConfig; + + + @GetMapping("test") + public Result test() { + try { + + return Result.ok("成功", null); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("失败"); + } + } + + +} diff --git a/src/main/java/com/dpkj/modules/chs/dll/AlipayDll.java b/src/main/java/com/dpkj/modules/chs/dll/AlipayDll.java new file mode 100644 index 0000000..11aac82 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/dll/AlipayDll.java @@ -0,0 +1,59 @@ +package com.dpkj.modules.chs.dll; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; +import lombok.extern.slf4j.Slf4j; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/22 17:48 + * @Description: + */ +@Slf4j +public class AlipayDll { + + /** + * 获取 AlipayDll 实例,同时注册 AlipayDll 控件。 + * + * @return AlipayDll 实例 + * @throws DllRegistrationException 如果注册控件失败,抛出此异常 + */ + public static Dll instance() throws DllRegistrationException { + try { + return Native.load("NationECCode", Dll.class); + } catch (UnsatisfiedLinkError e) { + log.info("[AlipayDll][getPrintSDK][医保动态库] SDK注册失败:{}", e.getMessage()); + throw new DllRegistrationException("Failed to load AlipayDll library: ", e); + } + } + + /** + * 定义自定义异常类,用于表示注册控件时发生的错误 + */ + public static class DllRegistrationException extends Exception { + public DllRegistrationException(String message) { + super(message); + } + + public DllRegistrationException(String message, Throwable cause) { + super(message, cause); + } + } + + + /** + * 定义接口映射本地库中的函数。 + */ + public interface Dll extends Library { + + /** + * 设置打印端口和波特率。 + * + * @return 返回操作结果代码 + */ + String NationEcTrans(String strUrl, String InData, Pointer OutData); + + } + +} diff --git a/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java b/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java new file mode 100644 index 0000000..9398e86 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java @@ -0,0 +1,59 @@ +package com.dpkj.modules.chs.dll; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; +import lombok.extern.slf4j.Slf4j; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/22 17:48 + * @Description: + */ +@Slf4j +public class HispayDll { + + /** + * 获取 AlipayDll 实例,同时注册 AlipayDll 控件。 + * + * @return AlipayDll 实例 + * @throws DllRegistrationException 如果注册控件失败,抛出此异常 + */ + public static Dll instance() throws DllRegistrationException { + try { + return Native.load("PayClient", Dll.class); + } catch (UnsatisfiedLinkError e) { + log.info("[HispayDll][getPrintSDK][医保动态库] SDK注册失败:{}", e.getMessage()); + throw new DllRegistrationException("Failed to load AlipayDll library: ", e); + } + } + + /** + * 定义自定义异常类,用于表示注册控件时发生的错误 + */ + public static class DllRegistrationException extends Exception { + public DllRegistrationException(String message) { + super(message); + } + + public DllRegistrationException(String message, Throwable cause) { + super(message, cause); + } + } + + + /** + * 定义接口映射本地库中的函数。 + */ + public interface Dll extends Library { + + /** + * 设置打印端口和波特率。 + * + * @return 返回操作结果代码 + */ + String NationEcTrans(String strUrl, String InData, Pointer OutData); + + } + +} diff --git a/src/main/java/com/dpkj/modules/chs/entity/AlipayEcRequestData.java b/src/main/java/com/dpkj/modules/chs/entity/AlipayEcRequestData.java new file mode 100644 index 0000000..2b75ded --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/entity/AlipayEcRequestData.java @@ -0,0 +1,44 @@ +package com.dpkj.modules.chs.entity; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/23 11:56 + * @Description: 医保请求 + */ +@Data +@Accessors(chain = true) +public class AlipayEcRequestData implements Serializable { + private static final long serialVersionUID = 1L; + + + /** + * 机构 ID 必填 + */ + private String orgId; + + /** + * 交易类型 必填 + * ec.query: 电子凭证二维码解码接口 + * cn.nhsa.qrcode.get: 终端医保电子凭证码解码接口 + * cn.nhsa.auth.check:刷脸授权获取医保身份接口 + * cn.nhsa.ec.pwd: 医保电子凭证密码核验接口 + */ + private String transType; + + /** + * 接口请求参数 JSON格式字符串 必填 + */ + private JSONObject data; + + /** + * 扩展参数 JSON格式字符串 + */ + private JSONObject extra; + +} diff --git a/src/main/java/com/dpkj/modules/chs/service/IAlipayService.java b/src/main/java/com/dpkj/modules/chs/service/IAlipayService.java new file mode 100644 index 0000000..e4dc9b4 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/service/IAlipayService.java @@ -0,0 +1,4 @@ +package com.dpkj.modules.chs.service; + +public interface IAlipayService { +} diff --git a/src/main/java/com/dpkj/modules/chs/service/IHispayService.java b/src/main/java/com/dpkj/modules/chs/service/IHispayService.java new file mode 100644 index 0000000..5315557 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/service/IHispayService.java @@ -0,0 +1,4 @@ +package com.dpkj.modules.chs.service; + +public interface IHispayService { +} diff --git a/src/main/java/com/dpkj/modules/chs/service/impl/AlipayServiceImpl.java b/src/main/java/com/dpkj/modules/chs/service/impl/AlipayServiceImpl.java new file mode 100644 index 0000000..2359566 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/service/impl/AlipayServiceImpl.java @@ -0,0 +1,38 @@ +package com.dpkj.modules.chs.service.impl; + +import cn.hutool.core.lang.Console; +import com.dpkj.modules.chs.dll.AlipayDll; +import com.dpkj.modules.chs.service.IAlipayService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/22 16:29 + * @Description: + */ +@Slf4j +@Service +public class AlipayServiceImpl implements IAlipayService { + + private AlipayDll.Dll dll = AlipayDll.instance(); + + + public AlipayServiceImpl() throws AlipayDll.DllRegistrationException { + } + + @PostConstruct + public void postConstruct() { + log.info("[AlipayServiceImpl][postConstruct][医保DLL] 初始化动态链接库"); + initPrinter(); + } + + + private void initPrinter() { + Console.log(dll); + } + + +} diff --git a/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java b/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java new file mode 100644 index 0000000..6ba4adc --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java @@ -0,0 +1,38 @@ +package com.dpkj.modules.chs.service.impl; + +import cn.hutool.core.lang.Console; +import com.dpkj.modules.chs.dll.HispayDll; +import com.dpkj.modules.chs.service.IHispayService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; + +/** + * @Auther: 萧道子 + * @Date: 2025/3/22 16:29 + * @Description: + */ +@Slf4j +@Service +public class HispayServiceImpl implements IHispayService { + + private HispayDll.Dll dll = HispayDll.instance(); + + + public HispayServiceImpl() throws HispayDll.DllRegistrationException { + } + + @PostConstruct + public void postConstruct() { + log.info("[HispayServiceImpl][postConstruct][医保DLL-HIS] 初始化动态链接库"); + initPrinter(); + } + + + private void initPrinter() { + Console.log(dll); + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4a97d5e..e22ed8e 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,4 +1,8 @@ dpkj: + # 医保配置 + chs: + # 医保机构编码 + orgcode: H53082800070 file: # 文件保存地址 path: G:\Temp\img diff --git a/src/main/resources/application-pro.yml b/src/main/resources/application-pro.yml index adba7f4..97dcbc8 100644 --- a/src/main/resources/application-pro.yml +++ b/src/main/resources/application-pro.yml @@ -1,4 +1,8 @@ dpkj: + # 医保配置 + chs: + # 医保机构编码 + orgcode: H53082800070 file: # 文件保存地址 path: D:\Project\Express\upload diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index 195741a..45d674e 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -3,6 +3,23 @@ 挂号单 +
@@ -27,9 +44,12 @@
总 费 用: 元
支付方式:
-
交易流水:
+
交易流水:
- QR Code + QR Code
diff --git a/src/main/resources/win32-x86/NationECCode.dll b/src/main/resources/win32-x86/NationECCode.dll new file mode 100644 index 0000000..5d0cf23 Binary files /dev/null and b/src/main/resources/win32-x86/NationECCode.dll differ diff --git a/src/main/resources/win32-x86/PayClient.dll b/src/main/resources/win32-x86/PayClient.dll new file mode 100644 index 0000000..26a7ba0 Binary files /dev/null and b/src/main/resources/win32-x86/PayClient.dll differ