diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java index 38bd5395e..f6e7cf0b9 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java @@ -1,5 +1,6 @@ package com.jsowell.api.uniapp; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -18,6 +19,7 @@ import com.jsowell.pile.service.IMemberBasicInfoService; import com.jsowell.pile.service.IMemberPlateNumberRelationService; import com.jsowell.pile.vo.uniapp.InvoiceTitleVO; import com.jsowell.pile.vo.uniapp.MemberVO; +import com.jsowell.pile.vo.uniapp.MemberWalletInfoVO; import com.jsowell.service.MemberService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -185,14 +187,15 @@ public class MemberController extends BaseController { */ @PostMapping("/getMemberBalanceChanges") public RestApiResponse getMemberBalanceChanges(HttpServletRequest request, @RequestBody UniAppQueryMemberBalanceDTO dto) { - logger.info("查询用户账户余额变动信息 params:{}", dto.toString() ); + logger.info("查询用户账户余额变动信息 params:{}", JSON.toJSONString(dto)); RestApiResponse response = null; try { String memberId = getMemberIdByAuthorization(request); dto.setMemberId(memberId); - PageResponse pageResponse = memberService.getMemberBalanceChanges(dto); + // PageResponse pageResponse = memberService.getMemberBalanceChanges(dto); // PageResponse pageResponse = memberService.getMemberWalletLog(dto); - response = new RestApiResponse<>(pageResponse); + MemberWalletInfoVO memberWalletInfo = memberService.getMemberWalletInfo(dto); + response = new RestApiResponse<>(memberWalletInfo); } catch (Exception e) { logger.error("查询用户账户余额变动信息 error:", e); response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_BALANCE_CHANGES_ERROR); 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 6c31ba1be..cc0c93965 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java @@ -1,5 +1,6 @@ package com.jsowell.service; +import cn.hutool.core.util.PageUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; @@ -32,10 +33,8 @@ import com.jsowell.pile.dto.*; import com.jsowell.pile.service.*; import com.jsowell.pile.transaction.dto.MemberTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; -import com.jsowell.pile.vo.uniapp.InvoiceTitleVO; -import com.jsowell.pile.vo.uniapp.MemberVO; -import com.jsowell.pile.vo.uniapp.MemberWalletLogVO; -import com.jsowell.pile.vo.uniapp.OrderVO; +import com.jsowell.pile.vo.base.StationInfoVO; +import com.jsowell.pile.vo.uniapp.*; import com.jsowell.wxpay.service.WxAppletRemoteService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.utils.Lists; @@ -80,6 +79,9 @@ public class MemberService { @Autowired private IMemberInvoiceTitleService memberInvoiceTitleService; + @Autowired + private IMemberWalletInfoService memberWalletInfoService; + @Autowired private PileRemoteService pileRemoteService; @@ -290,14 +292,12 @@ public class MemberService { return pageResponse; } - /** - * 获取会员钱包明细 - * @return - */ - public PageResponse getMemberWalletLog (UniAppQueryMemberBalanceDTO dto) throws ParseException { - // 获取分页信息以及memberId - int pageNum = dto.getPageNum() == 0 ? 1 : dto.getPageNum(); - int pageSize = dto.getPageSize() == 0 ? 10 : dto.getPageSize(); + public MemberWalletInfoVO getMemberWalletInfo(UniAppQueryMemberBalanceDTO dto) throws ParseException { + MemberWalletInfoVO vo = new MemberWalletInfoVO(); + vo.setMemberId(dto.getMemberId()); + // 获取分页信息 + long pageNum = dto.getPageNum() == 0 ? 1L : dto.getPageNum(); + long pageSize = dto.getPageSize() == 0 ? 10L : dto.getPageSize(); String tradeDate = dto.getTradeDate(); // 获取年、月 String[] split = StringUtils.split(tradeDate, "-"); @@ -311,13 +311,27 @@ public class MemberService { lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date); dto.setTradeDate(tradeDate); dto.setEndDate(lastDay); + + // 查询会员钱包信息表,获取 本金余额 + MemberWalletInfo memberWalletInfo = memberWalletInfoService.selectByMemberId(dto.getMemberId()); + if (memberWalletInfo == null) { + // 用户未注册小程序 + throw new BusinessException(ReturnCodeEnum.CODE_AUTHENTICATION_ERROR); + } + // 当前余额 + vo.setCurrentBalance(memberWalletInfo.getPrincipalBalance().add(memberWalletInfo.getGiftBalance())); + // 根据日期查询会员钱包变动明细 // 分页 - PageHelper.startPage(pageNum, pageSize); + // PageHelper.startPage(pageNum, pageSize); List list = memberBasicInfoService.getMemberWalletDetail(dto); - PageInfo pageInfo = new PageInfo<>(list); + // 总支出 + BigDecimal totalConsumption = list.stream().map(MemberWalletLogVO::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + vo.setTotalConsumption(totalConsumption); + + // PageInfo pageInfo = new PageInfo<>(list); // 获取 type 和 subType 的对应信息 - for (MemberWalletLogVO walletLogVO : pageInfo.getList()) { + for (MemberWalletLogVO walletLogVO : list) { // 将负数转为正数 walletLogVO.setAmount(BigDecimal.valueOf(Math.abs(walletLogVO.getAmount().doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP)); String subType = walletLogVO.getSubType(); @@ -328,16 +342,75 @@ public class MemberService { // walletLogVO.setTotalAccountAmount(walletLogVO.getPrincipalBalance().add(walletLogVO.getGiftBalance())); } + List collect = list.stream() + .skip((pageNum - 1) * pageSize) + .limit(pageSize) + .collect(Collectors.toList()); + + int total = list.size(); + int pages = PageUtil.totalPage(total, dto.getPageSize()); + // 返回结果集 PageResponse pageResponse = PageResponse.builder() - .pageSize(pageSize) - .pageNum(pageNum) - .list(pageInfo.getList()) - .pages(pageInfo.getPages()) - .total(pageInfo.getTotal()) + .pageNum(Integer.parseInt(String.valueOf(pageNum))) + .pageSize(Integer.parseInt(String.valueOf(pageSize))) + .list(collect) + .pages(pages) + .total(total) + .build(); - return pageResponse; + + vo.setPageResponse(pageResponse); + return vo; } + /** + * 获取会员钱包明细 + * @return + */ + // public PageResponse getMemberWalletLog (UniAppQueryMemberBalanceDTO dto) throws ParseException { + // // 获取分页信息以及memberId + // int pageNum = dto.getPageNum() == 0 ? 1 : dto.getPageNum(); + // int pageSize = dto.getPageSize() == 0 ? 10 : dto.getPageSize(); + // String tradeDate = dto.getTradeDate(); + // // 获取年、月 + // String[] split = StringUtils.split(tradeDate, "-"); + // int year = Integer.parseInt(split[0]); + // int month = Integer.parseInt(split[1]); + // // 根据年月获取当月第一天和最后一天 + // tradeDate = DateUtils.getFirstDay(year, month, DateUtils.YYYY_MM_DD); + // String lastDay = DateUtils.getLastDay(year, month, DateUtils.YYYY_MM_DD); + // // sql语句查询日期需要多加一天 + // Date date = DateUtils.addDays(DateUtils.parseDate(lastDay, DateUtils.YYYY_MM_DD), 1); + // lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date); + // dto.setTradeDate(tradeDate); + // dto.setEndDate(lastDay); + // // 根据日期查询会员钱包变动明细 + // // 分页 + // PageHelper.startPage(pageNum, pageSize); + // List list = memberBasicInfoService.getMemberWalletDetail(dto); + // PageInfo pageInfo = new PageInfo<>(list); + // // 获取 type 和 subType 的对应信息 + // for (MemberWalletLogVO walletLogVO : pageInfo.getList()) { + // // 将负数转为正数 + // walletLogVO.setAmount(BigDecimal.valueOf(Math.abs(walletLogVO.getAmount().doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP)); + // String subType = walletLogVO.getSubType(); + // String subTypeValue = BalanceChangesEnum.getValueByCode(subType); + // if (StringUtils.isNotBlank(subTypeValue)) { + // walletLogVO.setSubType(subTypeValue); + // } + // // walletLogVO.setTotalAccountAmount(walletLogVO.getPrincipalBalance().add(walletLogVO.getGiftBalance())); + // } + // + // PageResponse pageResponse = PageResponse.builder() + // .pageSize(pageSize) + // .pageNum(pageNum) + // .list(pageInfo.getList()) + // .pages(pageInfo.getPages()) + // .total(pageInfo.getTotal()) + // .build(); + // return pageResponse; + // } + /** * 用户绑定车牌号 * @param dto diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileRemoteController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileRemoteController.java index 8aa637879..83102b847 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileRemoteController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileRemoteController.java @@ -3,9 +3,13 @@ package com.jsowell.web.controller.pile; import com.google.common.collect.ImmutableMap; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.AjaxResult; +import com.jsowell.common.enums.ykc.OrderPayModeEnum; +import com.jsowell.common.enums.ykc.PayModeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; +import com.jsowell.common.util.id.IdUtils; import com.jsowell.pile.dto.GenerateOrderDTO; +import com.jsowell.pile.dto.PayOrderDTO; import com.jsowell.pile.dto.QueryPileDTO; import com.jsowell.pile.dto.UpdateFirmwareDTO; import com.jsowell.service.OrderService; @@ -17,6 +21,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.math.BigDecimal; + /** * 远程控制controller */ @@ -58,16 +64,27 @@ public class PileRemoteController { */ @PostMapping("/remoteStartChargingForWeb") public AjaxResult remoteStartCharging(@RequestBody GenerateOrderDTO dto) { - // pileRemoteService.remoteStartCharging(queryPileDTO.getPileSn(), queryPileDTO.getConnectorCode()); + // 生成订单并远程启动充电 - dto.setStartMode(Constants.ZERO); - String orderCode = null; + // dto.setStartMode(Constants.ZERO); + // String orderCode = null; + String transactionCode = null; try { - orderCode = orderService.generateOrder(dto); + transactionCode = IdUtils.generateTransactionCode(dto.getPileSn(), dto.getConnectorCode()); + pileRemoteService.remoteStartCharging(dto.getPileSn(), dto.getConnectorCode(), transactionCode, new BigDecimal("500")); + // // 生成订单 + // orderCode = orderService.generateOrder(dto); + // // 支付订单 + // PayOrderDTO payOrderDTO = new PayOrderDTO(); + // payOrderDTO.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue()); + // payOrderDTO.setOrderCode(orderCode); + // payOrderDTO.setStartMode(Constants.ZERO); + // + // orderService.payOrder(payOrderDTO); } catch (Exception e) { e.printStackTrace(); } - return AjaxResult.success(ImmutableMap.of("orderCode", orderCode)); + return AjaxResult.success(ImmutableMap.of("orderCode", transactionCode)); } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IMemberWalletInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IMemberWalletInfoService.java index ba81057b4..2bc0c4d6b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IMemberWalletInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IMemberWalletInfoService.java @@ -11,6 +11,8 @@ public interface IMemberWalletInfoService { MemberWalletInfo selectByPrimaryKey(Integer id); + MemberWalletInfo selectByMemberId(String memberId); + int updateByPrimaryKeySelective(MemberWalletInfo record); int updateByPrimaryKey(MemberWalletInfo record); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberWalletInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberWalletInfoServiceImpl.java index e41dbef02..51385b801 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberWalletInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberWalletInfoServiceImpl.java @@ -33,6 +33,11 @@ public class MemberWalletInfoServiceImpl implements IMemberWalletInfoService { return memberWalletInfoMapper.selectByPrimaryKey(id); } + @Override + public MemberWalletInfo selectByMemberId(String memberId) { + return memberWalletInfoMapper.selectByMemberId(memberId); + } + @Override public int updateByPrimaryKeySelective(MemberWalletInfo record) { return memberWalletInfoMapper.updateByPrimaryKeySelective(record); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java index e571c05bc..d590efb31 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java @@ -619,8 +619,8 @@ public class PileBasicInfoServiceImpl implements IPileBasicInfoService { List pileInfoVOS = queryPileDetailList(stationIdList); // 对集合根据pileSn进行去重 ArrayList pileInfoList = pileInfoVOS.stream() - .collect(Collectors.collectingAndThen(Collectors.toCollection(() - -> new TreeSet<>(Comparator.comparing(PileInfoVO::getPileSn))), ArrayList::new)); + .collect(Collectors.collectingAndThen(Collectors.toCollection( + () -> new TreeSet<>(Comparator.comparing(PileInfoVO::getPileSn))), ArrayList::new)); // 桩总数 generalInfo.setTotalPileQuantity(String.valueOf(pileInfoList.size())); // 总充电订单数 3.0 --> 3 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/MemberWalletInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/MemberWalletInfoVO.java new file mode 100644 index 000000000..4748858a7 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/MemberWalletInfoVO.java @@ -0,0 +1,35 @@ +package com.jsowell.pile.vo.uniapp; + +import com.jsowell.common.core.page.PageResponse; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 会员钱包明细VO + * + * @author Lemon + * @Date 2023/7/24 14:36 + */ +@Data +public class MemberWalletInfoVO { + /** + * 会员id + */ + private String memberId; + + /** + * 当前余额 + */ + private BigDecimal currentBalance; + + /** + * 总消费 + */ + private BigDecimal totalConsumption; + + /** + * 分页对象list + */ + private PageResponse pageResponse; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java index a8e559488..d43d06c4d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java +++ b/jsowell-pile/src/main/java/com/jsowell/wxpay/service/WxAppletRemoteService.java @@ -243,9 +243,12 @@ public class WxAppletRemoteService { stopChargingMessage.setEndReason(sendMessageVO.getStopReason()); // 结束原因 stopChargingMessage.setOrderCode(sendMessageVO.getOrderCode()); // 订单号 stopChargingMessage.setChargingDegree(sendMessageVO.getChargingDegree()); // 充电度数 - Date chargeStartTime = DateUtils.parseDate(sendMessageVO.getChargeStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); - Date chargeStopTime = DateUtils.parseDate(sendMessageVO.getChargeStopTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); - String chargingTime = DateUtils.getDatePoor(chargeStopTime, chargeStartTime); + String chargingTime = ""; + if (StringUtils.isNotBlank(sendMessageVO.getChargeStartTime()) && StringUtils.isNotBlank(sendMessageVO.getChargeStopTime())) { + Date chargeStartTime = DateUtils.parseDate(sendMessageVO.getChargeStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + Date chargeStopTime = DateUtils.parseDate(sendMessageVO.getChargeStopTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + chargingTime = DateUtils.getDatePoor(chargeStopTime, chargeStartTime); + } stopChargingMessage.setChargingTime(chargingTime); // 充电时长