From bafa2d4089a6ced2346038a3e94c4b9a8ef9b104 Mon Sep 17 00:00:00 2001 From: 18123374652 <2265829957@qq.com> Date: Thu, 21 Mar 2024 14:50:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=B7=9D=E9=80=B8=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xhpc/evcs/api/QueryTokenController.java | 56 ++++ .../java/com/xhpc/evcs/config/EvcsFilter.java | 2 +- .../com/xhpc/common/api/PileOrderService.java | 10 + .../api/factory/PileOrderFallbackFactory.java | 7 + .../xhpc/common/domain/XhpcRechargeOrder.java | 22 ++ .../com/xhpc/common/util/UserTypeUtil.java | 3 +- xhpc-modules/xhpc-general/pom.xml | 12 + .../order/api/XhpcChargeOrderController.java | 19 ++ .../order/api/XhpcPileOrderController.java | 40 ++- .../service/IXhpcChargeOrderService.java | 9 + .../impl/XhpcChargeOrderServiceImpl.java | 170 +++++++++++ .../mapper/XhpcHistoryOrderMapper.xml | 6 +- .../controller/AlipayPaymentController.java | 2 +- .../controller/WxPaymentController.java | 284 +++++++++++++++--- .../payment/domain/XhpcAppInternetUser.java | 91 ++++++ .../XhpcUserAccountStatementMapper.java | 6 + .../service/IXhpcRechargeOrderService.java | 3 +- .../impl/XhpcRechargeOrderServiceImpl.java | 6 +- .../mapper/XhpcRechargeOrderMapper.xml | 19 +- .../mapper/XhpcUserAccountStatementMapper.xml | 9 + xhpc-modules/xhpc-user/pom.xml | 33 +- .../XhpcAppInternetUserController.java | 28 ++ .../controller/XhpcAppUserController.java | 2 + .../user/controller/XhpcCommonController.java | 4 +- .../xhpc/user/domain/XhpcAppInternetUser.java | 91 ++++++ .../mapper/XhpcAppInternetUserMapper.java | 34 +++ .../xhpc/user/mapper/XhpcCommonMapper.java | 5 + .../service/IXhpcAppInternetUserService.java | 10 + .../impl/XhpcAppInternetUserServiceImpl.java | 83 +++++ .../service/impl/XhpcAppUserServiceImpl.java | 2 +- .../service/impl/XhpcCommonServiceImpl.java | 2 + .../mapper/XhpcAppInternetUserMapper.xml | 159 ++++++++++ .../resources/mapper/XhpcCommonMapper.xml | 43 +++ 33 files changed, 1211 insertions(+), 61 deletions(-) create mode 100644 xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcAppInternetUser.java create mode 100644 xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppInternetUserController.java create mode 100644 xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/domain/XhpcAppInternetUser.java create mode 100644 xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcAppInternetUserMapper.java create mode 100644 xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/IXhpcAppInternetUserService.java create mode 100644 xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppInternetUserServiceImpl.java create mode 100644 xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcAppInternetUserMapper.xml diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java index 3596e506..d2d2197c 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java @@ -171,4 +171,60 @@ public class QueryTokenController { } return resp; } + @PostMapping("/v20/query_token") + public CommonResponse queryTokenV20(@RequestHeader(value = "enc.out", defaultValue = "true") String encout, + @RequestBody TokenRequest tokenRequest) throws IOException { + log.debug("<org.springframework spring-web + + com.alipay.sdk + alipay-sdk-java + 4.35.171.ALL + compile + + + com.aliyun.oss + aliyun-sdk-oss + 3.16.1 + compile + diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java index 30ea91a7..57a70c8a 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java @@ -207,4 +207,23 @@ public class XhpcChargeOrderController extends BaseController { return null; } + /** + * 川逸充启动充电 + * @param userId + * @param serialNumber 终端编码 + * @param type 1 微信 + * @param type 1 微信 + * @return + */ + @GetMapping("/cycStartUp") + public R cycStartUp(HttpServletRequest request, @RequestParam Long userId, @RequestParam String serialNumber, @RequestParam Integer type,@RequestParam Integer source,@RequestParam BigDecimal money,@RequestParam String phone,@RequestParam String PlateNum){ + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<川逸充启动充电>>>>>>>>>>>>>>>>>"+serialNumber); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<川逸充启动充电:userId>>>>>>>>>>>>>>>>>"+userId); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<川逸充启动充电:source>>>>>>>>>>>>>>>>>"+source); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<川逸充启动充电金额:money>>>>>>>>>>>>>>>>>"+money); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<川逸充启动充电手机:phone>>>>>>>>>>>>>>>>>"+phone); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<川逸充启动充电手机:PlateNum>>>>>>>>>>>>>>>>>"+PlateNum); + return iXhpcChargeOrderService.cycStartUp(request,userId, serialNumber, type,source,money,phone,PlateNum); + } + } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java index 565cc1dc..64c1b7c9 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java @@ -108,8 +108,10 @@ public class XhpcPileOrderController extends BaseController { message = tenantId + UserTypeUtil.USER + userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message = tenantId + UserTypeUtil.COMMUNIT + userId; - }else{ + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } //消息对了内容 if(xhpcChargeOrder.getSource()==0){ @@ -212,8 +214,10 @@ public class XhpcPileOrderController extends BaseController { message = tenantId + UserTypeUtil.USER + userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message = tenantId + UserTypeUtil.COMMUNIT + userId; - }else{ + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } if(xhpcChargeOrder.getSource()==0){ map.put("code", code); @@ -373,8 +377,10 @@ public class XhpcPileOrderController extends BaseController { message = tenantId + UserTypeUtil.USER + userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message = tenantId + UserTypeUtil.COMMUNIT + userId; - }else{ + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } redisService.setCacheMap("realTimeTenantId:"+message,map); webSocketService.getMessage(message,json.toString()); @@ -391,8 +397,10 @@ public class XhpcPileOrderController extends BaseController { message = tenantId + UserTypeUtil.USER + userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message = tenantId + UserTypeUtil.COMMUNIT + userId; - }else{ + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } if(xhpcChargeOrder.getSource()==0){ //消息对了内容 @@ -514,8 +522,10 @@ public class XhpcPileOrderController extends BaseController { message=tenantId+UserTypeUtil.USER+userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message=tenantId+UserTypeUtil.COMMUNIT+userId; - }else{ - message=tenantId+UserTypeUtil.CUSTOMERS+userId; + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } webSocketService.getMessage(message,json.toString()); } @@ -742,8 +752,10 @@ public class XhpcPileOrderController extends BaseController { message=tenantId+UserTypeUtil.USER+userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message=tenantId+UserTypeUtil.COMMUNIT+userId; - }else{ - message=tenantId+UserTypeUtil.CUSTOMERS+userId; + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } webSocketService.getMessage(message,json.toString()); } @@ -762,8 +774,10 @@ public class XhpcPileOrderController extends BaseController { message=tenantId+UserTypeUtil.USER+userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message=tenantId+UserTypeUtil.COMMUNIT+userId; - }else{ - message=tenantId+UserTypeUtil.CUSTOMERS+userId; + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } webSocketService.getMessage(message,json.toString()); } @@ -833,8 +847,10 @@ public class XhpcPileOrderController extends BaseController { message=tenantId+UserTypeUtil.USER+userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ message=tenantId+UserTypeUtil.COMMUNIT+userId; - }else{ - message=tenantId+UserTypeUtil.CUSTOMERS+userId; + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.CUSTOMERS + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; } webSocketService.getMessage(message,json.toString()); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java index 485b777b..218875d2 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java @@ -182,4 +182,13 @@ public interface IXhpcChargeOrderService { Map getXhpcBarrierGate(Long chargingStationId); + + + /** + * 启动充电 + * @param userId + * @param serialNumber 终端编码 + * @return + */ + R cycStartUp(HttpServletRequest request, Long userId, String serialNumber, Integer type,Integer source,BigDecimal money,String phone,String PlateNum); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java index 054637a7..b9779967 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java @@ -1312,6 +1312,176 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar return xhpcChargeOrderMapper.getXhpcBarrierGate(chargingStationId); } + @Override + public R cycStartUp(HttpServletRequest request, Long userId, String serialNumber, Integer type, Integer source,BigDecimal money,String phone,String PlateNum) { + + R r = new R(); + //川逸充的对接平爱operatorId + String operatorIdEvcs =""; + int resTime = xhpcInternetUserMapper.selectByOperatorIdEvcs(operatorIdEvcs); + if (resTime == 0) { + r.setCode(500); + r.setMsg("运营商无权限对此桩进行操作"); + return r; + } + //运营商该场站是否参与第三方充电 + int black = xhpcInternetUserMapper.getXhpcStationInternetBlacklist(operatorIdEvcs, serialNumber); + if (black > 0) { + r.setCode(500); + r.setMsg("场站不支持该流量方充电"); + return r; + } + StartChargingData startChargingData = new StartChargingData(); + startChargingData.setBalance(money.multiply(new BigDecimal(100)).intValue()); + startChargingData.setGunId(serialNumber); + startChargingData.setTel(phone); + startChargingData.setPileNo(serialNumber.substring(0, serialNumber.length() - 3)); + + XhpcTerminal xhpcTerminal = xhpcChargeOrderMapper.getXhpcTerminalSerialNumber(serialNumber,null); + if (xhpcTerminal == null || xhpcTerminal.getTerminalId() == null || xhpcTerminal.getChargingPileId() == null || xhpcTerminal.getPileSerialNumber() == null) { + r.setCode(500); + r.setMsg("因限电该桩已停用请选择其他桩进行充电"); + return r; + }else { + if(xhpcTerminal.getStatus()==1){ + if(xhpcTerminal.getPrompt() !=null){ + r.setMsg(xhpcTerminal.getPrompt()); + }else{ + r.setMsg("桩已停用,请选择其他桩进行充电"); + } + return r; + } + } + //终端状态是否空闲\是否插枪 + Map cacheMap = REDIS.getCacheMap("gun:" + serialNumber); + logger.info("<<<<<<<<<<<<<<<<<川逸充<<<<<<>>>>>>>>>>>>>>>>"); + logger.info("<<<<<<<<<<<<<<<<<川逸充<<<<<<>>>>>>>>>>>>>>>>" + serialNumber); + logger.info("<<<<<<<<<<<<<<<<<川逸充<<<<<<>>>>>>>>>>>>>>>>" + cacheMap.toString()); + logger.info("<<<<<<<<<<<<<<<<<川逸充<<<<<<>>>>>>>>>>>>>>>>"); + if (cacheMap == null) { + r.setCode(500); + r.setMsg("未注册的终端,请选择其他终端充电"); + return r; + } else { + if (cacheMap.get("status") == null) { + r.setCode(500); + r.setMsg("未知的终端状态"); + return r; + } else { + String statusCache = cacheMap.get("status").toString(); + //不同的状态 + if ("离线".equals(statusCache) || "故障".equals(statusCache) || "充电".equals(statusCache)) { + if ("离线".equals(statusCache)) { + r.setCode(2); + } else { + r.setCode(500); + } + r.setMsg("此终端" + statusCache + "中,请选择其他终端充电"); + return r; + } + } + if (cacheMap.get("vehicleGunStatus") == null) { + r.setCode(500); + r.setMsg("未知的枪状态"); + return r; + } else { + String vehicleGunStatus = cacheMap.get("vehicleGunStatus").toString(); + if (!"是".equals(vehicleGunStatus)) { + r.setCode(500); + r.setMsg("未插枪"); + return r; + } + } + } + //启动充电 + //订单流水号 终端号+年月日时分秒+自增4位 共32位 + Date date = Calendar.getInstance().getTime(); + String format = DateUtil.format(date, "yyMMddHHmmss"); + String format1 = DateUtil.format(date, "yyyyMMddHHmmss"); + //自增 + String orderNo = serialNumber + format + StaticBeanUtil.seqDec("gun:" + serialNumber + ".seqdec"); + + startChargingData.setOrderNo(orderNo); + startChargingData.setPileNo(xhpcTerminal.getPileSerialNumber()); + startChargingData.setGunId(xhpcTerminal.getSerialNumber().substring(14)); + startChargingData.setVersion("0A"); + //桩、平台(最小的) + int number =0; + //平台 + String soc = redisService.getCacheObject("global:"+xhpcTerminal.getTenantId()+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } + } + Map operatorMessage = xhpcChargeOrderMapper.getOperatorMessage(xhpcTerminal.getChargingStationId()); + if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc"))){ + if(number!=0){ + if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + number=Integer.parseInt(operatorMessage.get("soc").toString()); + } + }else{ + number=Integer.parseInt(operatorMessage.get("soc").toString()); + } + + } + startChargingData.setSoc(number); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>:" + number); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>:" + startChargingData.getSoc()); + String startTime = DateUtil.format(date, "yyyy-MM-dd HH: mm: ss"); + Map extraData1 = xhpcChargeOrderMapper.selectDate3rdNeedBy(serialNumber).get(0); + Long terminalId = (Long) extraData1.get("terminalId"); + Double power = (Double) extraData1.get("power"); + Long chargingStationId = (Long) extraData1.get("chargingStationId"); + + XhpcChargeOrder xhpcChargeOrder =new XhpcChargeOrder(); + xhpcChargeOrder.setChargingStationId(chargingStationId); + xhpcChargeOrder.setInternetSerialNumber(operatorIdEvcs.substring(0, 9)+format1 + StaticBeanUtil.seqDec("gun:" + serialNumber + ".seqdec")); + xhpcChargeOrder.setSerialNumber(orderNo); + xhpcChargeOrder.setDriverId(phone); + xhpcChargeOrder.setChargingAmt(money.intValue()); + xhpcChargeOrder.setPlateNum(PlateNum); + xhpcChargeOrder.setStatus(-1); + xhpcChargeOrder.setCreateTime(new Date()); + xhpcChargeOrder.setTerminalId(terminalId); + xhpcChargeOrder.setPower(power == null ? "120" : power.toString()); + xhpcChargeOrder.setSource(1); + xhpcChargeOrder.setUserId(userId); + xhpcChargeOrder.setChargingMode("川逸充"); + int res = xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); + logger.info("<<<<<<<<<<<<<<<<<<<<<<<<第三方启动订单号>>>>>>>>>>>>>>>>>:" + xhpcChargeOrder.getInternetSerialNumber()); + executorService.execute(new Runnable() { + @Override + public void run() { + R r1 = powerPileService.startCharging(startChargingData); + try { + Long rateModelId = Long.valueOf(r1.getData().toString()); + xhpcChargeOrder.setRateModelId(rateModelId); + xhpcChargeOrderMapper.updateXhpcChargeOrder(xhpcChargeOrder); + } catch (Exception e) { + e.printStackTrace(); + logger.error("update order[{}] failed.", orderNo); + } + } + }); + Map data = new HashMap<>(); + data.put("startTime", startTime); + data.put("orderNo", orderNo); + r.setData(data); + if (res != 0) { + r.setCode(200); + r.setMsg("成功"); + } else { + r.setCode(500); + r.setMsg("内部服务调用错误"); + } + return r; + } + public static void main(String[] args) { try{ // //String alipayPublicKey1 = getAlipayPublicKey("C:\\Users\\Administrator\\Downloads\\alipayCertPublicKey_RSA2.crt"); diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml index dc1175f4..e8acb08b 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml @@ -949,7 +949,11 @@ DATE_FORMAT(ho.end_time,'%m月%d日') as daysTwo, DATE_FORMAT(ho.end_time,'%H:%i:%s') as timeTwo, co.status as status, - co.type as type, + ho.start_soc as startSoc, + ho.end_soc as endSoc, + ho.internet_serial_number as internetSerialNumber, + te.serial_number as terminalSerialNumber, + co.Plate_num as plateNum, ho.stop_reason_evcs as typeName FROM xhpc_history_order as ho LEFT JOIN xhpc_charging_station as cs on cs.charging_station_id = ho.charging_station_id diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java index 57049562..69fd1fd8 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java @@ -124,7 +124,7 @@ public class AlipayPaymentController { return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "支付宝充值失败,继续充值请联系客服"); } //生成充值订单 - XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId+"", new BigDecimal(amount), "2", orderNumber,userType); + XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId+"", new BigDecimal(amount), "2", orderNumber,userType,null); String attach = attachYu(StringUtils.valueOf(xhpcRechargeOrder.getRechargeOrderId()), StringUtils.valueOf(amount), null, orderNumber); /** 初始化 **/ diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java index 9bc0fd4a..450aa9da 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java @@ -1,5 +1,6 @@ package com.xhpc.payment.controller; +import com.xhpc.common.api.PileOrderService; import com.xhpc.common.api.PowerPileService; import com.xhpc.common.api.UserTypeService; import com.xhpc.common.core.annotation.NoRepeatSubmit; @@ -14,6 +15,7 @@ import com.xhpc.common.log.annotation.Log; import com.xhpc.common.log.enums.BusinessType; import com.xhpc.common.security.service.TokenService; import com.xhpc.common.util.UserTypeUtil; +import com.xhpc.payment.domain.XhpcAppInternetUser; import com.xhpc.payment.domain.XhpcAppUser; import com.xhpc.common.domain.XhpcRechargeOrder; import com.xhpc.common.domain.XhpcSettingConfig; @@ -71,6 +73,8 @@ public class WxPaymentController { @Autowired private PowerPileService powerPileService; @Autowired + private PileOrderService pileOrderService; + @Autowired private TokenService tokenService; @Autowired private UserTypeService userTypeService; @@ -128,10 +132,10 @@ public class WxPaymentController { } XhpcSettingConfig xhpcSettingConfig = xhpcCommonPayment.getXhpcSettingConfigTenantId(UserTypeUtil.OPERATION_WX_TYPE, tenantId); if(xhpcSettingConfig ==null){ - return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "支付宝充值失败,继续充值请联系客服"); + return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "微信充值失败,继续充值请联系客服"); } //生成充值订单 - XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId, new BigDecimal(amount), "1", orderNumber,userType); + XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId, new BigDecimal(amount), "1", orderNumber,userType,null); //附加数据(否) String attach = attachYu(StringUtils.valueOf(xhpcRechargeOrder.getRechargeOrderId()), StringUtils.valueOf(amount), null, orderNumber); //商品描述(是) @@ -374,7 +378,7 @@ public class WxPaymentController { */ @RequestMapping("/test") public void test() { - paymentCallback("000002020210820142215119", "4200001189202108202038629329"); + paymentCallback("001000020240320230930112", "4200002216202403204978228278"); } /** @@ -390,42 +394,79 @@ public class WxPaymentController { XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.infoRechargeOrderNumber(out_trade_no); if (StringUtils.isNotNull(xhpcRechargeOrder)) { if(xhpcRechargeOrder.getStatus() == 0){ - //修改充值订单状态 - iXhpcRechargeOrderService.updateRechargeOrder(xhpcRechargeOrder.getRechargeOrderId(), StatusConstants.OPERATION_WX_TYPE, StatusConstants.RECHARGE_ORDER_STATUS_SUCCESS, transaction_id); - Long userId = xhpcRechargeOrder.getUserId(); - Integer source = xhpcRechargeOrder.getSource(); - String tenantId = xhpcRechargeOrder.getTenantId(); - R user = userTypeService.getUser(null,userId, source, null, tenantId); - if(user !=null && user.getData() !=null){ - Map map = (Map)user.getData(); - String balance = StringUtils.valueOf(map.get("balance")); - BigDecimal money = BigDecimal.valueOf(Double.valueOf(balance)).add(xhpcRechargeOrder.getAmount()); - //判断用户是否在充电中 - String serialMumber = xhpcUserAccountStatementMapper.getUserHistotyChargeOrder(xhpcRechargeOrder.getUserId(),source,tenantId); - logger.info("<<<<<<<<<<<<充电终端>>>>>>>>>serialMumber:"+serialMumber); - if(!"".equals(serialMumber) && serialMumber !=null){ - //充电中 - postRefreshBalance(money, serialMumber); + if(xhpcRechargeOrder.getSource()==1){ + //修改充值订单状态 + Long userId = xhpcRechargeOrder.getUserId(); + Integer source = xhpcRechargeOrder.getSource(); + String tenantId = xhpcRechargeOrder.getTenantId(); + R user = userTypeService.getUser(null,userId, source, null, tenantId); + if(user !=null && user.getData() !=null){ + Map map = (Map)user.getData(); + String balance = StringUtils.valueOf(map.get("balance")); + BigDecimal money = BigDecimal.valueOf(Double.valueOf(balance)).add(xhpcRechargeOrder.getAmount()); + iXhpcRechargeOrderService.updateRechargeOrder(xhpcRechargeOrder.getRechargeOrderId(), StatusConstants.OPERATION_WX_TYPE, StatusConstants.RECHARGE_ORDER_STATUS_SUCCESS, transaction_id); + if(UserTypeUtil.INTERNET_TYPE.equals(source)){ + //增加用户余额 + XhpcAppInternetUser xhpcAppUser = new XhpcAppInternetUser(); + xhpcAppUser.setAppInternetUserId(xhpcRechargeOrder.getUserId()); + xhpcAppUser.setBalance(money); + xhpcUserAccountStatementMapper.updateAppInternetUserBalance(xhpcAppUser); + + XhpcUserAccountStatement xhpcUserAccountStatement = new XhpcUserAccountStatement(); + xhpcUserAccountStatement.setType(StatusConstants.FLOWING_WATER_RECHARGE_TYPE); + xhpcUserAccountStatement.setRechargeOrderId(xhpcRechargeOrder.getRechargeOrderId()); + xhpcUserAccountStatement.setUserId(xhpcRechargeOrder.getUserId()); + xhpcUserAccountStatement.setAmount(xhpcRechargeOrder.getAmount()); + xhpcUserAccountStatement.setRemainingSum(xhpcAppUser.getBalance()); + xhpcUserAccountStatement.setCreateTime(new Date()); + xhpcUserAccountStatement.setRemark("微信充值订单!"); + xhpcUserAccountStatement.setSource(source); + xhpcUserAccountStatementMapper.insert(xhpcUserAccountStatement); + //启动充电 + pileOrderService.cycStartUp(userId,xhpcRechargeOrder.getSerialNumber(),1,1,money,map.get("phone").toString(),map.get("plateNum").toString()); + + } } - if(UserTypeUtil.USER_TYPE.equals(source)){ - //增加用户余额 - XhpcAppUser xhpcAppUser = new XhpcAppUser(); - xhpcAppUser.setAppUserId(xhpcRechargeOrder.getUserId()); - xhpcAppUser.setBalance(money); - xhpcUserAccountStatementMapper.updateAppUserBalance(xhpcAppUser); - XhpcUserAccountStatement xhpcUserAccountStatement = new XhpcUserAccountStatement(); - xhpcUserAccountStatement.setType(StatusConstants.FLOWING_WATER_RECHARGE_TYPE); - xhpcUserAccountStatement.setRechargeOrderId(xhpcRechargeOrder.getRechargeOrderId()); - xhpcUserAccountStatement.setUserId(xhpcRechargeOrder.getUserId()); - xhpcUserAccountStatement.setAmount(xhpcRechargeOrder.getAmount()); - xhpcUserAccountStatement.setRemainingSum(xhpcAppUser.getBalance()); - xhpcUserAccountStatement.setCreateTime(new Date()); - xhpcUserAccountStatement.setRemark("微信充值订单!"); - xhpcUserAccountStatementMapper.insert(xhpcUserAccountStatement); - }else{ - //增加用户余额 - userTypeService.insertUserBalance(xhpcRechargeOrder.getAmount(),userId,source,tenantId, UserTypeUtil.RECHARGE_WX,UserTypeUtil.INSERT_BALANCE,null,xhpcRechargeOrder.getRechargeOrderId()); + + }else{ + //修改充值订单状态 + iXhpcRechargeOrderService.updateRechargeOrder(xhpcRechargeOrder.getRechargeOrderId(), StatusConstants.OPERATION_WX_TYPE, StatusConstants.RECHARGE_ORDER_STATUS_SUCCESS, transaction_id); + + Long userId = xhpcRechargeOrder.getUserId(); + Integer source = xhpcRechargeOrder.getSource(); + String tenantId = xhpcRechargeOrder.getTenantId(); + R user = userTypeService.getUser(null,userId, source, null, tenantId); + if(user !=null && user.getData() !=null){ + Map map = (Map)user.getData(); + String balance = StringUtils.valueOf(map.get("balance")); + BigDecimal money = BigDecimal.valueOf(Double.valueOf(balance)).add(xhpcRechargeOrder.getAmount()); + //判断用户是否在充电中 + String serialMumber = xhpcUserAccountStatementMapper.getUserHistotyChargeOrder(xhpcRechargeOrder.getUserId(),source,tenantId); + logger.info("<<<<<<<<<<<<充电终端>>>>>>>>>serialMumber:"+serialMumber); + if(!"".equals(serialMumber) && serialMumber !=null){ + //充电中 + postRefreshBalance(money, serialMumber); + } + if(UserTypeUtil.USER_TYPE.equals(source)){ + //增加用户余额 + XhpcAppUser xhpcAppUser = new XhpcAppUser(); + xhpcAppUser.setAppUserId(xhpcRechargeOrder.getUserId()); + xhpcAppUser.setBalance(money); + xhpcUserAccountStatementMapper.updateAppUserBalance(xhpcAppUser); + XhpcUserAccountStatement xhpcUserAccountStatement = new XhpcUserAccountStatement(); + xhpcUserAccountStatement.setType(StatusConstants.FLOWING_WATER_RECHARGE_TYPE); + xhpcUserAccountStatement.setRechargeOrderId(xhpcRechargeOrder.getRechargeOrderId()); + xhpcUserAccountStatement.setUserId(xhpcRechargeOrder.getUserId()); + xhpcUserAccountStatement.setAmount(xhpcRechargeOrder.getAmount()); + xhpcUserAccountStatement.setRemainingSum(xhpcAppUser.getBalance()); + xhpcUserAccountStatement.setCreateTime(new Date()); + xhpcUserAccountStatement.setRemark("微信充值订单!"); + xhpcUserAccountStatementMapper.insert(xhpcUserAccountStatement); + }else{ + //增加用户余额 + userTypeService.insertUserBalance(xhpcRechargeOrder.getAmount(),userId,source,tenantId, UserTypeUtil.RECHARGE_WX,UserTypeUtil.INSERT_BALANCE,null,xhpcRechargeOrder.getRechargeOrderId()); + } } } } @@ -524,4 +565,173 @@ public class WxPaymentController { return null; } + + + @Log(title = "川逸充-微信-支付", businessType = BusinessType.INSERT) + //@NoRepeatSubmit(lockTime = 3) + @PostMapping("/cycPayment") + @ApiOperation(value = "微信支付") + public AjaxResult cycPayment(HttpServletRequest servletRequest, @RequestBody Map map) throws Exception { + + //总金额(是)订单总金额,单位为分 + String amount = StringUtils.valueOf(map.get("amount")); + if (StringUtils.isEmpty(amount)) { + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能为空"); + }else{ + if(new BigDecimal(5).compareTo(new BigDecimal(amount))==1){ + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能少于5元"); + } + if(new BigDecimal(600).compareTo(new BigDecimal(amount))==-1){ + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能大于600元"); + } + } + //用户信息id + if(map.get("userId") ==null || "".equals(map.get("userId").toString())){ + return AjaxResult.error(HttpStatus.NOT_NULL, "请重新进入启动充电页面"); + } + if(map.get("serialNumber") ==null || "".equals(map.get("serialNumber").toString())){ + return AjaxResult.error(HttpStatus.NOT_NULL, "请重新进入启动充电页面"); + } + if(map.get("userType") ==null || "".equals(map.get("userType").toString())){ + return AjaxResult.error(HttpStatus.NOT_NULL, "请重新进入启动充电页面"); + } + if(map.get("tenantId") ==null || "".equals(map.get("tenantId").toString())){ + return AjaxResult.error(HttpStatus.NOT_NULL, "请重新进入启动充电页面"); + } + if(map.get("PlateNum") ==null || "".equals(map.get("PlateNum").toString())){ + return AjaxResult.error(HttpStatus.NOT_NULL, "请重新进入启动充电页面"); + } + Long userId = Long.valueOf(map.get("userId").toString()); + Integer userType = Integer.parseInt(map.get("userType").toString()); + String tenantId = StringUtils.valueOf(map.get("tenantId")); + String serialNumber = StringUtils.valueOf(map.get("serialNumber")); + if(UserTypeUtil.INTERNET_TYPE.equals(userType.toString())){ + return AjaxResult.error(HttpStatus.ERROR_STATUS, "只支持川逸充用户充值"); + } + + XhpcAppInternetUser xhpcAppUser = new XhpcAppInternetUser(); + xhpcAppUser.setAppInternetUserId(userId); + xhpcAppUser.setPlateNum(map.get("PlateNum").toString()); + xhpcUserAccountStatementMapper.updateAppInternetUserBalance(xhpcAppUser); + +// Map refundOrder = iXhpcRefundOrderService.getNotRefundOrder(userId,userType,tenantId); +// if (StringUtils.isNotNull(refundOrder)) { +// return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "用户存正在退款"); +// } + + //是否在充电 + int i = iXhpcRefundOrderService.countXhpcRealTimeOrder(userId, userType, tenantId); + if (i>0) { + return AjaxResult.error(1102, "车辆正在充电,请查询车辆充电信息"); + } + + BigDecimal amount1 = new BigDecimal(amount).multiply(new BigDecimal(100)); + String orderNumber = StringUtils.numFormat(userId, 1, StatusConstants.FLOWING_WATER_RECHARGE_TYPE); + if (amount1.compareTo(new BigDecimal(0.0))==0) { + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能为0"); + } + XhpcSettingConfig xhpcSettingConfig = xhpcCommonPayment.getXhpcSettingConfigTenantId(UserTypeUtil.OPERATION_WX_TYPE, tenantId); + if(xhpcSettingConfig ==null){ + return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "微信充值失败,继续充值请联系客服"); + } + //生成充值订单 + XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId+"", new BigDecimal(amount), "1", orderNumber,userType,serialNumber); + //附加数据(否) + String attach = attachYu(StringUtils.valueOf(xhpcRechargeOrder.getRechargeOrderId()), StringUtils.valueOf(amount), null, orderNumber); + //商品描述(是) + String body = "用户充值"; + //商户订单号(是) + String outTradeNo = orderNumber; + int Fee = amount1.intValue(); + //终端ip(是) + String spbillCreateIp = getRemoteLoginUserIp(servletRequest); + //交易类型(是) + String tradeType = "MWEB"; + Date date = new Date(); + //微信过期时间格式 + SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMddHHmmss"); + //过期时间半个小时 + Date expireTime = new Date(date.getTime() + StatusConstants.EXPIRE_TIME); + String timeStr = format1.format(expireTime); + //发送请求 + PrintWriter out = null; + BufferedReader in = null; + StringBuffer result = new StringBuffer(); + try { + URL realUrl = new URL(xhpcSettingConfig.getWxPaymentUrl()); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("Content-Type", "text/xml"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + out.print(createXMLParam(Fee, attach, tradeType, spbillCreateIp, outTradeNo, body, timeStr, xhpcSettingConfig.getWxCallbackUrl(), xhpcSettingConfig.getWxAppId(), xhpcSettingConfig.getWxMchId(), xhpcSettingConfig.getWxMchKey(), "")); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + System.out.println(result); + } + } catch (Exception e) { + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + //app + Map sign = cycCreateSign(result.toString()); + + if(sign!=null && sign.get("mwebUrl") !=null){ + return AjaxResult.success(sign); + } + return AjaxResult.error("支付失败,请重新进行入"); + } + + /** + * H5解析微信返回数据 + * + * @param result xml格式字符串 + * @return + */ + public Map cycCreateSign(String result) { + try { + Map map = WXPayUtil.xmlToMap(result); + String return_code = map.get("return_code"); + if ("FAIL".equals(return_code)) { + return null; + } else { + Map map1 = new HashMap<>(); + if("SUCCESS".equals(map.get("result_code"))){ + map1.put("tradeType", map.get("trade_type")); + map1.put("prepayId", map.get("prepay_id")); + map1.put("mwebUrl", map.get("mweb_url")); + } + return map1; + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } } diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcAppInternetUser.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcAppInternetUser.java new file mode 100644 index 00000000..6692ba98 --- /dev/null +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcAppInternetUser.java @@ -0,0 +1,91 @@ +package com.xhpc.payment.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import java.math.BigDecimal; + + +/** + * C端用户 xhpc_app_user + * + * @author ruoyi + */ +@Data +public class XhpcAppInternetUser extends BaseEntity { + + + /** + * 用户id + */ + private Long appInternetUserId; + + /** + * 手机号码 + */ + @Length(max = 11, message = "手机号码不能超过11位") + private String phone; + + /** + * weixin_open_id + */ + @Length(max = 50, message = "openId不能超过50位") + private String weixinOpenId; + + /** + * alipay_open_id + */ + @Length(max = 50, message = "openId不能超过50位") + private String alipayOpenId; + + /** + * 微信是否登录(0未登录 1已登录) + */ + private Integer weixinLogin; + + /** + * 支付宝是否登录(0未登录 1已登录) + */ + private Integer alipayLogin; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 余额 + */ + private BigDecimal balance; + + /** + * 密码(加密) + */ + private String password; + + /** + * 帐号状态 + */ + private Integer status; + + /** + * 是否有退款订单审核(0无 1有) + */ + private Integer isRefundApplication; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + private Integer soc; + + private Integer isRefund; + + private Integer socProtect; + + private String tenantId; + + private String plateNum; +} diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcUserAccountStatementMapper.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcUserAccountStatementMapper.java index 0738c2e7..eb118412 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcUserAccountStatementMapper.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcUserAccountStatementMapper.java @@ -1,5 +1,6 @@ package com.xhpc.payment.mapper; +import com.xhpc.payment.domain.XhpcAppInternetUser; import com.xhpc.payment.domain.XhpcAppUser; import com.xhpc.payment.domain.XhpcUserAccountStatement; import org.apache.ibatis.annotations.Param; @@ -47,6 +48,11 @@ public interface XhpcUserAccountStatementMapper { */ public int updateAppUserBalance(XhpcAppUser xhpcAppUser); + /** + * 更新川逸充用户余额 + */ + public int updateAppInternetUserBalance(XhpcAppInternetUser xhpcAppUser); + /** * 更新C端退款订单审核 * diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcRechargeOrderService.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcRechargeOrderService.java index 20eb80c5..f7df4d52 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcRechargeOrderService.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcRechargeOrderService.java @@ -76,9 +76,10 @@ public interface IXhpcRechargeOrderService { * @param appUserId C端用户id * @param amount 充值金额 * @param type 充值渠道(1微信 2支付宝) + * @param serialNumber 预充值的桩 * @return */ - public XhpcRechargeOrder addRechargeOrder(String appUserId, BigDecimal amount, String type, String orderNumber,Integer userType); + public XhpcRechargeOrder addRechargeOrder(String appUserId, BigDecimal amount, String type, String orderNumber,Integer userType,String serialNumber); /** * 修改订单状态 充值订单 diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcRechargeOrderServiceImpl.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcRechargeOrderServiceImpl.java index 9e8307ed..14833415 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcRechargeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcRechargeOrderServiceImpl.java @@ -156,7 +156,7 @@ public class XhpcRechargeOrderServiceImpl implements IXhpcRechargeOrderService { */ @Override @Transactional - public XhpcRechargeOrder addRechargeOrder(String appUserId, BigDecimal amount, String type, String orderNumber,Integer userType) { + public XhpcRechargeOrder addRechargeOrder(String appUserId, BigDecimal amount, String type, String orderNumber,Integer userType,String serialNumber) { XhpcRechargeOrder xhpcRechargeOrder = new XhpcRechargeOrder(); xhpcRechargeOrder.setUserId(Long.parseLong(appUserId)); xhpcRechargeOrder.setAmount(amount); @@ -164,6 +164,10 @@ public class XhpcRechargeOrderServiceImpl implements IXhpcRechargeOrderService { xhpcRechargeOrder.setType(Integer.parseInt(type)); xhpcRechargeOrder.setCreateTime(new Date()); xhpcRechargeOrder.setSource(userType); + if(serialNumber !=null && !"".equals(serialNumber)){ + xhpcRechargeOrder.setSerialNumber(serialNumber); + xhpcRechargeOrder.setPreRecharge(1); + } xhpcRechargeOrderMapper.insert(xhpcRechargeOrder); return xhpcRechargeOrder; } diff --git a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml index 6d8a3c55..904ff8e0 100644 --- a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml +++ b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml @@ -21,6 +21,9 @@ + + + - source + source, + + + serial_number, + + + pre_recharge, @@ -111,7 +120,13 @@ #{remark}, - #{source} + #{source}, + + + #{serialNumber}, + + + #{preRecharge}, diff --git a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml index bf610537..770129f7 100644 --- a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml +++ b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml @@ -168,6 +168,15 @@ WHERE app_user_id = #{appUserId} + + UPDATE xhpc_app_internet_user + + balance = #{balance}, + is_refund_application = #{isRefundApplication}, + plate_num = #{plateNum}, + + WHERE app_internet_user_id = #{appInternetUserId} + UPDATE xhpc_app_user diff --git a/xhpc-modules/xhpc-user/pom.xml b/xhpc-modules/xhpc-user/pom.xml index ec2e8ce7..a6fc7f26 100644 --- a/xhpc-modules/xhpc-user/pom.xml +++ b/xhpc-modules/xhpc-user/pom.xml @@ -19,9 +19,32 @@ 8 8 - + + + sonatype-nexus-snapshots + https://s01.oss.sonatype.org/content/repositories/snapshots + + + sonatype-nexus-staging + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + + - + + com.aliyun + credentials-java + LATEST + + + com.aliyun + ocr20191230 + 2.0.1 + + + com.aliyun + ocr_api20210707 + 2.0.3 + com.sun.mail javax.mail @@ -104,6 +127,12 @@ 3.10.2 compile + + com.aliyun + tea-console + 0.0.1 + compile + diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppInternetUserController.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppInternetUserController.java new file mode 100644 index 00000000..a644be0a --- /dev/null +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppInternetUserController.java @@ -0,0 +1,28 @@ +package com.xhpc.user.controller; + +import com.xhpc.common.core.domain.R; +import com.xhpc.user.service.IXhpcAppInternetUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("/appInternetUser") +@Api(value = "川逸充登录接口", tags = "川逸充登录接口") +public class XhpcAppInternetUserController { + + @Resource + private IXhpcAppInternetUserService xhpcAppInternetUserService; + + @ApiOperation("川逸充登录") + @PostMapping("/cycLogin") + public R cycLogin(@RequestBody Map map) { + return xhpcAppInternetUserService.cycLogin(map); + } +} diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java index 0b418c29..6d827f68 100644 --- a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java @@ -667,11 +667,13 @@ public class XhpcAppUserController extends BaseController { } return R.ok(map); }else{ + System.out.println("=======1====请重新上传行驶证=========appUserId:"+appUserId+"====source:"+source+"="); return R.fail("请重新上传行驶证"); } }catch (Exception e){ e.printStackTrace(); } + System.out.println("=======2====请重新上传行驶证=========appUserId:"+appUserId+"====source:"+source+"="); return R.fail("请重新上传行驶证"); } diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcCommonController.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcCommonController.java index 10d6afaf..752b0f5d 100644 --- a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcCommonController.java +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcCommonController.java @@ -44,7 +44,7 @@ public class XhpcCommonController extends BaseController { public R getMechanism(String phone, Long userId, Integer userType, String serialNumber, String tenantId) { if (phone != null || "".equals(phone)) { - if (!UserTypeUtil.COMMUNIT.equals(phone.substring(0, 2)) && !UserTypeUtil.CUSTOMERS.equals(phone.substring(0, 2))) { + if (!UserTypeUtil.COMMUNIT.equals(phone.substring(0, 2)) && !UserTypeUtil.CUSTOMERS.equals(phone.substring(0, 2)) && UserTypeUtil.USER_TYPE ==userType) { //C端用户 return R.ok(xhpcCommonService.getLandUser(phone, null, UserTypeUtil.USER_TYPE, serialNumber, tenantId)); } else if (UserTypeUtil.COMMUNIT.equals(phone.substring(0, 2))) { @@ -53,6 +53,8 @@ public class XhpcCommonController extends BaseController { } else if (UserTypeUtil.CUSTOMERS.equals(phone.substring(0, 2))) { //大客户用户 return R.ok(xhpcCommonService.getLandUser(phone, null, UserTypeUtil.CUSTOMERS_TYPE, serialNumber, tenantId)); + }else if(UserTypeUtil.INTERNET_TYPE ==userType){ + return R.ok(xhpcCommonService.getLandUser(phone, null, UserTypeUtil.INTERNET_TYPE, serialNumber, tenantId)); } }else{ return R.ok(xhpcCommonService.getLandUser(null, userId, userType, serialNumber, tenantId)); diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/domain/XhpcAppInternetUser.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/domain/XhpcAppInternetUser.java new file mode 100644 index 00000000..db353821 --- /dev/null +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/domain/XhpcAppInternetUser.java @@ -0,0 +1,91 @@ +package com.xhpc.user.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import java.math.BigDecimal; + + +/** + * C端用户 xhpc_app_user + * + * @author ruoyi + */ +@Data +public class XhpcAppInternetUser extends BaseEntity { + + + /** + * 用户id + */ + private Long appInternetUserId; + + /** + * 手机号码 + */ + @Length(max = 11, message = "手机号码不能超过11位") + private String phone; + + /** + * weixin_open_id + */ + @Length(max = 50, message = "openId不能超过50位") + private String weixinOpenId; + + /** + * alipay_open_id + */ + @Length(max = 50, message = "openId不能超过50位") + private String alipayOpenId; + + /** + * 微信是否登录(0未登录 1已登录) + */ + private Integer weixinLogin; + + /** + * 支付宝是否登录(0未登录 1已登录) + */ + private Integer alipayLogin; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 余额 + */ + private BigDecimal balance; + + /** + * 密码(加密) + */ + private String password; + + /** + * 帐号状态 + */ + private Integer status; + + /** + * 是否有退款订单审核(0无 1有) + */ + private Integer isRefundApplication; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + private Integer soc; + + private Integer isRefund; + + private Integer socProtect; + + private String tenantId; + + private String plateNum; +} diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcAppInternetUserMapper.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcAppInternetUserMapper.java new file mode 100644 index 00000000..a8534378 --- /dev/null +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcAppInternetUserMapper.java @@ -0,0 +1,34 @@ +package com.xhpc.user.mapper; + +import com.xhpc.system.api.domain.SysRole; +import com.xhpc.system.api.domain.SysUser; +import com.xhpc.user.domain.SysUserRole; +import com.xhpc.user.domain.XhpcAppInternetUser; +import com.xhpc.user.domain.XhpcAppUser; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 用户信息 数据层 + * + * @author ruoyi + */ +public interface XhpcAppInternetUserMapper { + + /** + * 手机号查询川逸充用户信息 + * + * @param mobile 手机号 + * @return 结果 + */ + XhpcAppInternetUser getXhpcAppInternetUserPhone(@Param("mobile") String mobile); + + int insert(XhpcAppInternetUser xhpcAppUser); + + + int getXhpcTerminal(@Param("deviceCode") String deviceCode); + +} diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcCommonMapper.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcCommonMapper.java index d1e02877..40bea8ee 100644 --- a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcCommonMapper.java +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/mapper/XhpcCommonMapper.java @@ -27,6 +27,11 @@ public interface XhpcCommonMapper { */ Map getCustomersUser(@Param("phone") String phone,@Param("userId")Long userId,@Param("serialNumber")String serialNumber,@Param("tenantId") String tenantId); + /** + * 川逸充用户信息 + */ + Map getAppInternetUser(@Param("phone") String phone,@Param("userId")Long userId,@Param("serialNumber")String serialNumber,@Param("tenantId") String tenantId); + List> getCommunityPersonnel(@Param("terminalId")Long terminalId,@Param("operatorId")Long operatorId,@Param("chargingStationId") Long chargingStationId, @Param("chargingPileId")Long chargingPileId, @Param("type")Integer type, @Param("name")String name , @Param("phone")String phone, @Param("account")String account,@Param("number") Integer number,@Param("userId") Long userId,@Param("tenantId")String tenantId,@Param("startTime")String startTime,@Param("endTime")String endTime); diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/IXhpcAppInternetUserService.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/IXhpcAppInternetUserService.java new file mode 100644 index 00000000..f485e6e8 --- /dev/null +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/IXhpcAppInternetUserService.java @@ -0,0 +1,10 @@ +package com.xhpc.user.service; + +import com.xhpc.common.core.domain.R; + +import java.util.Map; + +public interface IXhpcAppInternetUserService { + + public R cycLogin(Map map); +} diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppInternetUserServiceImpl.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppInternetUserServiceImpl.java new file mode 100644 index 00000000..aff454df --- /dev/null +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppInternetUserServiceImpl.java @@ -0,0 +1,83 @@ +package com.xhpc.user.service.impl; + +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.utils.SecurityUtils; +import com.xhpc.common.core.utils.StringUtils; +import com.xhpc.common.core.web.service.BaseService; +import com.xhpc.common.security.service.TokenService; +import com.xhpc.common.util.UserTypeUtil; +import com.xhpc.system.api.domain.SysUser; +import com.xhpc.system.api.model.LoginUser; +import com.xhpc.user.domain.XhpcAppInternetUser; +import com.xhpc.user.mapper.XhpcAppInternetUserMapper; +import com.xhpc.user.service.IXhpcAppInternetUserService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.Map; +@Service +public class XhpcAppInternetUserServiceImpl extends BaseService implements IXhpcAppInternetUserService { + + @Resource + private XhpcAppInternetUserMapper xhpcAppInternetUserMapper; + @Resource + private TokenService tokenService; + @Override + public R cycLogin(Map map) { + String deviceCode = StringUtils.valueOf(map.get("deviceCode")); + String mobile = StringUtils.valueOf(map.get("mobile")); + String pileCode = StringUtils.valueOf(map.get("pileCode")); + String thirdCode = StringUtils.valueOf(map.get("thirdCode")); + String token = StringUtils.valueOf(map.get("token")); + String sign = StringUtils.valueOf(map.get("sign")); + + if("".equals(mobile) || mobile ==null){ + return R.fail(500,"请重新扫码进入"); + } + if("".equals(deviceCode) || deviceCode ==null){ + return R.fail(500,"请重新扫码进入"); + } + if("".equals(pileCode) || pileCode ==null){ + return R.fail(500,"请重新扫码进入"); + } + //判断手机号是否存在,不存在添加该账号 + XhpcAppInternetUser appInternetUser = xhpcAppInternetUserMapper.getXhpcAppInternetUserPhone(mobile); + if(appInternetUser ==null){ + //添加账号 + XhpcAppInternetUser xhpcAppUser = new XhpcAppInternetUser(); + xhpcAppUser.setPhone(mobile); + String password = mobile.substring(mobile.length() - 6); + xhpcAppUser.setPassword(SecurityUtils.encryptPassword(password)); + xhpcAppUser.setCreateTime(new Date()); + xhpcAppUser.setTenantId("000000"); + xhpcAppInternetUserMapper.insert(xhpcAppUser); + appInternetUser = xhpcAppInternetUserMapper.getXhpcAppInternetUserPhone(mobile); + } + + //判断设备编号是否存在正确 + int xhpcTerminal = xhpcAppInternetUserMapper.getXhpcTerminal(pileCode); + if(xhpcTerminal !=1){ + return R.fail(500,"该充电桩异常,请选择其他充电桩"); + } + + //效验川逸充token + + + + LoginUser userInfo = new LoginUser(); + SysUser sysUser = new SysUser(); + sysUser.setUserName(appInternetUser.getPhone()); + sysUser.setUserId(appInternetUser.getAppInternetUserId()); + userInfo.setSysUser(sysUser); + userInfo.setUserType(UserTypeUtil.INTERNET_TYPE); + userInfo.setUsername(mobile); + userInfo.setUserid(appInternetUser.getAppInternetUserId()); + userInfo.setTenantId("000000"); + userInfo.setUserTypeUtil(UserTypeUtil.INTERNET); + + Map userToken = tokenService.createToken(userInfo); + userToken.put("phone",mobile); + return R.ok(userToken); + } +} diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppUserServiceImpl.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppUserServiceImpl.java index 4b0b6b3f..98584b65 100644 --- a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppUserServiceImpl.java +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcAppUserServiceImpl.java @@ -530,7 +530,7 @@ public class XhpcAppUserServiceImpl extends BaseService implements IXhpcAppUserU map.put("version",version); map.put("servicePhone",servicePhone); //获取最优的活动图片显示 - Map objectMap = activityDiscountTime(loginUser.getUserid(), new Date(), loginUser.getUserType(), null, loginUser.getTenantId()); +// Map objectMap = activityDiscountTime(loginUser.getUserid(), new Date(), loginUser.getUserType(), null, loginUser.getTenantId()); // if("1".equals(objectMap.get("state").toString())){ // map.put("activity",1); // map.put("activitySize",1); diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcCommonServiceImpl.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcCommonServiceImpl.java index c0da4e33..05ea1181 100644 --- a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcCommonServiceImpl.java +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/service/impl/XhpcCommonServiceImpl.java @@ -53,6 +53,8 @@ public class XhpcCommonServiceImpl extends BaseService implements IXhpcCommonSer return xhpcCommonMapper.getCommunityUser(phone,userId,serialNumber,tenantId); }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(type)){ return xhpcCommonMapper.getCustomersUser(phone,userId,serialNumber,tenantId); + }else if(UserTypeUtil.INTERNET_TYPE.equals(type)){ + return xhpcCommonMapper.getAppInternetUser(phone,userId,serialNumber,tenantId); } return new HashMap<>(); } diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcAppInternetUserMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcAppInternetUserMapper.xml new file mode 100644 index 00000000..92404c69 --- /dev/null +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcAppInternetUserMapper.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO xhpc_app_internet_user + + + app_internet_user_id, + + + phone, + + + weixin_open_id, + + + alipay_open_id, + + + weixin_login, + + + alipay_login, + + + avatar, + + + tenant_id, + + + balance, + + + password, + + + status, + + + is_refund_application, + + + del_flag, + + + create_by, + + + create_time, + + + update_by, + + + update_time, + + + remark, + + + soc + + + + + #{appInternetUserId}, + + + #{phone}, + + + #{weixinOpenId}, + + + #{alipayOpenId}, + + + #{weixinLogin}, + + + #{alipayLogin}, + + + #{avatar}, + + + #{tenantId}, + + + #{balance}, + + + #{password}, + + + #{status}, + + + #{isRefundApplication}, + + + #{delFlag}, + + + #{createBy}, + + + #{createTime}, + + + #{updateBy}, + + + #{updateTime}, + + + #{remark}, + + + #{soc} + + + + + + + diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml index 9b5e2751..4e175cbe 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml @@ -125,6 +125,49 @@ + + + + +