diff --git a/nursing-unit-admin/nu-admin-biz/pom.xml b/nursing-unit-admin/nu-admin-biz/pom.xml index d70c790..191271e 100644 --- a/nursing-unit-admin/nu-admin-biz/pom.xml +++ b/nursing-unit-admin/nu-admin-biz/pom.xml @@ -59,6 +59,12 @@ 2.0.0 compile + + + com.nursingunit.boot + nu-payment-local-api + ${nursingunit.version} + diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/controller/WechatPayController.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/controller/WechatPayController.java index 20e4d97..e3618f4 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/controller/WechatPayController.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/controller/WechatPayController.java @@ -2,7 +2,11 @@ package com.nu.modules.wechart.controller; import cn.hutool.core.util.IdUtil; import cn.hutool.json.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; import com.nu.modules.bizEmployeesInfo.entity.BizEmployeesInfo; +import com.nu.modules.systemorder.api.SystemOrderApi; +import com.nu.modules.systemorder.entity.SystemOrderApiEntity; +import com.nu.modules.wechart.entity.PayParam; import com.nu.modules.wechart.entity.WechatpayConfig; import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.RSAAutoCertificateConfig; @@ -23,17 +27,23 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.jeecg.common.system.api.ISysBaseAPI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; import java.util.HashMap; import java.util.Map; + import com.wechat.pay.java.core.notification.RequestParam; import org.apache.http.HttpEntity; @@ -53,14 +63,15 @@ import com.google.gson.JsonParser; public class WechatPayController { @Autowired public WechatpayConfig wechatpayConfig; - + @Autowired + private SystemOrderApi systemOrderApi; /** * Native下单 - * 调用统一下单API,生成支付二维码 + * 调用统一下单API,生成支付二维码 */ @PostMapping("/native") - public Map nativePay(@RequestBody Map params) throws Exception { + public Map nativePay(@Valid @RequestBody PayParam params) throws Exception { Config config = new RSAAutoCertificateConfig.Builder() @@ -72,45 +83,78 @@ public class WechatPayController { // 构建service JsapiService service = new JsapiService.Builder().config(config).build(); PrepayRequest request = new PrepayRequest(); - String title = params.get("title"); - String openId = params.get("openId"); - String amountPrice = params.get("amountPrice"); + String title = params.getTitle();//订单名称 + String openId = params.getOpenId();//客户openId + BigDecimal amountPrice = params.getAmountPrice();//总价(支付金额) + String orgCode = params.getOrgCode();//机构编码 + String nursingUnit = params.getNursingUnit();//护理单元 + String customerId = params.getCustomerId();//客户ID + String orderType = params.getOrderType();//订单类型 + BigDecimal price = params.getPrice();//单价 + Integer count = params.getCount();//数量 + String unit = params.getUnit();//单位 + String seniorId = params.getSeniorId();//长者ID + String orderDesc = params.getOrderDesc();//订单描述 + String outTradeNo = IdUtil.simpleUUID();//商户订单号 Amount amount = new Amount(); - amount.setTotal(Integer.parseInt(amountPrice)); + amount.setTotal(Integer.parseInt(amountPrice.toString())); request.setAmount(amount); request.setAppid(wechatpayConfig.getAppid()); request.setMchid(wechatpayConfig.getMchId()); request.setDescription(title); request.setNotifyUrl(wechatpayConfig.getNotifyDomain()); - request.setOutTradeNo(IdUtil.simpleUUID()); + request.setOutTradeNo(outTradeNo); Payer payer = new Payer(); payer.setOpenid(openId); request.setPayer(payer); // 调用下单方法,得到应答 PrepayResponse response = service.prepay(request); log.info("prepayId:" + response.getPrepayId()); - Map map = prepayWithRequestPayment(request,config); + //存储订单数据 + { + SystemOrderApiEntity systemOrderApiEntity = new SystemOrderApiEntity(); + systemOrderApiEntity.setOrgCode(orgCode);//机构编码(必传) + systemOrderApiEntity.setNursingUnit(nursingUnit);//护理单元(必传) + systemOrderApiEntity.setCustomerId(customerId);//客户ID(必传) + systemOrderApiEntity.setOrderType(orderType);//订单类型(必传) + systemOrderApiEntity.setPrice(price);//单价(必传) + systemOrderApiEntity.setCount(count);//数量(必传) + systemOrderApiEntity.setUnit(unit);//单位(必传) + systemOrderApiEntity.setAmount(amountPrice);//总价(支付金额)(必传) + systemOrderApiEntity.setSeniorId(seniorId);//长者ID(非必传) + systemOrderApiEntity.setOpenId(openId);//客户openId(必传) + systemOrderApiEntity.setOrderName(title);//订单名称(必传) + systemOrderApiEntity.setOrderDescription(orderDesc);//订单描述(非必传) + systemOrderApiEntity.setOutTradeNo(outTradeNo);//商户订单号 + systemOrderApiEntity.setTransactionId(response.getPrepayId());//微信支付订单号 + systemOrderApiEntity.setOrderTime(new Date());//下单时间 + systemOrderApiEntity.setOrderStatus("created");//订单状态 + systemOrderApi.save(systemOrderApiEntity); + } + Map map = prepayWithRequestPayment(request, config); return map; } /** * 返回调起支付的参数 + * * @return */ - private Map prepayWithRequestPayment(PrepayRequest request,Config config){ - Map map = new HashMap<>(); + private Map prepayWithRequestPayment(PrepayRequest request, Config config) { + Map map = new HashMap<>(); JsapiServiceExtension jse = new JsapiServiceExtension.Builder().config(config).build(); PrepayWithRequestPaymentResponse response = jse.prepayWithRequestPayment(request); - map.put("appId",response.getAppId()); - map.put("timeStamp",response.getTimeStamp()); - map.put("nonceStr",response.getNonceStr()); - map.put("package",response.getPackageVal()); - map.put("signType",response.getSignType()); - map.put("paySign",response.getPaySign()); + map.put("appId", response.getAppId()); + map.put("timeStamp", response.getTimeStamp()); + map.put("nonceStr", response.getNonceStr()); + map.put("package", response.getPackageVal()); + map.put("signType", response.getSignType()); + map.put("paySign", response.getPaySign()); return map; } + @PostMapping("/callback") public String courseNative(HttpServletRequest request, HttpServletResponse response) { @@ -122,18 +166,18 @@ public class WechatPayController { .merchantSerialNumber(wechatpayConfig.getMchSerialNo()) .privateKeyFromPath(wechatpayConfig.getPrivateKeyPath()) .build(); - System.out.println("222222222222222"+config); + System.out.println("222222222222222" + config); // 从请求头中获取信息 - String timestamp = request.getHeader("Wechatpay-Timestamp"); - String nonce = request.getHeader("Wechatpay-Nonce"); - String signature = request.getHeader("Wechatpay-Signature"); - String singType = request.getHeader("Wechatpay-Signature-Type"); + String timestamp = request.getHeader("Wechatpay-Timestamp"); + String nonce = request.getHeader("Wechatpay-Nonce"); + String signature = request.getHeader("Wechatpay-Signature"); + String singType = request.getHeader("Wechatpay-Signature-Type"); String wechatPayCertificateSerialNumber = request.getHeader("Wechatpay-Serial"); System.out.println("333333333333333"); String requestBody = getRequestBody(request); - System.out.println("333333333333333"+requestBody); + System.out.println("333333333333333" + requestBody); // 初始化解析器 NotificationParser NotificationParser parser = new NotificationParser(config); System.out.println("444444444444444444444" + parser); @@ -148,9 +192,35 @@ public class WechatPayController { System.out.println("555555555555555555555" + requestParam); try { // 这个Transaction是微信包里面的 - Transaction decryptObject = parser.parse( requestParam, Transaction.class); + Transaction decryptObject = parser.parse(requestParam, Transaction.class); - System.out.println("666666666666666666:"+decryptObject); + System.out.println("666666666666666666:" + decryptObject); + + // 获取各项信息 + String openId = decryptObject.getPayer().getOpenid(); // 用户openId + Integer amount = decryptObject.getAmount().getTotal(); // 订单金额(分) + String successTime = decryptObject.getSuccessTime(); // 支付成功时间 + String tradeState = decryptObject.getTradeState().toString(); // 订单状态 + String tradeStateDesc = decryptObject.getTradeStateDesc(); // 交易状态描述 + String rawData = requestBody; // 回执报文(原始请求体) + + // 打印获取的信息 + System.out.println("OpenID: " + openId); + System.out.println("金额(分): " + amount); + System.out.println("支付成功时间: " + successTime); + System.out.println("订单状态: " + tradeState); + System.out.println("状态描述: " + tradeStateDesc); + System.out.println("原始报文: " + rawData); + //系统订单表状态更新 + { + SystemOrderApiEntity systemOrderApiEntity = new SystemOrderApiEntity(); + systemOrderApiEntity.setTransactionId(decryptObject.getTransactionId());//微信支付订单号 + systemOrderApiEntity.setOrderStatus(decryptObject.getTradeState().name());//支付状态 + systemOrderApiEntity.setReceiptDescription(decryptObject.getTradeStateDesc());//回执描述 + systemOrderApiEntity.setReceiptMessage(new ObjectMapper().writeValueAsString(decryptObject));//回执报文 + systemOrderApiEntity.setReceiptTime(new Date()); + systemOrderApi.updateByTransactionId(systemOrderApiEntity); + } return decryptObject.getTradeState().toString(); } catch (Exception e) { e.printStackTrace(); @@ -158,6 +228,7 @@ public class WechatPayController { } } + // 获取请求头里的数据 private String getRequestBody(HttpServletRequest request) { StringBuffer sb = new StringBuffer(); @@ -170,18 +241,19 @@ public class WechatPayController { sb.append(line); } } catch (IOException e) { - System.out.println("读取数据流异常:"+e); + System.out.println("读取数据流异常:" + e); } return sb.toString(); } + /** * 查询订单 + * * @param params * @return */ @PostMapping("/queryOrderById") - public Map queryOrderById(@RequestBody Map params) throws Exception { - + public Map queryOrderById(@RequestBody Map params) throws Exception { Config config = @@ -192,10 +264,10 @@ public class WechatPayController { .apiV3Key(wechatpayConfig.getApiV3Key()) .build(); String prepay_id = params.get("prepay_id"); - Map map = new HashMap<>(); - if(StringUtils.isEmpty(prepay_id)){ - map.put("code","400"); - map.put("msg","参数错误,prepay_id为空!"); + Map map = new HashMap<>(); + if (StringUtils.isEmpty(prepay_id)) { + map.put("code", "400"); + map.put("msg", "参数错误,prepay_id为空!"); return map; } // 构建service @@ -207,8 +279,8 @@ public class WechatPayController { try { Transaction result = service.queryOrderById(queryRequest); System.out.println(result.getTradeState()); - map.put("code","200"); - map.put("msg",result); + map.put("code", "200"); + map.put("msg", result); } catch (ServiceException e) { // API返回失败, 例如ORDER_NOT_EXISTS System.out.printf("code=[%s], message=[%s]\n", e.getErrorCode(), e.getErrorMessage()); @@ -218,12 +290,10 @@ public class WechatPayController { } - public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";// 获取access // 获取token - public static String getToken(String apiurl, String appid, String secret) - { + public static String getToken(String apiurl, String appid, String secret) { String turl = String.format( "%s?grant_type=client_credential&appid=%s&secret=%s", apiurl, appid, secret); @@ -233,8 +303,7 @@ public class WechatPayController { System.out.println("get:" + get); JsonParser jsonparer = new JsonParser();// 初始化解析json格式的对象 String result = null; - try - { + try { HttpResponse res = client.execute(get); System.out.println("res:" + res); String responseContent = null; // 响应内容 @@ -245,23 +314,15 @@ public class WechatPayController { .getAsJsonObject(); System.out.println("json:" + json); // 将json字符串转换为json对象 - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) - { - if (json.get("errcode") != null) - {// 错误时微信会返回错误码等信息,{"errcode":40013,"errmsg":"invalid appid"} - } - else - {// 正常情况下{"access_token":"ACCESS_TOKEN","expires_in":7200} + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + if (json.get("errcode") != null) {// 错误时微信会返回错误码等信息,{"errcode":40013,"errmsg":"invalid appid"} + } else {// 正常情况下{"access_token":"ACCESS_TOKEN","expires_in":7200} result = json.get("access_token").getAsString(); } } - } - catch (Exception e) - { + } catch (Exception e) { e.printStackTrace(); - } - finally - { + } finally { // 关闭连接 ,释放资源 client.getConnectionManager().shutdown(); return result; @@ -270,28 +331,28 @@ public class WechatPayController { @PostMapping("/getUserInfo") - public JSONObject getWxUserInfo(@RequestBody Map params) throws Exception { + public JSONObject getWxUserInfo(@RequestBody Map params) throws Exception { // String accessToken = getToken(GET_TOKEN_URL, "wx8fc3e4305d2fbf0b", "3bf3dd4ec72f591432db6b28c2c044e5");// 获取token String accessToken = params.get("access_token"); String openid = params.get("openid"); - System.out.println("---------token-------"+accessToken); + System.out.println("---------token-------" + accessToken); // 构造请求URL String requestUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN"; // 发送HTTP请求,并获取返回结果 HttpGet httpGet = new HttpGet(requestUrl); - System.out.println("---------httpGet-------"+httpGet); + System.out.println("---------httpGet-------" + httpGet); CloseableHttpClient httpClient = HttpClients.createDefault(); - System.out.println("---------httpClient-------"+httpClient); + System.out.println("---------httpClient-------" + httpClient); CloseableHttpResponse httpResponse = httpClient.execute(httpGet); - System.out.println("---------httpResponse-------"+httpResponse); + System.out.println("---------httpResponse-------" + httpResponse); HttpEntity httpEntity = httpResponse.getEntity(); - System.out.println("---------httpEntity-------"+httpEntity); + System.out.println("---------httpEntity-------" + httpEntity); String responseJson = EntityUtils.toString(httpEntity, "UTF-8"); - System.out.println("---------responseJson-------"+responseJson); + System.out.println("---------responseJson-------" + responseJson); // 解析返回结果,获取手机号 JSONObject jsonObject = new JSONObject(responseJson); - System.out.println("---------jsonObject-------"+jsonObject); + System.out.println("---------jsonObject-------" + jsonObject); return jsonObject; } } diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/entity/PayParam.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/entity/PayParam.java new file mode 100644 index 0000000..918e425 --- /dev/null +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/wechart/entity/PayParam.java @@ -0,0 +1,60 @@ +package com.nu.modules.wechart.entity; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * 支付参数实体类(系统需要用到的) + */ +@Data +public class PayParam { + + // 机构编码 + @NotBlank(message = "机构编码不能为空") + private String orgCode; + + // 护理单元编码 + @NotBlank(message = "护理单元编码不能为空") + private String nursingUnit; + + // 客户ID + @NotBlank(message = "客户ID不能为空") + private String customerId; + + // 微信的openId + @NotBlank(message = "微信openId不能为空") + private String openId; + + // 长者ID(非必填) + private String seniorId; + + // 订单类型 + @NotBlank(message = "订单类型不能为空") + private String orderType; + + // 单价 + @NotNull(message = "单价不能为空") + private BigDecimal price; + + // 数量 + @NotNull(message = "数量不能为空") + private Integer count; + + // 单位 + @NotBlank(message = "单位不能为空") + private String unit; + + // 总价 + @NotNull(message = "总价不能为空") + private BigDecimal amountPrice; + + // 订单名称 + @NotBlank(message = "订单名称不能为空") + private String title; + + // 订单描述(非必填) + private String orderDesc; +} diff --git a/nursing-unit-api/src/main/java/com/nu/modules/documentrecognition/DocumentRecognitionApi.java b/nursing-unit-api/src/main/java/com/nu/modules/documentrecognition/DocumentRecognitionApi.java index 3d5e701..944ffc0 100644 --- a/nursing-unit-api/src/main/java/com/nu/modules/documentrecognition/DocumentRecognitionApi.java +++ b/nursing-unit-api/src/main/java/com/nu/modules/documentrecognition/DocumentRecognitionApi.java @@ -1,5 +1,6 @@ package com.nu.modules.documentrecognition; +import com.aliyun.sdk.service.ocr_api20210707.models.*; import com.nu.modules.aliyun.documentrecognition.DocumentRecognitionUtils; import org.jeecg.common.api.vo.Result; import org.springframework.beans.factory.annotation.Value; @@ -26,12 +27,12 @@ public class DocumentRecognitionApi { * @param file 图片文件 */ @PostMapping("/idCard") - public Result recognizeIdCard( + public Result recognizeIdCard( @RequestParam("file") MultipartFile file) { DocumentRecognitionUtils utils = new DocumentRecognitionUtils(accessKeyId, accessKeySecret); try (InputStream inputStream = file.getInputStream()) { - String result = utils.recognizeIdCard(inputStream); + RecognizeIdcardResponseBody result = utils.recognizeIdCard(inputStream); return Result.ok(result); } catch (Exception e) { return Result.error("身份证识别失败: " + e.getMessage()); @@ -45,12 +46,12 @@ public class DocumentRecognitionApi { * @param file 图片文件 */ @PostMapping("/household") - public Result recognizeHousehold( + public Result recognizeHousehold( @RequestParam("file") MultipartFile file) { DocumentRecognitionUtils utils = new DocumentRecognitionUtils(accessKeyId, accessKeySecret); try (InputStream inputStream = file.getInputStream()) { - String result = utils.recognizeHouseholdRegister(inputStream); + RecognizeHouseholdResponseBody result = utils.recognizeHouseholdRegister(inputStream); return Result.ok(result); } catch (Exception e) { return Result.error("户口本识别失败: " + e.getMessage()); @@ -64,12 +65,12 @@ public class DocumentRecognitionApi { * @param file 图片文件 */ @PostMapping("/bankCard") - public Result recognizeBankCard( + public Result recognizeBankCard( @RequestParam("file") MultipartFile file) { DocumentRecognitionUtils utils = new DocumentRecognitionUtils(accessKeyId, accessKeySecret); try (InputStream inputStream = file.getInputStream()) { - String result = utils.recognizeBankCard(inputStream); + RecognizeBankCardResponseBody result = utils.recognizeBankCard(inputStream); return Result.ok(result); } catch (Exception e) { return Result.error("银行卡识别失败: " + e.getMessage()); @@ -83,12 +84,12 @@ public class DocumentRecognitionApi { * @param file 图片文件 */ @PostMapping("/medicalCard") - public Result recognizeMedicalCard( + public Result recognizeMedicalCard( @RequestParam("file") MultipartFile file) { DocumentRecognitionUtils utils = new DocumentRecognitionUtils(accessKeyId, accessKeySecret); try (InputStream inputStream = file.getInputStream()) { - String result = utils.recognizeMedicalCard(inputStream); + RecognizeSocialSecurityCardVersionIIResponseBody result = utils.recognizeMedicalCard(inputStream); return Result.ok(result); } catch (Exception e) { return Result.error("医保卡识别失败: " + e.getMessage()); @@ -97,4 +98,22 @@ public class DocumentRecognitionApi { } } + /** + * 营业执照识别 + * @param file 图片文件 + */ + @PostMapping("/businessLicense") + public Result recognizeBusinessLicense( + @RequestParam("file") MultipartFile file) { + + DocumentRecognitionUtils utils = new DocumentRecognitionUtils(accessKeyId, accessKeySecret); + try (InputStream inputStream = file.getInputStream()) { + RecognizeBusinessLicenseResponseBody result = utils.recognizeBusinessLicense(inputStream); + return Result.ok(result); + } catch (Exception e) { + return Result.error("营业执照识别失败: " + e.getMessage()); + } finally { + utils.close(); + } + } } diff --git a/nursing-unit-common/src/main/java/com/nu/modules/aliyun/documentrecognition/DocumentRecognitionUtils.java b/nursing-unit-common/src/main/java/com/nu/modules/aliyun/documentrecognition/DocumentRecognitionUtils.java index 4d54f0b..c6a101b 100644 --- a/nursing-unit-common/src/main/java/com/nu/modules/aliyun/documentrecognition/DocumentRecognitionUtils.java +++ b/nursing-unit-common/src/main/java/com/nu/modules/aliyun/documentrecognition/DocumentRecognitionUtils.java @@ -2,9 +2,8 @@ package com.nu.modules.aliyun.documentrecognition; import com.aliyun.auth.credentials.Credential; import com.aliyun.auth.credentials.provider.StaticCredentialProvider; -import com.aliyun.sdk.service.ocr_api20210707.*; +import com.aliyun.sdk.service.ocr_api20210707.AsyncClient; import com.aliyun.sdk.service.ocr_api20210707.models.*; -import com.google.gson.Gson; import darabonba.core.client.ClientOverrideConfiguration; import java.io.InputStream; @@ -45,58 +44,77 @@ public class DocumentRecognitionUtils { * @param inputStream 图片输入流 * @return 识别结果JSON字符串 */ - public String recognizeIdCard(InputStream inputStream) throws Exception { + public RecognizeIdcardResponseBody recognizeIdCard(InputStream inputStream) throws Exception { RecognizeIdcardRequest request = RecognizeIdcardRequest.builder() .body(inputStream) .build(); CompletableFuture future = client.recognizeIdcard(request); RecognizeIdcardResponse response = future.get(); - return new Gson().toJson(response.getBody()); + return response.getBody(); } /** * 识别户口本首页 + * * @param inputStream 图片输入流 * @return 识别结果JSON字符串 */ - public String recognizeHouseholdRegister(InputStream inputStream) throws Exception { + public RecognizeHouseholdResponseBody recognizeHouseholdRegister(InputStream inputStream) throws Exception { RecognizeHouseholdRequest request = RecognizeHouseholdRequest.builder() .body(inputStream) .build(); CompletableFuture future = client.recognizeHousehold(request); RecognizeHouseholdResponse response = future.get(); - return new Gson().toJson(response.getBody()); + return response.getBody(); } /** * 识别银行卡 + * * @param inputStream 图片输入流 * @return 识别结果JSON字符串 */ - public String recognizeBankCard(InputStream inputStream) throws Exception { + public RecognizeBankCardResponseBody recognizeBankCard(InputStream inputStream) throws Exception { RecognizeBankCardRequest request = RecognizeBankCardRequest.builder() .body(inputStream) .build(); CompletableFuture future = client.recognizeBankCard(request); RecognizeBankCardResponse response = future.get(); - return new Gson().toJson(response.getBody()); + return response.getBody(); } /** * 识别医保卡 + * * @param inputStream 图片输入流 * @return 识别结果JSON字符串 */ - public String recognizeMedicalCard(InputStream inputStream) throws Exception { + public RecognizeSocialSecurityCardVersionIIResponseBody recognizeMedicalCard(InputStream inputStream) throws Exception { RecognizeSocialSecurityCardVersionIIRequest request = RecognizeSocialSecurityCardVersionIIRequest.builder() .body(inputStream) .build(); CompletableFuture future = client.recognizeSocialSecurityCardVersionII(request); RecognizeSocialSecurityCardVersionIIResponse response = future.get(); - return new Gson().toJson(response.getBody()); + return response.getBody(); + } + + /** + * 识别营业执照 + * + * @param inputStream 图片输入流 + * @return 识别结果JSON字符串 + */ + public RecognizeBusinessLicenseResponseBody recognizeBusinessLicense(InputStream inputStream) throws Exception { + RecognizeBusinessLicenseRequest request = RecognizeBusinessLicenseRequest.builder() + .body(inputStream) + .build(); + + CompletableFuture future = client.recognizeBusinessLicense(request); + RecognizeBusinessLicenseResponse response = future.get(); + return response.getBody(); } } diff --git a/nursing-unit-payment/nu-payment-api/nu-payment-local-api/src/main/java/com/nu/modules/systemorder/api/SystemOrderApi.java b/nursing-unit-payment/nu-payment-api/nu-payment-local-api/src/main/java/com/nu/modules/systemorder/api/SystemOrderApi.java new file mode 100644 index 0000000..bd69305 --- /dev/null +++ b/nursing-unit-payment/nu-payment-api/nu-payment-local-api/src/main/java/com/nu/modules/systemorder/api/SystemOrderApi.java @@ -0,0 +1,16 @@ +package com.nu.modules.systemorder.api; + +import com.nu.modules.systemorder.entity.SystemOrderApiEntity; + +public interface SystemOrderApi { + + + int save(SystemOrderApiEntity systemOrder); + + /** + * 通过transaction_id更新数据 + * @param systemOrder + * @return + */ + int updateByTransactionId(SystemOrderApiEntity systemOrder); +} diff --git a/nursing-unit-payment/nu-payment-api/nu-payment-local-api/src/main/java/com/nu/modules/systemorder/entity/SystemOrderApiEntity.java b/nursing-unit-payment/nu-payment-api/nu-payment-local-api/src/main/java/com/nu/modules/systemorder/entity/SystemOrderApiEntity.java new file mode 100644 index 0000000..7ac0f53 --- /dev/null +++ b/nursing-unit-payment/nu-payment-api/nu-payment-local-api/src/main/java/com/nu/modules/systemorder/entity/SystemOrderApiEntity.java @@ -0,0 +1,59 @@ +package com.nu.modules.systemorder.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Description: 系统订单 + * @Author: 张明远 + * @Date: 2025-06-03 + * @Version: V1.0 + */ +@Data +public class SystemOrderApiEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键ID*/ + private String id; + /**机构编码*/ + private String orgCode; + /**护理单元*/ + private String nursingUnit; + /**支付人的openId*/ + private String openId; + /**客户id(系统中的)*/ + private String customerId; + /**订单类型(字典order_type)*/ + private String orderType; + /**下单时间*/ + private Date orderTime; + /**回执时间*/ + private Date receiptTime; + /**订单状态*/ + private String orderStatus; + /**订单名称*/ + private String orderName; + /**订单描述(咱们自己说明的跟微信支付回执没关系)*/ + private String orderDescription; + /**回执描述*/ + private String receiptDescription; + /**回执报文*/ + private String receiptMessage; + /**单价*/ + private BigDecimal price; + /**数量*/ + private Integer count; + /**单位*/ + private String unit; + /**支付金额(总价)*/ + private BigDecimal amount; + /**商户订单号*/ + private String outTradeNo; + /**微信支付订单号*/ + private String transactionId; + /**长者Id*/ + private String seniorId; +} diff --git a/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/controller/SystemOrderController.java b/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/controller/SystemOrderController.java index 983537f..60c6ebe 100644 --- a/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/controller/SystemOrderController.java +++ b/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/controller/SystemOrderController.java @@ -40,12 +40,12 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.apache.shiro.authz.annotation.RequiresPermissions; /** - * @Description: 系统订单表 + * @Description: 系统订单 * @Author: 张明远 - * @Date: 2025-05-30 + * @Date: 2025-06-03 * @Version: V1.0 */ -@Api(tags="系统订单表") +@Api(tags="系统订单") @RestController @RequestMapping("/systemorder/systemOrder") @Slf4j @@ -62,8 +62,8 @@ public class SystemOrderController extends JeecgController> queryPageList(SystemOrder systemOrder, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @@ -73,8 +73,8 @@ public class SystemOrderController extends JeecgController customeRuleMap = new HashMap<>(); // 自定义多选的查询规则为:LIKE_WITH_OR customeRuleMap.put("nursingUnit", QueryRuleEnum.LIKE_WITH_OR); + customeRuleMap.put("customerId", QueryRuleEnum.LIKE_WITH_OR); customeRuleMap.put("orderType", QueryRuleEnum.LIKE_WITH_OR); - customeRuleMap.put("orderStatus", QueryRuleEnum.LIKE_WITH_OR); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(systemOrder, req.getParameterMap(),customeRuleMap); Page page = new Page(pageNo, pageSize); IPage pageList = systemOrderService.page(page, queryWrapper); @@ -87,8 +87,8 @@ public class SystemOrderController extends JeecgController add(@RequestBody SystemOrder systemOrder) { @@ -102,8 +102,8 @@ public class SystemOrderController extends JeecgController edit(@RequestBody SystemOrder systemOrder) { @@ -117,8 +117,8 @@ public class SystemOrderController extends JeecgController delete(@RequestParam(name="id",required=true) String id) { @@ -132,8 +132,8 @@ public class SystemOrderController extends JeecgController deleteBatch(@RequestParam(name="ids",required=true) String ids) { @@ -147,8 +147,8 @@ public class SystemOrderController extends JeecgController queryById(@RequestParam(name="id",required=true) String id) { SystemOrder systemOrder = systemOrderService.getById(id); @@ -167,7 +167,7 @@ public class SystemOrderController extends JeecgController { diff --git a/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/ISystemOrderService.java b/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/ISystemOrderService.java index 643b78e..be640f5 100644 --- a/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/ISystemOrderService.java +++ b/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/ISystemOrderService.java @@ -4,9 +4,9 @@ import com.nu.modules.systemorder.entity.SystemOrder; import com.baomidou.mybatisplus.extension.service.IService; /** - * @Description: 系统订单表 + * @Description: 系统订单 * @Author: 张明远 - * @Date: 2025-05-30 + * @Date: 2025-06-03 * @Version: V1.0 */ public interface ISystemOrderService extends IService { diff --git a/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/impl/SystemOrderServiceImpl.java b/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/impl/SystemOrderServiceImpl.java index a1c803f..1da2e68 100644 --- a/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/impl/SystemOrderServiceImpl.java +++ b/nursing-unit-payment/nu-payment-biz/src/main/java/com/nu/modules/systemorder/service/impl/SystemOrderServiceImpl.java @@ -1,19 +1,36 @@ package com.nu.modules.systemorder.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.nu.modules.systemorder.api.SystemOrderApi; import com.nu.modules.systemorder.entity.SystemOrder; +import com.nu.modules.systemorder.entity.SystemOrderApiEntity; import com.nu.modules.systemorder.mapper.SystemOrderMapper; import com.nu.modules.systemorder.service.ISystemOrderService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** - * @Description: 系统订单表 + * @Description: 系统订单 * @Author: 张明远 - * @Date: 2025-05-30 + * @Date: 2025-06-03 * @Version: V1.0 */ @Service -public class SystemOrderServiceImpl extends ServiceImpl implements ISystemOrderService { +public class SystemOrderServiceImpl extends ServiceImpl implements ISystemOrderService, SystemOrderApi { + @Override + public int save(SystemOrderApiEntity systemOrderApiEntity) { + SystemOrder systemOrder = new SystemOrder(); + BeanUtils.copyProperties(systemOrderApiEntity,systemOrder); + return baseMapper.insert(systemOrder); + } + + @Override + public int updateByTransactionId(SystemOrderApiEntity systemOrderApiEntity) { + SystemOrder systemOrder = new SystemOrder(); + BeanUtils.copyProperties(systemOrderApiEntity,systemOrder); + return baseMapper.update(systemOrder,new QueryWrapper().eq("transaction_id",systemOrderApiEntity.getTransactionId())); + } } diff --git a/nursing-unit-system/nu-system-biz/src/main/java/org/jeecg/mq/dict/listener/DictMQListener.java b/nursing-unit-system/nu-system-biz/src/main/java/org/jeecg/mq/dict/listener/DictMQListener.java index b88446c..73f6e3c 100644 --- a/nursing-unit-system/nu-system-biz/src/main/java/org/jeecg/mq/dict/listener/DictMQListener.java +++ b/nursing-unit-system/nu-system-biz/src/main/java/org/jeecg/mq/dict/listener/DictMQListener.java @@ -42,6 +42,7 @@ public class DictMQListener { /** * fanout类型 发给所有人统一处理的 + * * @param dto */ @RabbitListener( @@ -62,6 +63,7 @@ public class DictMQListener { /** * direct直连 只发给我的 + * * @param dto */ @RabbitListener( @@ -98,6 +100,7 @@ public class DictMQListener { } try { + //TODO 主键重复问题 SysDict dict = dictService.getById(dto.getId()); //如果是标识删除 查到的也是null 这里要处理的是只要在回收站就删除 重建 if (dict == null || (dict != null && dict.getDelFlag() == 1)) { diff --git a/nursing-unit-system/nu-system-start/pom.xml b/nursing-unit-system/nu-system-start/pom.xml index 00dd953..98223ec 100644 --- a/nursing-unit-system/nu-system-start/pom.xml +++ b/nursing-unit-system/nu-system-start/pom.xml @@ -54,6 +54,12 @@ nu-services-biz ${nursingunit.version} + + + com.nursingunit.boot + nu-payment-biz + ${nursingunit.version} + com.nursingunit.boot