diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java index 8615000ee..b3895a5e6 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java @@ -3,20 +3,26 @@ package com.jsowell.api.uniapp; import com.alibaba.fastjson2.JSONObject; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.core.domain.AjaxResult; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; -import com.jsowell.pile.service.IOrderBasicInfoService; +import com.jsowell.common.util.file.AliyunOssUploadUtils; +import com.jsowell.common.util.file.FileUtils; import com.jsowell.pile.vo.uniapp.PileConnectorVO; import com.jsowell.service.PileService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; + @Anonymous @RestController @RequestMapping("/app-xcx-h5") @@ -25,9 +31,6 @@ public class JumpController extends BaseController { @Autowired private PileService pileService; - @Autowired - private IOrderBasicInfoService orderBasicInfoService; - /** * 查询充电桩详情 * http://localhost:8080/app-xcx-h5/pile/pileDetail/{pileSn} @@ -73,13 +76,25 @@ public class JumpController extends BaseController { } /** - * 更新接口 - * http://localhost:8080/app-xcx-h5/pile/updateOrderDetail + * 上传到阿里云oss + * http://localhost:8080/app-xcx-h5/uploadOSS + * @param file + * @return */ - @GetMapping("updateOrderDetail") - public RestApiResponse updateOrderDetail() { - orderBasicInfoService.updateElecAmount(); - return new RestApiResponse<>(); + @CrossOrigin + @PostMapping("/uploadOSS") + public AjaxResult uploadFileOSS(MultipartFile file) { + try { + String url = AliyunOssUploadUtils.uploadFile(file); + AjaxResult ajax = AjaxResult.success(); + ajax.put("url", url); + ajax.put("fileName", FileUtils.getName(url)); + ajax.put("newFileName", FileUtils.getName(url)); + ajax.put("originalFilename", file.getOriginalFilename()); + return ajax; + }catch (Exception e){ + return AjaxResult.error(e.getMessage()); + } } } diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java index 0767404da..728d97db9 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java @@ -244,7 +244,7 @@ public class OrderController extends BaseController { /** * 查询未开发票订单 - * 时间限制60天内 + * 时间限制15天内 * http://localhost:8080/uniapp/order/queryUninvoicedOrderList */ @PostMapping("/queryUninvoicedOrderList") diff --git a/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java b/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java index a0c34254b..b702e057f 100644 --- a/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java +++ b/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java @@ -3,13 +3,14 @@ package com.jsowell.lianlian; import com.alibaba.fastjson2.JSONObject; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; import com.jsowell.pile.dto.QueryEquipmentDTO; +import com.jsowell.pile.dto.QueryStartChargeDTO; import com.jsowell.pile.dto.QueryStationInfoDTO; import com.jsowell.thirdparty.domain.StationStatsInfo; import com.jsowell.thirdparty.service.LianLianService; -import com.jsowell.thirdparty.vo.EquipmentAuthVO; -import com.jsowell.thirdparty.vo.LianLianPageResponse; +import com.jsowell.thirdparty.vo.*; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -44,6 +45,9 @@ public class LianLianController extends BaseController { try { LianLianPageResponse pageResponse = lianLianService.query_stations_info(dto); response = new RestApiResponse<>(pageResponse); + }catch (BusinessException e) { + logger.error("联联平台查询充电站信息 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); }catch (Exception e) { logger.error("联联平台查询充电站信息 error", e); response = new RestApiResponse<>(e); @@ -67,6 +71,9 @@ public class LianLianController extends BaseController { } LianLianPageResponse pageResponse = lianLianService.query_station_status(StationIDs); response = new RestApiResponse<>(pageResponse); + }catch (BusinessException e) { + logger.error("联联平台查询充电站状态信息 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); }catch (Exception e) { logger.error("联联平台查询充电站状态信息 error", e); response = new RestApiResponse<>(e); @@ -87,6 +94,9 @@ public class LianLianController extends BaseController { try { StationStatsInfo stationStatsInfo = lianLianService.query_station_stats(dto); response = new RestApiResponse<>(stationStatsInfo); + }catch (BusinessException e) { + logger.error("联联平台查询统计信息 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); } catch (Exception e) { logger.error("联联平台查询统计信息 error", e); response = new RestApiResponse<>(e); @@ -107,6 +117,9 @@ public class LianLianController extends BaseController { try { EquipmentAuthVO equipmentAuthVO = lianLianService.query_equip_auth(dto); response = new RestApiResponse<>(equipmentAuthVO); + }catch (BusinessException e) { + logger.error("联联平台请求设备认证 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); } catch (Exception e) { logger.error("联联平台请求设备认证 error", e); response = new RestApiResponse<>(e); @@ -114,4 +127,75 @@ public class LianLianController extends BaseController { logger.info("联联平台请求设备认证 result :{}", response); return response; } + + /** + * 请求启动充电 + * @param dto + * @return + */ + @PostMapping("/query_start_charge") + public RestApiResponse query_start_charge(@RequestBody QueryStartChargeDTO dto) { + logger.info("联联平台请求启动充电 params :{}", JSONObject.toJSONString(dto)); + RestApiResponse response; + try { + QueryStartChargeVO queryStartChargeVO = lianLianService.query_start_charge(dto); + response = new RestApiResponse<>(queryStartChargeVO); + }catch (BusinessException e) { + logger.error("联联平台请求启动充电 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("联联平台请求启动充电 error", e); + response = new RestApiResponse<>(e); + } + logger.info("联联平台请求启动充电 result :{}", response); + return response; + } + + /** + * 查询充电状态 + * @param startChargeSeq + * @return + */ + @GetMapping("/query_equip_charge_status/{startChargeSeq}") + public RestApiResponse query_equip_charge_status(@PathVariable("startChargeSeq") String startChargeSeq) { + logger.info("联联平台查询充电状态 params :{}", startChargeSeq); + RestApiResponse response; + try { + QueryChargingStatusVO vo = lianLianService.query_equip_charge_status(startChargeSeq); + response = new RestApiResponse<>(vo); + }catch (BusinessException e) { + logger.error("联联平台查询充电状态 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("联联平台查询充电状态 error", e); + response = new RestApiResponse<>(e); + } + logger.info("联联平台查询充电状态 result :{}", response); + return response; + } + + /** + * 请求停止充电 + * @param dto + * @return + */ + @PostMapping("/query_stop_charge") + public RestApiResponse query_stop_charge(@RequestBody QueryStartChargeDTO dto) { + logger.info("联联平台请求停止充电 params :{}", JSONObject.toJSONString(dto)); + RestApiResponse response; + try { + QueryStopChargeVO queryStopChargeVO = lianLianService.query_stop_charge(dto); + response = new RestApiResponse<>(queryStopChargeVO); + }catch (BusinessException e) { + logger.error("联联平台请求停止充电 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("联联平台请求停止充电 error", e); + response = new RestApiResponse<>(e); + } + logger.info("联联平台请求停止充电 result :{}", response); + return response; + } + + } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java index b5a906c94..751e62ad1 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java @@ -101,14 +101,14 @@ public class MemberService { // 校验短信验证码 两种情况不能通过校验,1-验证码错误;2-超时 验证码10分钟有效 checkVerificationCode(dto); String merchantId = ""; - return memberRegisterAndLogin(dto.getMobileNumber(), merchantId, null); + return memberRegisterAndLogin(dto.getMobileNumber(), dto.getMerchantId(), dto.getOpenId()); } /** * 公共登陆注册方法 * @param phoneNumber 手机号 * @param merchantId 商户id - * @return + * @return token返给前端 */ private String memberRegisterAndLogin(String phoneNumber, String merchantId, String openId) { if (StringUtils.isBlank(phoneNumber)) { @@ -121,7 +121,7 @@ public class MemberService { MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumberAndMerchantId(phoneNumber, merchantId); if (Objects.isNull(memberBasicInfo)) { // 不存在则新增数据 - String memberId = IdUtils.getMemberId(); + String memberId = generateNewMemberId(); memberBasicInfo = new MemberBasicInfo(); memberBasicInfo.setStatus(Constants.ONE); memberBasicInfo.setMemberId(memberId); @@ -149,6 +149,17 @@ public class MemberService { return memberToken; } + private String generateNewMemberId() { + while (true) { + String memberId = IdUtils.getMemberId(); + // 通过memberId查询是否已经存在 + MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(memberId); + if (memberVO == null) { + return memberId; + } + } + } + /** * 微信一键登录 * @param dto diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index e0af62f28..a78b6e4fd 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -15,6 +15,7 @@ import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.InvoiceRecordEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.ykc.ActionTypeEnum; +import com.jsowell.common.enums.ykc.BillingTimeEnum; import com.jsowell.common.enums.ykc.OrderPayModeEnum; import com.jsowell.common.enums.ykc.OrderPayRecordEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum; @@ -796,6 +797,45 @@ public class OrderService { OrderDetailInfoVO.BillingDetails billingDetails = new OrderDetailInfoVO.BillingDetails(); BeanUtils.copyBeanProp(billingDetails, orderDetail); vo.setBillingDetails(billingDetails); + + // new 收费明细 + OrderDetailInfoVO.ChargeDetail sharp = new OrderDetailInfoVO.ChargeDetail(); + sharp.setPeriodType(BillingTimeEnum.SHARP.getLabel()); + sharp.setElectricityPrice(orderDetail.getSharpElectricityPrice()); + sharp.setServicePrice(orderDetail.getSharpServicePrice()); + BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity() == null ? BigDecimal.ZERO : orderDetail.getSharpUsedElectricity(); + sharp.setUsedElectricity(sharpUsedElectricity); + sharp.setElectricityAmount(sharp.getElectricityPrice().multiply(sharp.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + sharp.setServiceAmount(sharp.getServicePrice().multiply(sharp.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + + OrderDetailInfoVO.ChargeDetail peak = new OrderDetailInfoVO.ChargeDetail(); + peak.setPeriodType(BillingTimeEnum.PEAK.getLabel()); + peak.setElectricityPrice(orderDetail.getPeakElectricityPrice()); + peak.setServicePrice(orderDetail.getPeakServicePrice()); + BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity() == null ? BigDecimal.ZERO : orderDetail.getPeakUsedElectricity(); + peak.setUsedElectricity(peakUsedElectricity); + peak.setElectricityAmount(peak.getElectricityPrice().multiply(peak.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + peak.setServiceAmount(peak.getServicePrice().multiply(peak.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + + OrderDetailInfoVO.ChargeDetail flat = new OrderDetailInfoVO.ChargeDetail(); + flat.setPeriodType(BillingTimeEnum.FLAT.getLabel()); + flat.setElectricityPrice(orderDetail.getFlatElectricityPrice()); + flat.setServicePrice(orderDetail.getFlatServicePrice()); + BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity() == null ? BigDecimal.ZERO : orderDetail.getFlatUsedElectricity(); + flat.setUsedElectricity(flatUsedElectricity); + flat.setElectricityAmount(flat.getElectricityPrice().multiply(flat.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + flat.setServiceAmount(flat.getServicePrice().multiply(flat.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + + OrderDetailInfoVO.ChargeDetail valley = new OrderDetailInfoVO.ChargeDetail(); + valley.setPeriodType(BillingTimeEnum.VALLEY.getLabel()); + valley.setElectricityPrice(orderDetail.getValleyElectricityPrice()); + valley.setServicePrice(orderDetail.getValleyServicePrice()); + BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity() == null ? BigDecimal.ZERO : orderDetail.getValleyUsedElectricity(); + valley.setUsedElectricity(valleyUsedElectricity); + valley.setElectricityAmount(valley.getElectricityPrice().multiply(valley.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + valley.setServiceAmount(valley.getServicePrice().multiply(valley.getUsedElectricity()).setScale(2, BigDecimal.ROUND_DOWN)); + + vo.setChargeDetails(Lists.newArrayList(sharp, peak, flat, valley)); } // 用户信息 @@ -1010,9 +1050,9 @@ public class OrderService { } public List queryUninvoicedOrderList(QueryOrderDTO dto) { - int i = 60; + int i = 15; - // 查询最近60天完成的订单 + // 查询最近15天完成的订单 LocalDateTime dateTime = LocalDateTime.now().plusDays(-i); List orderList = orderBasicInfoService.getListByMemberIdAndOrderStatus(dto.getMemberId(), Lists.newArrayList("6"), dateTime); diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/common/CommonController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/common/CommonController.java index cf3052cf3..9f60fbacd 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/common/CommonController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/common/CommonController.java @@ -163,10 +163,16 @@ public class CommonController { } } + /** + * 上传到阿里云oss + * http://localhost:8080/common/uploadOSS + * @param file + * @return + * @throws Exception + */ @CrossOrigin @PostMapping("/uploadOSS") public AjaxResult uploadFileOSS(MultipartFile file) throws Exception { - System.out.println(file); try { String url = AliyunOssUploadUtils.uploadFile(file); AjaxResult ajax = AjaxResult.success(); @@ -174,6 +180,7 @@ public class CommonController { ajax.put("fileName", FileUtils.getName(url)); ajax.put("newFileName", FileUtils.getName(url)); ajax.put("originalFilename", file.getOriginalFilename()); + log.info("图片上传成功 url:{}", url); return ajax; }catch (Exception e){ return AjaxResult.error(e.getMessage()); diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java index 7fd5c6d2f..bed8b952a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java @@ -31,7 +31,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; -import java.util.Locale; /** * 会员基础信息Controller @@ -91,12 +90,12 @@ public class MemberBasicInfoController extends BaseController { /** * 新增会员基础信息 */ - @PreAuthorize("@ss.hasPermi('member:info:add')") - @Log(title = "会员基础信息", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody MemberBasicInfo memberBasicInfo) { - return toAjax(memberBasicInfoService.insertMemberBasicInfo(memberBasicInfo)); - } + // @PreAuthorize("@ss.hasPermi('member:info:add')") + // @Log(title = "会员基础信息", businessType = BusinessType.INSERT) + // @PostMapping + // public AjaxResult add(@RequestBody MemberBasicInfo memberBasicInfo) { + // return toAjax(memberBasicInfoService.insertMemberBasicInfo(memberBasicInfo)); + // } /** * 修改会员基础信息 diff --git a/jsowell-admin/src/main/resources/application-dev.yml b/jsowell-admin/src/main/resources/application-dev.yml index e473ec0c4..9e1bf715f 100644 --- a/jsowell-admin/src/main/resources/application-dev.yml +++ b/jsowell-admin/src/main/resources/application-dev.yml @@ -106,7 +106,7 @@ minio: aliyunoss: # 地域节点 - endpoint: oss-cn-shanghai.aliyuncs.com + endpoint: http://oss-cn-shanghai.aliyuncs.com # AccessKey accessKeyId: LTAI5tBgCN4xuxQF1HV9rf7t # AccessKey 秘钥 @@ -116,7 +116,7 @@ aliyunoss: # bucket下文件夹的路径 filehost: img # 访问域名 - url: ydc-oss-dev.oss-cn-shanghai.aliyuncs.com + url: https://ydc-oss-dev.oss-cn-shanghai.aliyuncs.com ########################微信支付参数####################################### diff --git a/jsowell-admin/src/main/resources/application-prd.yml b/jsowell-admin/src/main/resources/application-prd.yml index 351fbc7a5..01a297b48 100644 --- a/jsowell-admin/src/main/resources/application-prd.yml +++ b/jsowell-admin/src/main/resources/application-prd.yml @@ -108,17 +108,17 @@ minio: aliyunoss: # 地域节点 - endpoint: oss-cn-shanghai.aliyuncs.com + endpoint: http://oss-cn-shanghai.aliyuncs.com # AccessKey accessKeyId: LTAI5tBgCN4xuxQF1HV9rf7t # AccessKey 秘钥 accessKeySecret: tsxMyujk6KY9h0e4Bx0D7ld16PBUyW # bucket名称 - bucketName: ydc-oss-dev + bucketName: ydc-oss-prd # bucket下文件夹的路径 filehost: img # 访问域名 - url: ydc-oss-dev.oss-cn-shanghai.aliyuncs.com + url: https://ydc-oss-prd.oss-cn-shanghai.aliyuncs.com ########################微信支付参数####################################### #微信商户号 diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/StartModeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/StartModeEnum.java index 9fc42e1f0..2dd128413 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/StartModeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/StartModeEnum.java @@ -6,8 +6,9 @@ package com.jsowell.common.enums.ykc; public enum StartModeEnum { WEB("0", "后管启动"), APP("1","用户app启动"), - CARD("2", "卡启动"), + AUTH_CARD("2", "鉴权卡启动"), OFFLINE_CARD("3", "离线卡启动"), + LIAN_LIAN("4", "联联平台启动"), ; private String value; diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/LianLianUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/LianLianUtils.java new file mode 100644 index 000000000..712ea2107 --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/util/LianLianUtils.java @@ -0,0 +1,7 @@ +package com.jsowell.common.util;/** + * TODO + * + * @author JS-ZZA + * @date 2023/5/6 14:22 + */public class LianLianUtils { +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/ConfirmStartChargingRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/ConfirmStartChargingRequestHandler.java index dd40b9e45..72be931d8 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/ConfirmStartChargingRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/ConfirmStartChargingRequestHandler.java @@ -16,10 +16,6 @@ import com.jsowell.pile.domain.PileAuthCard; import com.jsowell.pile.dto.GenerateOrderDTO; import com.jsowell.pile.service.IOrderBasicInfoService; import com.jsowell.pile.service.IPileAuthCardService; -import com.jsowell.pile.service.IPileBasicInfoService; -import com.jsowell.pile.service.IPileBillingTemplateService; -import com.jsowell.pile.service.impl.MemberBasicInfoServiceImpl; -import com.jsowell.pile.transaction.service.TransactionService; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -39,21 +35,9 @@ import java.util.Map; public class ConfirmStartChargingRequestHandler extends AbstractHandler{ private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.REQUEST_START_CHARGING_CODE.getBytes()); - @Autowired - private MemberBasicInfoServiceImpl memberBasicInfoService; - @Autowired private IPileAuthCardService pileAuthCardService; - @Autowired - private TransactionService pileTransactionService; - - @Autowired - private IPileBasicInfoService pileBasicInfoService; - - @Autowired - private IPileBillingTemplateService pileBillingTemplateService; - @Autowired private IOrderBasicInfoService orderBasicInfoService; diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java index 877625112..b5c50dc7e 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java @@ -9,7 +9,6 @@ import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.ykc.CardStatusEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum; -import com.jsowell.common.enums.ykc.StartModeEnum; import com.jsowell.common.enums.ykc.YKCChargingStopReasonEnum; import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.Cp56Time2a.Cp56Time2aUtil; @@ -573,10 +572,7 @@ public class TransactionRecordsRequestHandler extends AbstractHandler { } private void processOrder(TransactionRecordsData data) { - // String orderCode = data.getOrderCode(); String transactionCode = data.getTransactionCode(); - // 根据订单号查询订单信息 - // OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); // 根据交易流水号查询订单信息 OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); if (orderBasicInfo != null) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java new file mode 100644 index 000000000..937582e29 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java @@ -0,0 +1,43 @@ +package com.jsowell.pile.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 请求启动充电DTO + * + * @author JS-ZZA + * @date 2023/4/24 14:04 + */ +@Data +public class QueryStartChargeDTO { + /** + * 充电订单号 + */ + @JsonProperty(value = "StartChargeSeq") + private String StartChargeSeq; + + /** + * 充电设备接口编码 + */ + @JsonProperty(value = "ConnectorID") + private String ConnectorID; + + /** + * 二维码 + */ + @JsonProperty(value = "QRCode") + private String QRCode; + + /** + * 用户手机号 + */ + @JsonProperty(value = "PhoneNum") + private String PhoneNum; + + /** + * 车牌号 + */ + @JsonProperty(value = "PlateNum") + private String PlateNum; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java index 932706d90..473b8554c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java @@ -222,4 +222,11 @@ public interface IOrderBasicInfoService { * @return */ List getAccumulativeInfoForLianLian(QueryStationInfoDTO dto); + + /** + * 联联平台生成订单 + * @param dto + * @return + */ + Map generateOrderForLianLian(QueryStartChargeDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 50cb0093b..f95f78efd 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -37,7 +37,13 @@ import com.jsowell.pile.domain.PileAuthCard; import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.domain.WxpayCallbackRecord; import com.jsowell.pile.domain.WxpayRefundCallback; -import com.jsowell.pile.dto.*; +import com.jsowell.pile.dto.GenerateOrderDTO; +import com.jsowell.pile.dto.IndexQueryDTO; +import com.jsowell.pile.dto.QueryOrderDTO; +import com.jsowell.pile.dto.QueryPersonPileDTO; +import com.jsowell.pile.dto.QueryStartChargeDTO; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.pile.dto.RefundableWxPayOrderData; import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.service.IMemberBasicInfoService; import com.jsowell.pile.service.IOrderAbnormalRecordService; @@ -84,6 +90,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -377,11 +384,14 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { public int updateOrderBasicInfo(OrderBasicInfo orderBasicInfo) { // 清缓存 this.cleanCacheByOrderCode(orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode()); - return orderBasicInfoMapper.updateOrderBasicInfo(orderBasicInfo); + int i = orderBasicInfoMapper.updateOrderBasicInfo(orderBasicInfo); + CompletableFuture.runAsync(() -> this.cleanCacheByOrderCode(orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode())); + return i; } @Override public void cleanCacheByOrderCode(String orderCode, String transactionCode) { + logger.debug("清除订单缓存 orderCode:{}, transactionCode:{}", orderCode, transactionCode); List keys = Lists.newArrayList(); if (StringUtils.isNotBlank(orderCode)) { keys.add(CacheConstants.GET_ORDER_INFO_BY_ORDER_CODE + orderCode); @@ -982,7 +992,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { if (StringUtils.isBlank(transactionCode)) { return resultList; } - logger.info("transactionCode:{}", transactionCode); + // logger.info("transactionCode:{}", transactionCode); String pileConnectorCode = transactionCode.substring(0, 16); String redisKey = CacheConstants.PILE_REAL_TIME_MONITOR_DATA + pileConnectorCode + "_" + transactionCode; // 拿到所有数据 @@ -1348,7 +1358,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { .connectorCode(connectorCode) .pileConnectorCode(pileSn + connectorCode) .logicCard(pileAuthCardInfo.getLogicCard()) - .startMode(StartModeEnum.CARD.getValue()) + .startMode(StartModeEnum.AUTH_CARD.getValue()) .payStatus(Constants.ONE) .payAmount(totalAccountAmount) .payTime(new Date()) @@ -1401,4 +1411,76 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { public List getAccumulativeInfoForLianLian(QueryStationInfoDTO dto) { return orderBasicInfoMapper.getAccumulativeInfoForLianLian(dto); } + + /** + * 联联平台生成订单 + * @param dto + * @return + */ + @Override + public Map generateOrderForLianLian(QueryStartChargeDTO dto) { + // 联联平台生成订单 + String orderCode = dto.getStartChargeSeq(); + String pileConnectorCode = dto.getConnectorID(); + String pileSn = StringUtils.substring(pileConnectorCode, 0, 14); + String connectorCode = StringUtils.substring(pileConnectorCode, 14, 16); + + + String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode); + + // 通过桩号查询所属站点 + PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn); + Long stationId = pileBasicInfo.getStationId(); + + + // 将此订单信息存入订单表 + // 订单基本信息 + OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder() + .orderCode(orderCode) + .transactionCode(transactionCode) + .orderStatus(OrderStatusEnum.NOT_START.getValue()) + // .memberId(memberVO.getMemberId()) // 会员memberId + .stationId(String.valueOf(stationId)) + .pileSn(pileSn) + .connectorCode(connectorCode) + .pileConnectorCode(pileConnectorCode) + // .logicCard(pileAuthCardInfo.getLogicCard()) // 卡号 + .startMode(StartModeEnum.LIAN_LIAN.getValue()) + .payStatus(Constants.ONE) + // .payAmount(totalAccountAmount) // 支付金额 + .payTime(new Date()) + // .payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue()) // 支付方式 + .orderAmount(BigDecimal.ZERO) + .build(); + // 根据桩编码查询当前计费模板 + BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn); + // 订单详情 + OrderDetail orderDetail = OrderDetail.builder() + .orderCode(orderCode) + .sharpElectricityPrice(billingTemplateVO.getSharpElectricityPrice()) + .sharpServicePrice(billingTemplateVO.getSharpServicePrice()) + .peakElectricityPrice(billingTemplateVO.getPeakElectricityPrice()) + .peakServicePrice(billingTemplateVO.getPeakServicePrice()) + .flatElectricityPrice(billingTemplateVO.getFlatElectricityPrice()) + .flatServicePrice(billingTemplateVO.getFlatServicePrice()) + .valleyElectricityPrice(billingTemplateVO.getValleyElectricityPrice()) + .valleyServicePrice(billingTemplateVO.getValleyServicePrice()) + .build(); + + OrderTransactionDTO createOrderTransactionDTO = OrderTransactionDTO.builder() + .orderBasicInfo(orderBasicInfo) + .orderDetail(orderDetail) + .build(); + pileTransactionService.doCreateOrder(createOrderTransactionDTO); + + // 组装结果集 + Map resultMap = Maps.newHashMap(); + resultMap.put("orderCode", orderBasicInfo.getOrderCode()); + resultMap.put("transactionCode", orderBasicInfo.getTransactionCode()); + resultMap.put("orderBasicInfo", orderBasicInfo); + resultMap.put("orderDetail", orderDetail); + // resultMap.put("accountBalance", totalAccountAmount); + + return resultMap; + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java index d3d8227da..a346cc404 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java @@ -8,7 +8,10 @@ import com.jsowell.common.core.domain.entity.SysDept; import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; -import com.jsowell.common.util.*; +import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.DistanceUtils; +import com.jsowell.common.util.SecurityUtils; +import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.ip.AddressUtils; import com.jsowell.pile.domain.PileStationInfo; import com.jsowell.pile.dto.FastCreateStationDTO; @@ -29,6 +32,8 @@ import com.jsowell.system.service.SysDeptService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; @@ -129,6 +134,10 @@ public class PileStationInfoServiceImpl implements IPileStationInfoService { // vo.setOrganizationCode(pileStationInfo.getor); vo.setPublicFlag(pileStationInfo.getPublicFlag()); vo.setOpenFlag(pileStationInfo.getOpenFlag()); + if (StringUtils.isNotBlank(pileStationInfo.getPictures())) { + vo.setPictures(pileStationInfo.getPictures()); + vo.setPictureList(Lists.newArrayList(pileStationInfo.getPictures().split(","))); + } } return vo; } @@ -193,6 +202,7 @@ public class PileStationInfoServiceImpl implements IPileStationInfoService { * @return */ @Override + @Transactional(readOnly = false, propagation = Propagation.REQUIRED) public int fastCreateStation(FastCreateStationDTO dto) { MerchantInfoVO merchantInfo = pileMerchantInfoService.getMerchantInfo(dto.getMerchantId()); if (merchantInfo == null) { @@ -229,8 +239,6 @@ public class PileStationInfoServiceImpl implements IPileStationInfoService { } pileStationInfo.setCreateBy(SecurityUtils.getUsername()); int i = pileStationInfoMapper.insertPileStationInfo(pileStationInfo); - - return i; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java index 32fd2ec15..f131762ca 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java @@ -35,7 +35,18 @@ public class OrderDetailInfoVO { private RealTimeMonitorData lastMonitorData; - // billingDetails + // 收费明细 + private List chargeDetails; + + @Data + public static class ChargeDetail{ + private String periodType; // 时段类型 + private BigDecimal usedElectricity; // 用电量 + private BigDecimal electricityPrice; // 电费单价 + private BigDecimal servicePrice; // 服务费单价 + private BigDecimal electricityAmount; // 电费金额 + private BigDecimal serviceAmount; // 服务费金额 + } @Data public static class BillingDetails{ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileStationVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileStationVO.java index 5459dfda1..7eb515ac7 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileStationVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileStationVO.java @@ -142,6 +142,8 @@ public class PileStationVO { */ private String pictures; + private List pictureList; + /** * 电费 */ diff --git a/jsowell-pile/src/main/resources/mapper/pile/MemberBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/MemberBasicInfoMapper.xml index f3f5fd8a6..76cc6c6f2 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/MemberBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/MemberBasicInfoMapper.xml @@ -158,7 +158,6 @@ and merchant_id = #{merchantId,jdbcType=VARCHAR} order by create_time DESC, update_time DESC - limit 1 @@ -208,7 +207,7 @@ JOIN member_wallet_info t2 ON t1.member_id = t2.member_id where t1.del_flag = '0' and mobile_number like '%${mobileNumber}%' - and nick_name like '%${nickName}%' + and nick_name like '%${nickName}%' diff --git a/jsowell-thirdparty/pom.xml b/jsowell-thirdparty/pom.xml index ff891a05d..787b2de66 100644 --- a/jsowell-thirdparty/pom.xml +++ b/jsowell-thirdparty/pom.xml @@ -22,6 +22,10 @@ org.projectlombok lombok + + com.jsowell + jsowell-netty + diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java index b249c3670..d616513a2 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java @@ -1,10 +1,10 @@ package com.jsowell.thirdparty.service; import com.jsowell.pile.dto.QueryEquipmentDTO; +import com.jsowell.pile.dto.QueryStartChargeDTO; import com.jsowell.thirdparty.domain.StationStatsInfo; import com.jsowell.pile.dto.QueryStationInfoDTO; -import com.jsowell.thirdparty.vo.EquipmentAuthVO; -import com.jsowell.thirdparty.vo.LianLianPageResponse; +import com.jsowell.thirdparty.vo.*; import java.util.List; @@ -47,4 +47,24 @@ public interface LianLianService { * @return */ EquipmentAuthVO query_equip_auth(QueryEquipmentDTO dto); + + /** + * 请求开始充电 + * @param dto + * @return + */ + QueryStartChargeVO query_start_charge(QueryStartChargeDTO dto); + + /** + * 查询充电状态 + * @param startChargeSeq + */ + QueryChargingStatusVO query_equip_charge_status(String startChargeSeq); + + /** + * 请求停止充电 + * @param dto + * @return + */ + QueryStopChargeVO query_stop_charge(QueryStartChargeDTO dto); } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java index c16df19ce..e4cbda691 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java @@ -4,16 +4,19 @@ import cn.hutool.core.util.PageUtil; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; +import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.PageUtils; import com.jsowell.common.util.StringUtils; -import com.jsowell.pile.domain.OrderBasicInfo; -import com.jsowell.pile.domain.PileBasicInfo; -import com.jsowell.pile.domain.PileConnectorInfo; -import com.jsowell.pile.domain.PileStationInfo; +import com.jsowell.netty.command.ykc.StartChargingCommand; +import com.jsowell.netty.command.ykc.StopChargingCommand; +import com.jsowell.netty.service.yunkuaichong.YKCPushCommandService; +import com.jsowell.pile.domain.*; import com.jsowell.pile.dto.QueryEquipmentDTO; +import com.jsowell.pile.dto.QueryStartChargeDTO; import com.jsowell.pile.dto.QueryStationInfoDTO; import com.jsowell.pile.service.IOrderBasicInfoService; import com.jsowell.pile.service.IPileBasicInfoService; @@ -24,6 +27,7 @@ import com.jsowell.pile.service.IPileStationInfoService; import com.jsowell.pile.vo.base.ConnectorInfoVO; import com.jsowell.pile.vo.base.MerchantInfoVO; import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO; +import com.jsowell.pile.vo.uniapp.SendMessageVO; import com.jsowell.pile.vo.web.PileConnectorInfoVO; import com.jsowell.pile.vo.web.PileModelInfoVO; import com.jsowell.thirdparty.domain.ConnectorChargeStatusInfo; @@ -37,8 +41,7 @@ import com.jsowell.thirdparty.domain.StationInfo; import com.jsowell.thirdparty.domain.StationStatsInfo; import com.jsowell.thirdparty.domain.StationStatusInfo; import com.jsowell.thirdparty.service.LianLianService; -import com.jsowell.thirdparty.vo.EquipmentAuthVO; -import com.jsowell.thirdparty.vo.LianLianPageResponse; +import com.jsowell.thirdparty.vo.*; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -70,6 +73,8 @@ public class LianLianServiceImpl implements LianLianService { @Autowired private IOrderBasicInfoService orderBasicInfoService; + @Autowired + private YKCPushCommandService ykcPushCommandService; @Override public void pushMerchantInfo(Long merchantId) { @@ -204,7 +209,7 @@ public class LianLianServiceImpl implements LianLianService { StationStatusInfos.add(stationStatusInfo); } } - // TODO 将 StationStatusInfos 分页 + // 将 StationStatusInfos 分页 int pageNum = 1; int pageSize = 10; List collect = StationStatusInfos.stream() @@ -352,6 +357,150 @@ public class LianLianServiceImpl implements LianLianService { return vo; } + + /** + * 请求启动充电 + * @param dto + */ + public QueryStartChargeVO query_start_charge(QueryStartChargeDTO dto) { + // 通过传过来的订单号和枪口号生成订单 + // String orderCode = dto.getStartChargeSeq(); + String pileConnectorCode = dto.getConnectorID(); + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq()); + if (orderInfo != null) { + // 平台已存在订单 + throw new BusinessException("", "平台已存在订单"); + } + + Map map = orderBasicInfoService.generateOrderForLianLian(dto); + String orderCode = (String) map.get("orderCode"); + String transactionCode = (String) map.get("transactionCode"); + OrderBasicInfo orderBasicInfo = (OrderBasicInfo) map.get("orderBasicInfo"); + + + StartChargingCommand command = StartChargingCommand.builder() + .pileSn(orderBasicInfo.getPileSn()) + .connectorCode(orderBasicInfo.getConnectorCode()) + .transactionCode(transactionCode) + .chargeAmount(orderBasicInfo.getPayAmount()) + .logicCardNum(null) + .physicsCardNum(null) + .build(); + ykcPushCommandService.pushStartChargingCommand(command); + + // 拼装对应的数据并返回 + QueryStartChargeVO vo = QueryStartChargeVO.builder() + .StartChargeSeq(orderCode) + .StartChargeSeqStat(1) // 1-启动中 + .ConnectorID(pileConnectorCode) + .SuccStat(0) + .FailReason(0) + + .build(); + return vo; + + // TODO 推送启动充电结果(调用接口 notification_start_charge_result) + } + + + /** + * 查询充电状态 + * @param startChargeSeq + * @return + */ + public QueryChargingStatusVO query_equip_charge_status(String startChargeSeq) { + // 通过订单号查询订单信息 + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(startChargeSeq); + // 通过订单号查询实时数据 + if (orderInfo == null) { + throw new BusinessException("", ""); + } + // OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderInfo.getOrderCode()); + List realTimeData = orderBasicInfoService.getChargingRealTimeData(orderInfo.getTransactionCode()); + RealTimeMonitorData data = realTimeData.get(0); + String orderStatus = orderInfo.getOrderStatus(); + if (StringUtils.equals(orderStatus, OrderStatusEnum.IN_THE_CHARGING.getValue())) { + // 充电中 + orderStatus = "2"; + }if (StringUtils.equals(orderStatus, OrderStatusEnum.ORDER_COMPLETE.getValue())) { + // 充电完成 + orderStatus = "4"; + }else { + // 直接给 5-未知 + orderStatus = "5"; + } + // 拼装联联平台数据 + QueryChargingStatusVO vo = QueryChargingStatusVO.builder() + .StartChargeSeq(startChargeSeq) // 订单号 + .StartChargeSeqStat(Integer.parseInt(orderStatus)) // 订单状态 + .ConnectorID(orderInfo.getPileConnectorCode()) // 枪口编码 + .ConnectorStatus(Integer.parseInt(data.getConnectorStatus())) // 枪口状态 + .CurrentA(new BigDecimal(data.getOutputCurrent())) // 电流 + .VoltageA(new BigDecimal(data.getOutputVoltage())) // 电压 + .Soc(new BigDecimal(data.getSOC())) + .StartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, orderInfo.getChargeStartTime())) // 开始时间 + .EndTime(DateUtils.getTime()) // 本次采样时间 + .TotalPower(new BigDecimal(data.getChargingDegree())) // 累计充电量 + // .ElecMoney(new BigDecimal()) // 累计电费 + // .SeviceMoney(new BigDecimal()) // 累计服务费 + .TotalMoney(new BigDecimal(data.getChargingAmount())) // 已充金额 + + .build(); + + + return vo; + } + + + /** + * 请求停止充电 + * @param dto + * @return + */ + public QueryStopChargeVO query_stop_charge(QueryStartChargeDTO dto) { + QueryStopChargeVO vo = new QueryStopChargeVO(); + + String orderCode = dto.getStartChargeSeq(); + + // 根据订单号查询订单信息 + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); + if (orderInfo == null) { + throw new BusinessException("", ""); + } + // 若状态为充电中,则发送停机指令 + if (StringUtils.equals(OrderStatusEnum.IN_THE_CHARGING.getValue(), orderInfo.getOrderStatus())) { + // 充电中 + StopChargingCommand command = StopChargingCommand.builder() + .pileSn(orderInfo.getPileSn()) + .connectorCode(orderInfo.getConnectorCode()) + .build(); + ykcPushCommandService.pushStopChargingCommand(command); + vo.setStartChargeSeq(orderCode); + vo.setStartChargeSeqStat(3); // 3-停止中 + } + return vo; + } + + // TODO 推送停止充电结果 notification_stop_charge_result + + // TODO 推送充电订单信息 notification_charge_order_info + + // TODO 推送订单对账结果信息 check_charge_orders + + /** + * TODO 请求打印充电小票 + */ + public void query_print_parking_ticket() { + + } + + + // TODO 推送订单结算信息 notification_order_settlement_info + + // TODO 查询订单结算信息 query_order_settlement_info + + + /** * 获取桩列表信息 * @param pileStationInfo diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryChargingStatusVO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryChargingStatusVO.java new file mode 100644 index 000000000..3a1aef286 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryChargingStatusVO.java @@ -0,0 +1,168 @@ +package com.jsowell.thirdparty.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 查询充电状态VO + * + * @author JS-ZZA + * @date 2023/4/24 14:33 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QueryChargingStatusVO { + + /** + * 充电订单号 + */ + private String StartChargeSeq; + + /** + * 充电订单状态 + */ + private int StartChargeSeqStat; + + /** + * 充电设备接口编码 + */ + private String ConnectorID; + + /** + * 充电设备接口状态 + */ + private int ConnectorStatus; + + /** + * 车辆识别码 + */ + private String Vin; + + /** + * A 相电流 + */ + private BigDecimal CurrentA; + + /** + * B 相电流 + */ + private BigDecimal CurrentB; + + /** + * C 相电流 + */ + private BigDecimal CurrentC; + + /** + * A 相电压 + */ + private BigDecimal VoltageA; + + /** + * B 相电压 + */ + private BigDecimal VoltageB; + + /** + * C 相电压 + */ + private BigDecimal VoltageC; + + /** + * 电池剩余电量 + */ + private BigDecimal Soc; + + /** + * 开始充电时间 + */ + private String StartTime; + + /** + * 本次采样时间 + */ + private String EndTime; + + /** + * 累计充电量 + */ + private BigDecimal TotalPower; + + /** + * 累计电费 + */ + private BigDecimal ElecMoney; + + /** + * 累计服务费 + */ + private BigDecimal SeviceMoney; + + /** + * 累计总金额 + */ + private BigDecimal TotalMoney; + + /** + * 是否可申请停车费减免 + */ + private int ParkingFeeDiscount; + + /** + * 时段数 N 范围:0~32 + */ + private int SumPeriod; + + /** + * 充电明细信息 + */ + private List ChargeDetails; + + /** + * 充电明细信息体 + */ + @Data + public static class ChargeDetail { + /** + * 开始时间 + */ + private String DetailStartTime; + + /** + * 结束时间 + */ + private String DetailEndTime; + + /** + * 时段电价 + */ + private BigDecimal ElecPrice; + + /** + * 时段服务费价格 + */ + private BigDecimal SevicePrice; + + /** + * 时段充电量 + */ + private BigDecimal DetailPower; + + /** + * 时段电费 + */ + private BigDecimal DetailElecMoney; + + /** + * 时段服务费 + */ + private BigDecimal DetailSeviceMoney; + } +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryStartChargeVO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryStartChargeVO.java new file mode 100644 index 000000000..531087f8b --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryStartChargeVO.java @@ -0,0 +1,43 @@ +package com.jsowell.thirdparty.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 请求启动充电VO + * + * @author JS-ZZA + * @date 2023/4/28 14:33 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QueryStartChargeVO { + /** + * 充电订单号 + */ + private String StartChargeSeq; + + /** + * 充电订单状态 + */ + private int StartChargeSeqStat; + + /** + * 充电设备接口编码 + */ + private String ConnectorID; + + /** + * 成功状态 + */ + private int SuccStat; + + /** + * 失败原因 + */ + private int FailReason; +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryStopChargeVO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryStopChargeVO.java new file mode 100644 index 000000000..f403f10c8 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/QueryStopChargeVO.java @@ -0,0 +1,38 @@ +package com.jsowell.thirdparty.vo; + +import lombok.Data; + +/** + * 请求停止充电 + * + * @author JS-ZZA + * @date 2023/4/25 11:21 + */ +@Data +public class QueryStopChargeVO { + + /** + * 充电订单号 + */ + private String StartChargeSeq; + + /** + * 充电订单状态 1、启动中 ;2、充电中;3、停止中;4、已结束;5、未知 + */ + private int StartChargeSeqStat; + + /** + * 成功状态 0:成功; 1:失败 + */ + private int SuccStat; + + /** + * 失败原因 + * 0:无; + * 1:此设备不存在; + * 2:此设备离线: + * 3:设备已停止充电; + * 4~99:自定义 + */ + private int FailReason; +} diff --git a/jsowell-ui/src/components/MapContainer/MapContainer.vue b/jsowell-ui/src/components/MapContainer/MapContainer.vue index 82c0839c5..9c158b16e 100644 --- a/jsowell-ui/src/components/MapContainer/MapContainer.vue +++ b/jsowell-ui/src/components/MapContainer/MapContainer.vue @@ -17,19 +17,7 @@
-
上传图片
- - - - - - - + @@ -49,6 +37,7 @@ import AMapLoader from "@amap/amap-jsapi-loader"; import {getStation} from "@/api/pile/station.js"; import bus from "@/bus/bus"; +import {getToken} from "@/utils/auth"; window._AMapSecurityConfig = { securityJsCode: "829b6b73f84682c2eb982eaa47a745b8", @@ -75,17 +64,11 @@ export default { placeSearch: "", stationId: this.$route.params.id, avatar: "", + }; }, methods: { - handleRemove(file, fileList) { - console.log(file, fileList); - }, - handlePictureCardPreview(file) { - this.dialogImageUrl = file.url; - console.log(this.dialogImageUrl) - this.dialogVisible = true; - }, + // 点击搜索按钮 send() { this.searchPlaceInput = this.inputObject.userInput; diff --git a/jsowell-ui/src/views/member/info/detail.vue b/jsowell-ui/src/views/member/info/detail.vue index fbe5ebf1c..c44b57529 100644 --- a/jsowell-ui/src/views/member/info/detail.vue +++ b/jsowell-ui/src/views/member/info/detail.vue @@ -196,9 +196,28 @@
会员交易记录
- - - + + + + + + + + + @@ -250,7 +269,7 @@ import Template from "@/views/billing/template"; export default { name: "memberDetail", components: {Template}, - dicts: ['order_status', 'start_mode', 'pay_mode', 'pay_status', 'pile_status'], + dicts: ['order_status', 'start_mode', 'pay_mode', 'pay_status', 'pile_status', 'scenario_type', 'action_type'], data() { const plateNumber = (rule,value,callback) =>{ const re = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/ diff --git a/jsowell-ui/src/views/order/invoice/index.vue b/jsowell-ui/src/views/order/invoice/index.vue index 6ab725851..47a8097a1 100644 --- a/jsowell-ui/src/views/order/invoice/index.vue +++ b/jsowell-ui/src/views/order/invoice/index.vue @@ -17,14 +17,21 @@ @keyup.enter.native="handleQuery" /> - + style="width: 140px" + > + + + - + + + @@ -124,31 +139,43 @@ /> - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 点击确定,将此记录更改为已开票状态! + + 取 消 + 确 定 + @@ -158,8 +185,11 @@ import { listInvoice, getInvoice, delInvoice, addInvoice, updateInvoice } from " export default { name: "Invoice", + dicts: ["invoice_status"], data() { return { + // 需要修改的id + updateInvoiceId: null, // 遮罩层 loading: true, // 选中数组 @@ -193,7 +223,8 @@ export default { form: {}, // 表单校验 rules: { - } + }, + dialogVisible: false, }; }, created() { @@ -299,6 +330,22 @@ export default { this.download('order/invoice/export', { ...this.queryParams }, `invoice_${new Date().getTime()}.xlsx`) + }, + clickInvoiceStatus(id) { + console.log("点击更改开票状态",id); + this.updateInvoiceId = id + this.dialogVisible = true; + }, + /** 修改申请开票状态 */ + updateInvoiceStatus() { + console.log('修改申请开票状态', this.updateInvoiceId); + this.form.id = this.updateInvoiceId; + this.form.status = "1"; + updateInvoice(this.form).then(response => { + this.$modal.msgSuccess("修改成功"); + this.dialogVisible = false; + this.getList(); + }); } } }; diff --git a/jsowell-ui/src/views/order/order/index.vue b/jsowell-ui/src/views/order/order/index.vue index 96ec64783..4b22d9bd4 100644 --- a/jsowell-ui/src/views/order/order/index.vue +++ b/jsowell-ui/src/views/order/order/index.vue @@ -6,6 +6,7 @@ v-model="queryParams.stationId" placeholder="请选择站点" clearable + filterable style="width: 140px" >
+ +

收费明细new

+ + + + + + + + +
+
+

实时订单数据

@@ -225,12 +238,35 @@ export default { chargingAmount: null, chargingDegree: null, }, + tableData: [] }; }, created() { this.getOrderDetail(); }, methods: { + getSummaries(param) { + const { columns, data } = param; + const sums = []; + columns.forEach((column, index) => { + if (index === 0) { + sums[index] = '合计'; + return; + } + const values = data.map(item => Number(item[column.property])); + if (column.property === 'usedElectricity' ||column.property ==='electricityAmount' || column.property==='serviceAmount' ) { + sums[index] = values.reduce((prev, curr) => { + const value = Number(curr); + if (!isNaN(value)) { + return prev + curr; + } else { + return prev; + } + }, 0); + } + }); + return sums; + }, clickManualSettlement() { this.dialogVisible = true; }, @@ -264,6 +300,7 @@ export default { console.log("this.pileIn", this.pileIn); this.orderRealTimeInfo = [data.orderRealTimeInfo]; this.orderDetail = [data.billingDetails]; + this.tableData = data.chargeDetails; this.lastMonitorData = data.lastMonitorData; }, }, diff --git a/jsowell-ui/src/views/pile/basic/index.vue b/jsowell-ui/src/views/pile/basic/index.vue index 9a4d8a6ac..724d46220 100644 --- a/jsowell-ui/src/views/pile/basic/index.vue +++ b/jsowell-ui/src/views/pile/basic/index.vue @@ -197,7 +197,7 @@ - +
+
上传图片
+ + + + + + x.uid === file.uid); + // 调用splice方法,移除图片信息 + this.fileList.splice(i, 1); + }, + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + console.log(this.dialogImageUrl) + this.dialogVisible = true; + }, handleChange() { console.log("111"); }, @@ -283,15 +324,17 @@ export default { const res = await getStationInfo(this.stationId); console.log(res); this.station = res.data; + var pictures = res.data.pictures.split(','); + for (let i = 0; i < pictures.length; i++) { + this.fileList.push({"url": pictures[i]}); + } console.log("queryStationInfo表格数据", this.station); }, // 提交按钮 present() { - // console.log("matchCars提交时:", this.station.matchCars); - // console.log("selectMatchCars提交时:", this.station.selectMatchCars); - // 赋值 this.station.matchCars = this.station.selectMatchCars.join(","); + this.station.pictures = this.pictureList.join(','); // console.log("matchCars赋值后:", this.station.matchCars); this.$refs.stationRef.validate((valid) => { if (valid) { @@ -338,6 +381,13 @@ export default { areaCodeList() { return this.station.areaCode.split(","); }, + pictureList() { + var pictureList = []; + for (let i = 0; i < this.fileList.length; i++) { + pictureList.push(this.fileList[i].url); + } + return pictureList; + } }, }; diff --git a/jsowell-ui/src/views/pile/station/pileList.vue b/jsowell-ui/src/views/pile/station/pileList.vue index 8db30fe5a..6224bf02e 100644 --- a/jsowell-ui/src/views/pile/station/pileList.vue +++ b/jsowell-ui/src/views/pile/station/pileList.vue @@ -121,6 +121,7 @@