From 17abf0608f62cdd318dba3e7b12a32ea486cb482 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期一, 21 四月 2025 20:34:03 +0800 Subject: [PATCH] 导入导出,财务统计 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java | 34 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java | 171 +++--- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/ChargeOrderMapper.java | 14 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceStatementVO.java | 5 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java | 2 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml | 97 ++++ ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java | 28 + ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml | 26 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsVO.java | 20 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ChargeOrderService.java | 13 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/AllShopVO.java | 9 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 6 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java | 90 +++ ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml | 32 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java | 2 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 2 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceExcel.java | 29 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointExcel.java | 26 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsOutVO.java | 11 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/ChargeOrderMapper.xml | 34 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java | 6 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 8 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/AppUserMapper.java | 7 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java | 3 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java | 13 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargeOrderController.java | 45 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java | 24 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java | 16 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java | 11 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopMapper.java | 9 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java | 8 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceListVO.java | 28 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java | 6 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsPageVO.java | 20 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetImportOrderDTO.java | 22 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java | 28 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ChargeOrder.java | 51 ++ ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml | 20 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/UserPointMapper.java | 15 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java | 368 +++++++++++++++ ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 30 45 files changed, 1,257 insertions(+), 157 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java index 9fbaa98..58a82d7 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java @@ -124,6 +124,12 @@ return R.fail("清空绑定门店的用户门店数据失败:" + cause.getMessage()); } + @Override + public Long saveOrUpdateAppUser(AppUser appuser) { + log.error("导入订单-保存用户失败{}", cause.getMessage()); + return null; + } + }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java index d57a801..b937f32 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java @@ -41,6 +41,12 @@ public R<Boolean> judgmentDailyShare(Long appUserId) { return R.fail("判断当天是否分享获得过积分失败:" + cause.getMessage()); } + + @Override + public R save(UserPoint userPoint) { + + return R.fail("导入订单-保存积分流水失败" + cause.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java index fe39309..7d64ecc 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java @@ -131,4 +131,6 @@ @PostMapping("/app-user/clearBindShop") R clearBindShop(@RequestParam("shopId") Integer shopId); + @PostMapping("/app-user/saveOrUpdateAppUser") + Long saveOrUpdateAppUser(@RequestBody AppUser appuser); } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java index a49f513..307c1d0 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java @@ -51,4 +51,7 @@ */ @PostMapping("/user-point/judgmentDailyShare") R<Boolean> judgmentDailyShare(@RequestParam("appUserId") Long appUserId); + + @PostMapping("/user-point/save") + R save(@RequestBody UserPoint userPoint); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ChargeOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ChargeOrder.java new file mode 100644 index 0000000..4621d3c --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ChargeOrder.java @@ -0,0 +1,51 @@ +package com.ruoyi.order.model; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@TableName("t_charge_order") +@ApiModel(value="Order对象", description="") +public class ChargeOrder { + // 订单编号 + private String orderNumber; + // 订单类型 + private String orderType; + // 充电方式 + private String chargeType; + // 充电用户 + private String phone; + // 开始时间 + private LocalDateTime beginTime; + // 结束时间 + private LocalDateTime endTime; + // 充电时长 + private String chargingDuration; + // 充电电量 + private BigDecimal chargingCapacity; + // 电站运营商 + private String powerStationOperator; + // 城市名称 + private String city; + // 充电场站 + private String chargingStation; + // 电站id + private Integer powerStationId; + // 终端编码 + private String terminalCode; + // 车牌号 + private String plateNumber; + // 电站价电费金额 + private BigDecimal electricityAmount; + // 电站价服务费金额 + private BigDecimal serviceAmount; + // 电站价总金额 + private BigDecimal totalAmount; + + +} \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java index 620c9db..6cf4678 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java @@ -50,9 +50,9 @@ @TableField(exist = false) @Excel(name = "联系电话") private String phone; - @ApiModelProperty(value = "变动类型(4=提现,5=订单收入,6=订单退款)") + @ApiModelProperty(value = "变动类型(4=提现,5=订单收入,6=订单退款,7-提现失败回退)") @TableField("type") - @Excel(name = "变更类型",readConverterExp = "5=订单收入,6=订单退款") + @Excel(name = "变更类型",readConverterExp = "4=提现,5=订单收入,6=订单退款,7-提现失败回退") private Integer type; @ApiModelProperty(value = "历史余额") diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java index 7786439..d3ac8a7 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java @@ -20,6 +20,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.feignClient.OrderClient; @@ -660,5 +661,32 @@ return R.ok(); } + + /** + * 获取所有用户积分列表 + */ + @ResponseBody + @GetMapping("/getUserPointPageList") + @ApiOperation(value = "所有用户积分列表", tags = "后台-财务统计-用户积分统计") + public R<PageInfo<UserPointStatisticsVO>> getUserPointPageList(@RequestParam(value = "name",required = false) String name, + @ApiParam("当前页")@RequestParam("pageCurr") Integer pageCurr, + @ApiParam("分页大小")@RequestParam("pageSize") Integer pageSize) { + PageInfo<UserPointStatisticsVO> pageInfo=appUserService.getUserPointPageList(name,pageCurr,pageSize); + + return R.ok(pageInfo); + } + + @PostMapping("/saveOrUpdateAppUser") + Long saveOrUpdateAppUser(@RequestBody AppUser appuser){ + if (appuser.getId() == null) { + //保存用户 + appUserService.save(appuser); + }else { + appUserService.updateById(appuser); + } + return appuser.getId(); + + } + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java index 0f095cf..1c0e0cc 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java @@ -2,14 +2,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.model.UserPoint; +import com.ruoyi.account.mapper.UserPointMapper; import com.ruoyi.account.service.UserPointService; -import com.ruoyi.account.vo.TransferPoint; -import com.ruoyi.account.vo.UserPointDetailVO; -import com.ruoyi.account.vo.UserPointStatistics; -import com.ruoyi.account.vo.UserPointVO; +import com.ruoyi.account.vo.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; @@ -29,7 +28,9 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; +import java.util.Collection; import java.util.List; +import java.util.Map; /** * <p> @@ -47,7 +48,8 @@ private UserPointService userPointService; @Resource private OrderClient orderClient; - + @Resource + private UserPointMapper userPointMapper; /** @@ -202,17 +204,79 @@ } + /** + * 获取用户积分变更详情 + */ + @GetMapping("/getUserPontDetailPageList") + @ApiOperation(value = "用户积分详情", tags = "管理后台-财务统计-用户积分统计") + public R<PageInfo<UserPointDetailVO>> getUserPontDetailPageList(@RequestParam(value = "types",required = false) Collection<Integer> types, + @RequestParam(value = "id") Long id, + @ApiParam("当前页")@RequestParam("pageCurr") Integer pageCurr, + @ApiParam("分页大小")@RequestParam("pageSize") Integer pageSize) { + PageInfo<UserPointDetailVO> pageInfo=userPointService.getUserPontDetailPageList(types,id,pageCurr,pageSize); + + return R.ok(pageInfo); + } /** - * 判断当天是否分享获得过积分 - * @param appUserId - * @return + * 用户积分统计 */ - @PostMapping("/judgmentDailyShare") - public R<Boolean> judgmentDailyShare(@RequestParam("appUserId") Long appUserId){ - long count = userPointService.count(new LambdaQueryWrapper<UserPoint>().eq(UserPoint::getAppUserId, appUserId) - .eq(UserPoint::getType, 4).last(" and DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(create_time, '%Y-%m-%d')")); - return R.ok(count != 0); + @GetMapping("/getUserPointStatisticsPageList") + @ApiOperation(value = "用户积分统计", tags = "管理后台-财务统计-用户积分统计") + public R<UserPointStatisticsOutVO> getUserPointStatisticsPageList(@RequestParam(value = "types",required = false) Collection<Integer> types, + @RequestParam(value = "name",required = false) String name, + @RequestParam(value = "phone",required = false) String phone, + @RequestParam(value = "beginTime",required = false) LocalDateTime beginTime, + @RequestParam(value = "endTime",required = false) LocalDateTime endTime, + @ApiParam("当前页")@RequestParam("pageCurr") Integer pageCurr, + @ApiParam("分页大小")@RequestParam("pageSize") Integer pageSize) { + UserPointStatisticsOutVO userPointStatisticsOutVO = new UserPointStatisticsOutVO(); + //充值绿电分 + + Integer chargePoint=userPointService.selectRechargeAndUse(name,phone,beginTime,endTime,17); + // 消费绿电分 + Integer exchangePoint =userPointService.selectRechargeAndUse(name,phone,beginTime,endTime,4); + Integer cancelPoint = userPointService.selectRechargeAndUse(name,phone,beginTime,endTime,16); + Integer usePoint=(exchangePoint==null?0:exchangePoint )-( cancelPoint==null?0:cancelPoint); + userPointStatisticsOutVO.setChargeTotalPoint(chargePoint==null?0:chargePoint); + userPointStatisticsOutVO.setUseTotalPoint(usePoint); + + //查找记录 + PageInfo<UserPointStatisticsPageVO> pageInfo=userPointService.getUserPointStatisticsPageList(types,name,phone,beginTime,endTime,pageCurr,pageSize); + userPointStatisticsOutVO.setPageInfo(pageInfo); + + return R.ok(userPointStatisticsOutVO); } + + /** + * 导出店铺余额列表 + */ + + @GetMapping("/userPointExcel") + @ApiOperation(value = "导出", tags = {"管理后台-财务统计-用户积分统计"}) + void userPointExcel(HttpServletResponse response, + @RequestParam(value = "types",required = false) Collection<Integer> types, + @RequestParam(value = "name",required = false) String name, + @RequestParam(value = "phone",required = false) String phone, + @RequestParam(value = "beginTime",required = false) LocalDateTime beginTime, + @RequestParam(value = "endTime",required = false) LocalDateTime endTime){ + List<UserPointExcel> exportList =userPointMapper.userPointExcel(types,name,phone,beginTime,endTime); + exportList.forEach(x->{ + if (x.getType()==12||x.getType()==17){ + x.setVariablePointStr("+"+x.getVariablePoint()+"绿电分"); + }else { + x.setVariablePointStr("-"+x.getVariablePoint()+"绿电分"); + } + }); + ExcelUtil<UserPointExcel> util = new ExcelUtil<UserPointExcel>(UserPointExcel.class); + util.exportExcel(response, exportList, "店铺余额列表数据"); + } + + @PostMapping("/save") + R save(@RequestBody UserPoint userPoint){ + userPointService.save(userPoint); + return R.ok(); + } + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/AppUserMapper.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/AppUserMapper.java index e8698f6..39560e7 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/AppUserMapper.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/AppUserMapper.java @@ -3,10 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.account.api.model.AppUser; -import com.ruoyi.account.vo.NearbyReferrer; -import com.ruoyi.account.vo.NearbyReferrerVo; -import com.ruoyi.account.vo.UserStatistics; -import com.ruoyi.account.vo.UserStatisticsDetail; +import com.ruoyi.account.vo.*; import com.ruoyi.common.core.web.page.PageInfo; import org.apache.ibatis.annotations.Param; @@ -43,6 +40,6 @@ List<AppUser> getAppUserByPhoneNoFilter(@Param("phone") String phone); - + List<UserPointStatisticsVO> getUserPointPageList(PageInfo<UserPointStatisticsVO> pageInfo,@Param("name") String name); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/UserPointMapper.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/UserPointMapper.java index 25f540f..1726910 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/UserPointMapper.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/UserPointMapper.java @@ -4,11 +4,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.account.vo.UserPointDetailVO; +import com.ruoyi.account.vo.UserPointExcel; +import com.ruoyi.account.vo.UserPointStatisticsPageVO; +import com.ruoyi.account.vo.UserPointStatisticsVO; import com.ruoyi.common.core.web.page.PageInfo; import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; +import java.util.Collection; import java.util.List; +import java.util.Map; /** * <p> @@ -36,4 +41,14 @@ */ List<UserPointDetailVO> getUserPointDetail(PageInfo<UserPointDetailVO> pageInfo, @Param("userId") Long userId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("type") Integer type); + + + List<UserPointDetailVO> getUserPontDetailPageList(PageInfo<UserPointDetailVO> pageInfo, @Param("userId") Long userId, @Param("types")Collection<Integer> types); + + Integer selectRechargeAndUse(@Param("name")String name,@Param("phone") String phone, @Param("beginTime")LocalDateTime beginTime, @Param("endTime")LocalDateTime endTime,@Param("type")Integer type); + + List<UserPointStatisticsPageVO> getUserPointStatisticsPageList(PageInfo<UserPointStatisticsPageVO> pageInfo, @Param("types")Collection<Integer> types, @Param("name")String name,@Param("phone") String phone,@Param("beginTime") LocalDateTime beginTime,@Param("endTime") LocalDateTime endTime); + + List<UserPointExcel> userPointExcel(@Param("types")Collection<Integer> types, @Param("name")String name,@Param("phone") String phone,@Param("beginTime") LocalDateTime beginTime,@Param("endTime") LocalDateTime endTime); + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java index 491cf30..d22399d 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java @@ -66,4 +66,6 @@ AppUser index(); + + PageInfo<UserPointStatisticsVO> getUserPointPageList(String name, Integer pageCurr, Integer pageSize); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java index 7a54b17..07bc020 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java @@ -6,16 +6,16 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.UserPoint; -import com.ruoyi.account.vo.UserPointDetailVO; -import com.ruoyi.account.vo.UserPointStatistics; -import com.ruoyi.account.vo.UserPointVO; +import com.ruoyi.account.vo.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.page.PageInfo; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Collection; import java.util.List; +import java.util.Map; /** * <p> @@ -38,4 +38,11 @@ IPage<UserPoint> getUserPointPage(Page<UserPoint> page, UserPoint userPoint); + + + PageInfo<UserPointDetailVO> getUserPontDetailPageList(Collection<Integer> types, Long id, Integer pageCurr, Integer pageSize); + + Integer selectRechargeAndUse(String name, String phone, LocalDateTime beginTime, LocalDateTime endTime,Integer type); + + PageInfo<UserPointStatisticsPageVO> getUserPointStatisticsPageList(Collection<Integer> types, String name, String phone, LocalDateTime beginTime, LocalDateTime endTime, Integer pageCurr, Integer pageSize); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java index dcb326a..296e169 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java @@ -536,4 +536,12 @@ } return user; } + + @Override + public PageInfo<UserPointStatisticsVO> getUserPointPageList(String name, Integer pageCurr, Integer pageSize) { + PageInfo<UserPointStatisticsVO> pageInfo=new PageInfo<>(pageCurr,pageSize); + List<UserPointStatisticsVO> list=baseMapper.getUserPointPageList(pageInfo, name); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java index 7a2b9dc..2f1c2e9 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java @@ -7,9 +7,7 @@ import com.ruoyi.account.api.model.*; import com.ruoyi.account.mapper.UserPointMapper; import com.ruoyi.account.service.*; -import com.ruoyi.account.vo.UserPointDetailVO; -import com.ruoyi.account.vo.UserPointStatistics; -import com.ruoyi.account.vo.UserPointVO; +import com.ruoyi.account.vo.*; import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.PhoneNumberValidator; @@ -21,6 +19,7 @@ import com.ruoyi.system.api.feignClient.SysConfigClient; import com.ruoyi.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -48,9 +47,8 @@ private UserPointService userPointService; @Resource private SysConfigClient sysConfigClient; - - - + @Autowired + private UserPointMapper userPointMapper; @Override @@ -264,4 +262,28 @@ }); return userPointIPage; } + + @Override + public PageInfo<UserPointDetailVO> getUserPontDetailPageList(Collection<Integer> types, Long id, Integer pageCurr, Integer pageSize) { + PageInfo<UserPointDetailVO> pageInfo = new PageInfo<>(pageCurr, pageSize); + List<UserPointDetailVO> list =baseMapper.getUserPontDetailPageList(pageInfo,id,types); + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public Integer selectRechargeAndUse(String name, String phone, LocalDateTime beginTime, LocalDateTime endTime,Integer type) { + + return baseMapper.selectRechargeAndUse(name,phone,beginTime,endTime,type); + } + + @Override + public PageInfo<UserPointStatisticsPageVO> getUserPointStatisticsPageList(Collection<Integer> types, String name, String phone, LocalDateTime beginTime, LocalDateTime endTime, Integer pageCurr, Integer pageSize) { + PageInfo<UserPointStatisticsPageVO> pageInfo = new PageInfo<>(pageCurr, pageSize); + List<UserPointStatisticsPageVO>list=baseMapper.getUserPointStatisticsPageList(pageInfo,types,name,phone,beginTime,endTime); + pageInfo.setRecords(list); + return pageInfo; + } + + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointExcel.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointExcel.java new file mode 100644 index 0000000..05cc3d4 --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointExcel.java @@ -0,0 +1,26 @@ +package com.ruoyi.account.vo; + +import com.ruoyi.common.core.annotation.Excel; +import lombok.Data; + +@Data +public class UserPointExcel { + + @Excel(name = "用户名") + private String name; + @Excel(name = "手机号") + private String phone; + @Excel(name = "变动类型",readConverterExp="4=兑换商品,12=他人赠送,13=赠与他人,16=取消订单,17=充值") + private Integer type; + + @Excel(name = "变动金额") + private String variablePointStr; + private Integer variablePoint; + + + @Excel(name = "订单编号") + private Long objectId; + + @Excel(name = "变更时间") + private String createTime; +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsOutVO.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsOutVO.java new file mode 100644 index 0000000..25789c0 --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsOutVO.java @@ -0,0 +1,11 @@ +package com.ruoyi.account.vo; + +import com.ruoyi.common.core.web.page.PageInfo; +import lombok.Data; + +@Data +public class UserPointStatisticsOutVO { + private Integer chargeTotalPoint; + private Integer useTotalPoint; + PageInfo<UserPointStatisticsPageVO> pageInfo; +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsPageVO.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsPageVO.java new file mode 100644 index 0000000..a37737e --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsPageVO.java @@ -0,0 +1,20 @@ +package com.ruoyi.account.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserPointStatisticsPageVO { + @ApiModelProperty("用户名") + private String name; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty(value = "变动类型(4=兑换商品,12=他人赠送,13=赠与他人,16=取消订单,17=充值 )") + private Integer type; + @ApiModelProperty(value = "变动金额") + private Integer variablePoint; + @ApiModelProperty("订单编号") + private Long objectId; + @ApiModelProperty(value = "变动时间") + private String createTime; +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsVO.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsVO.java new file mode 100644 index 0000000..70c093a --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointStatisticsVO.java @@ -0,0 +1,20 @@ +package com.ruoyi.account.vo; + +import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserPointStatisticsVO { + + @ApiModelProperty("用户id") + private Long id; + @ApiModelProperty("用户姓名") + private String name; + @ApiModelProperty("绿电分总数") + private Integer totalPoint; + @ApiModelProperty("已使用绿电分数") + private Integer usePoint; + @ApiModelProperty("可用绿电分数") + private Integer availablePoint; +} diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml index 7a6a25f..3c8d0c4 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml +++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml @@ -16,12 +16,7 @@ <result column="del_flag" property="delFlag" /> <result column="first_add" property="firstAdd" /> <result column="last_login_time" property="lastLoginTime" /> - <result column="invite_user_id" property="inviteUserId" /> <result column="shop_id" property="shopId" /> - <result column="part_point" property="partPoint" /> - <result column="part_grow_point" property="partGrowPoint" /> - <result column="shop_point" property="shopPoint" /> - <result column="share_point" property="sharePoint" /> <result column="shop_amount" property="shopAmount" /> <result column="last_shop_time" property="lastShopTime" /> </resultMap> @@ -164,4 +159,19 @@ <select id="getAppUserByPhoneNoFilter" resultType="com.ruoyi.account.api.model.AppUser"> SELECT * FROM t_app_user WHERE phone like CONCAT('%',#{phone},'%') </select> + <select id="getUserPointPageList" resultType="com.ruoyi.account.vo.UserPointStatisticsVO"> + select + id, + name, + (recharge_point + transferable_in_point)as `totalPoint`, + (exchange_point - cancel_point + transferable_out_point) as `usePoint`, + available_point + from + t_app_user + where + del_flag=0 + <if test="null != name and name!= '' "> + and `name` like CONCAT('%',#{name},'%') + </if> + </select> </mapper> diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml index eb7d5a5..30dc099 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml +++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/UserPointMapper.xml @@ -76,4 +76,101 @@ order by create_time desc </select> + <select id="getUserPontDetailPageList" resultType="com.ruoyi.account.vo.UserPointDetailVO"> + select + type, + variable_point, + DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') as createTime, + object_id as objectId, + CASE WHEN (balance - historical_point) > 0 THEN 1 ELSE 2 END AS flag + from t_user_point where app_user_id = #{userId} + <if test="types != null and types.size>0"> + AND type IN + <foreach collection="types" item="type" open="(" separator="," close=")"> + #{type} + </foreach> + </if> + </select> + <select id="selectRechargeAndUse" resultType="java.lang.Integer"> + select + sum(tp.variable_point) as chargeTotalPoint + from + t_user_point tp + left join t_app_user tu on tp.app_user_id = tu.id + where + tp.type =#{type} + <if test="null != name and '' != name"> + AND tu.`name` LIKE concat('%',#{name},'%') + </if> + <if test="null != phone and '' != phone"> + AND tu.`phone` LIKE concat('%',#{phone},'%') + </if> + + <if test="null != beginTime and null != endTime"> + and tp.create_time between #{beginTime} and #{endTime} + </if> + + </select> + <select id="getUserPointStatisticsPageList" resultType="com.ruoyi.account.vo.UserPointStatisticsPageVO"> + select + tu.name, + tu.phone, + tp.type, + tp.variable_point, + tp.object_id, + tp.create_time + from + t_user_point tp + left join t_app_user tu on tp.app_user_id = tu.id + where + 1=1 + <if test="types != null and types.size>0"> + AND type IN + <foreach collection="types" item="type" open="(" separator="," close=")"> + #{type} + </foreach> + </if> + <if test="null != name and '' != name"> + AND tu.`name` LIKE concat('%',#{name},'%') + </if> + <if test="null != phone and '' != phone"> + AND tu.`phone` LIKE concat('%',#{phone},'%') + </if> + + <if test="null != beginTime and null != endTime"> + and tp.create_time between #{beginTime} and #{endTime} + </if> + order by create_time desc + </select> + <select id="userPointExcel" resultType="com.ruoyi.account.vo.UserPointExcel"> + select + tu.name, + tu.phone, + tp.type, + tp.variable_point, + tp.object_id, + tp.create_time + from + t_user_point tp + left join t_app_user tu on tp.app_user_id = tu.id + where + 1=1 + <if test="types != null and types.size>0"> + AND type IN + <foreach collection="types" item="type" open="(" separator="," close=")"> + #{type} + </foreach> + </if> + <if test="null != name and '' != name"> + AND tu.`name` LIKE concat('%',#{name},'%') + </if> + <if test="null != phone and '' != phone"> + AND tu.`phone` LIKE concat('%',#{phone},'%') + </if> + + <if test="null != beginTime and null != endTime"> + and tp.create_time between #{beginTime} and #{endTime} + </if> + order by create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargeOrderController.java new file mode 100644 index 0000000..f9d3bd1 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargeOrderController.java @@ -0,0 +1,45 @@ +package com.ruoyi.order.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.dto.GetImportOrderDTO; +import com.ruoyi.order.model.ChargeOrder; +import com.ruoyi.order.service.ChargeOrderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Api(tags = "充电订单") +@RestController +@RequestMapping("/charge") +public class ChargeOrderController { + @Resource + private ChargeOrderService chargeOrderService; + + /** + * 导入充电信息 + */ + @PostMapping("/importExpress") + public R importExpress(@RequestBody String url) { + JSONObject jsonObject = JSONObject.parseObject(url); + String url2 = jsonObject.getString("url"); + chargeOrderService.importExpress(url2); + return R.ok(); + } + + /** + * 获取导入订单列表 + */ + @ResponseBody + @PostMapping("/getImportData") + @ApiOperation(value = "获取导入订单列表", tags = "后台-充电订单") + public R<PageInfo<ChargeOrder>> getUserPointPageList(@RequestBody GetImportOrderDTO getImportOrderDTO) { + + PageInfo<ChargeOrder> pageInfo=chargeOrderService.getUserPointPageList(getImportOrderDTO); + + return R.ok(pageInfo); + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java index ef321e2..f68ed57 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java @@ -583,10 +583,6 @@ orderPage.setAppUserIds(orderPage.getAppUserIds().stream().distinct().collect(Collectors.toList())); } -// UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); -// orderInfo.setRecipient(userAddress.getRecieveName() + "-" + userAddress.getRecievePhone()); -// userAddress.setRecieveAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getRecieveAddress()); -// orderInfo.setAddress(userAddress.getRecieveAddress()); List<OrderExport> orderExportList = orderMapper.getOrderExportList(orderPage); @@ -603,13 +599,6 @@ orderExport.setGoodsName(goods.getName()); /* orderExport.setCompanyCostPrice(goods.getOperatingCost()); orderExport.setSupplierCostPrice(goods.getShopCost());*/ - } - - String expressJson = orderExport.getExpressJson(); - if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")) { - JSONObject jsonObject = JSONObject.parseObject(expressJson); - orderExport.setExpressNum(jsonObject.getString("num")); - orderExport.setExpressName(ExpressCompanyMap.getCompanyNameByCode(jsonObject.getString("com"))); } }); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetImportOrderDTO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetImportOrderDTO.java new file mode 100644 index 0000000..b2b22e7 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetImportOrderDTO.java @@ -0,0 +1,22 @@ +package com.ruoyi.order.dto; + +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.springframework.web.bind.annotation.RequestParam; + +import java.time.LocalDateTime; + +@Data +public class GetImportOrderDTO { + private String orderNumber; + private String phone; + private String chargingStation; + private String powerStationOperator; + private String terminalCode; + private LocalDateTime beginTime1; + private LocalDateTime endTime1; + private LocalDateTime beginTime2; + private LocalDateTime endTime2; + private Integer pageCurr; + private Integer pageSize; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/ChargeOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/ChargeOrderMapper.java new file mode 100644 index 0000000..b826f38 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/ChargeOrderMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.dto.GetImportOrderDTO; +import com.ruoyi.order.model.ChargeOrder; +import com.ruoyi.order.model.OrderGood; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ChargeOrderMapper extends BaseMapper<ChargeOrder> { + List<ChargeOrder> getUserPointPageList(PageInfo<ChargeOrder> pageInfo,@Param("dto") GetImportOrderDTO dto); +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ChargeOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ChargeOrderService.java new file mode 100644 index 0000000..cb8e5ac --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ChargeOrderService.java @@ -0,0 +1,13 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.dto.GetImportOrderDTO; +import com.ruoyi.order.model.ChargeOrder; +import com.ruoyi.order.model.Order; + +public interface ChargeOrderService extends IService<ChargeOrder> { + void importExpress(String url); + + PageInfo<ChargeOrder> getUserPointPageList(GetImportOrderDTO getImportOrderDTO); +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java new file mode 100644 index 0000000..f836ffc --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargeOrderServiceImpl.java @@ -0,0 +1,368 @@ +package com.ruoyi.order.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.feignClient.UserPointClient; +import com.ruoyi.account.api.model.AppUser; +import com.ruoyi.account.api.model.UserPoint; +import com.ruoyi.common.core.constant.ExpressCompanyMap; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.dto.GetImportOrderDTO; +import com.ruoyi.order.mapper.ChargeOrderMapper; +import com.ruoyi.order.mapper.OrderMapper; +import com.ruoyi.order.model.ChargeOrder; +import com.ruoyi.order.model.Order; +import com.ruoyi.order.service.ChargeOrderService; +import com.ruoyi.order.service.OrderService; +import com.ruoyi.order.vo.ConfirmDelivery; +import com.ruoyi.other.api.domain.Region; +import com.ruoyi.system.api.domain.SysConfig; +import com.ruoyi.system.api.feignClient.SysConfigClient; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.MalformedURLException; +import java.net.URL; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@Slf4j +@Service +public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, ChargeOrder> implements ChargeOrderService { + + @Resource + private OrderService orderService; + @Resource + private SysConfigClient sysConfigClient; + + @Resource + private AppUserClient appUserClient; + @Resource + private UserPointClient userPointClient; + @Resource + private ChargeOrderService chargeOrderService; + private static final String DEFAULT_AVATAR_URL = "http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/aedfbbb41280471f8d9fa7905298b65f.png"; + + + @Override + public void importExpress(String url) { + URL url1 = null; + try { + url1 = new URL(url); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + List<String> orderNumberList=new ArrayList<>(); + + try (InputStream fileInputStream = url1.openStream()) { + Workbook workbook = new XSSFWorkbook(fileInputStream); + Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet + int lastRowNum = sheet.getLastRowNum(); + for (int i = 1; i <= lastRowNum; i++) {//第二行开始 + Row row = sheet.getRow(i); + // 订单编号 + if (row.getCell(0) == null){ + throw new ServiceException("第" + i + "行订单编号为空", 500); + } + row.getCell(0).setCellType(CellType.STRING); + String orderNum = row.getCell(0).getStringCellValue(); + + // 订单类型 + if (row.getCell(1) == null){ + throw new ServiceException("第" + i + "行订单类型为空", 500); + } + row.getCell(1).setCellType(CellType.STRING); + String orderType = row.getCell(1).getStringCellValue(); + + // 充电方式 + if (row.getCell(2) == null){ + throw new ServiceException("第" + i + "行充电方式为空", 500); + } + row.getCell(2).setCellType(CellType.STRING); + String chargeType = row.getCell(2).getStringCellValue(); + + + // 充电用户 + if (row.getCell(3) == null){ + throw new ServiceException("第" + i + "行充电用户为空", 500); + } + row.getCell(3).setCellType(CellType.STRING); + String phone = row.getCell(3).getStringCellValue(); + + + // 开始时间 + Cell beginTimeCell = row.getCell(6); + if (beginTimeCell == null) { + throw new ServiceException("第" + (i + 1) + "行开始时间为空", 500); + } + + LocalDateTime beginTime; + if (beginTimeCell.getCellType() == CellType.NUMERIC || DateUtil.isCellDateFormatted(beginTimeCell)) { + // 处理数值型日期(包括Excel内置日期格式) + beginTime = beginTimeCell.getDateCellValue().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + } else { + // 处理文本型日期(如 "2025/4/3 23:25:38") + String dateStr = beginTimeCell.getStringCellValue().trim(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/M/d H:mm:ss"); + beginTime = LocalDateTime.parse(dateStr, formatter); + } + + // 结束时间 + Cell endTimeCell = row.getCell(6); + if (endTimeCell == null) { + throw new ServiceException("第" + (i + 1) + "行开始时间为空", 500); + } + + LocalDateTime endTime; + if (endTimeCell.getCellType() == CellType.NUMERIC || DateUtil.isCellDateFormatted(endTimeCell)) { + // 处理数值型日期(包括Excel内置日期格式) + endTime = endTimeCell.getDateCellValue().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + } else { + // 处理文本型日期(如 "2025/4/3 23:25:38") + String dateStr = beginTimeCell.getStringCellValue().trim(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/M/d H:mm:ss"); + endTime = LocalDateTime.parse(dateStr, formatter); + } + + + // 充电时长 + if (row.getCell(8 )== null){ + throw new ServiceException("第" + i + "行充电时长为空", 500); + } + row.getCell(8).setCellType(CellType.STRING); + String chargingDuration = row.getCell(8).getStringCellValue(); + + + // 充电电量 + if (row.getCell(9 )== null){ + throw new ServiceException("第" + i + "行充电电量为空", 500); + } + row.getCell(9).setCellType(CellType.STRING); + String chargingCapacity = row.getCell(9).getStringCellValue(); + + // 电站运营商 + if (row.getCell(15 )== null){ + throw new ServiceException("第" + i + "行电站运营商为空", 500); + } + row.getCell(15).setCellType(CellType.STRING); + String powerStationOperator = row.getCell(15).getStringCellValue(); + + // 城市名称 + if (row.getCell(16 )== null){ + throw new ServiceException("第" + i + "行城市名称为空", 500); + } + row.getCell(16).setCellType(CellType.STRING); + String city = row.getCell(16).getStringCellValue(); + + // 充电场站 + if (row.getCell(17 )== null){ + throw new ServiceException("第" + i + "行充电场站为空", 500); + } + row.getCell(17).setCellType(CellType.STRING); + String chargingStation = row.getCell(17).getStringCellValue(); + + // 电站id + if (row.getCell(18 )== null){ + throw new ServiceException("第" + i + "行电站id为空", 500); + } + row.getCell(18).setCellType(CellType.STRING); + String powerStationId = row.getCell(18).getStringCellValue(); + + // 终端编码 + if (row.getCell(20 )== null){ + throw new ServiceException("第" + i + "行电站id为空", 500); + } + row.getCell(20).setCellType(CellType.STRING); + String terminalCode = row.getCell(20).getStringCellValue(); + + // 车牌号 + if (row.getCell(26 )== null){ + throw new ServiceException("第" + i + "行车牌号为空", 500); + } + row.getCell(26).setCellType(CellType.STRING); + String plateNumber = row.getCell(26).getStringCellValue(); + + // 电站价电费金额 + if (row.getCell(73 )== null){ + throw new ServiceException("第" + i + "行电站价电费金额为空", 500); + } + row.getCell(73).setCellType(CellType.STRING); + String electricityAmount = row.getCell(73).getStringCellValue(); + + // 电站价服务费金额 + if (row.getCell(74 )== null){ + throw new ServiceException("第" + i + "行电站价服务费金额为空", 500); + } + row.getCell(74).setCellType(CellType.STRING); + String serviceAmount = row.getCell(74).getStringCellValue(); + + // 电站价总金额 + if (row.getCell(75 )== null){ + throw new ServiceException("第" + i + "行电站价服务费金额为空", 500); + } + row.getCell(75).setCellType(CellType.STRING); + String totalAmount = row.getCell(75).getStringCellValue(); + + + //检查订单号是否重复 + if (orderNumberList.contains(orderNum)) { + throw new ServiceException("订单号重复:" + orderNum, 500); + } + //数据库中是否存在 + ChargeOrder order = chargeOrderService.getOne(new LambdaQueryWrapper<ChargeOrder>() + .eq(ChargeOrder::getOrderNumber, orderNum) + ); + if (order != null) { + throw new ServiceException("数据库中订单已存在:" + orderNum, 500); + } + orderNumberList.add(orderNum);//添加到订单集合中 + + + ChargeOrder chargeOrder = new ChargeOrder(); + chargeOrder.setOrderNumber(orderNum); + chargeOrder.setOrderType(orderType); + chargeOrder.setChargeType(chargeType); + chargeOrder.setPhone(phone); + chargeOrder.setBeginTime(beginTime ); + chargeOrder.setEndTime(endTime); + chargeOrder.setChargingDuration(chargingDuration); + chargeOrder.setChargingCapacity( new BigDecimal(chargingCapacity)); + chargeOrder.setPowerStationOperator(powerStationOperator); + chargeOrder.setCity(city); + chargeOrder.setChargingStation(chargingStation); + chargeOrder.setPowerStationId(Integer.valueOf(powerStationId)); + chargeOrder.setTerminalCode(terminalCode); + chargeOrder.setPlateNumber(plateNumber); + chargeOrder.setElectricityAmount(new BigDecimal(electricityAmount)); + chargeOrder.setServiceAmount(new BigDecimal(serviceAmount)); + chargeOrder.setTotalAmount(new BigDecimal(totalAmount)); + + R r = importData(chargeOrder); + if (R.isError(r)) { + throw new ServiceException(r.getMsg(), 500); + } + } + + } catch (IOException e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + } + + @Override + public PageInfo<ChargeOrder> getUserPointPageList(GetImportOrderDTO dto) { + PageInfo<ChargeOrder> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize()); + List<ChargeOrder> list= baseMapper.getUserPointPageList(pageInfo,dto); + pageInfo.setRecords(list); + return pageInfo; + } + + private R importData(ChargeOrder chargeOrder) { + //先计算出积分数 + Integer point = getPoint(chargeOrder.getTotalAmount()); + //获取用户,更改积分数 + AppUser appuser = appUserClient.getAppUserByPhone1(chargeOrder.getPhone()).getData(); + if (null==appuser){ + //创建用户 + appuser = new AppUser(); +// Long userId = UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE; +// appuser.setId(userId); + appuser.setPhone(chargeOrder.getPhone()); + appuser.setStatus(1); + appuser.setAvatar( DEFAULT_AVATAR_URL); + appuser.setCreateTime(LocalDateTime.now()); + appuser.setDelFlag(false); + } + Integer chargePoint=appuser.getRechargePoint();//充值积分 + Integer availablePoint=appuser.getAvailablePoint();//可用积分 + Integer totalPoint=appuser.getTotalPoint();//总积分 + appuser.setRechargePoint(chargePoint==null?0:chargePoint +point);//充值积分增加 + appuser.setAvailablePoint(availablePoint==null?0:availablePoint+point);//可用积分增加 + appuser.setTotalPoint(totalPoint==null?0:totalPoint+point);//总积分增加 + + Long userId = appUserClient.saveOrUpdateAppUser(appuser); + if (userId==null){ + return R.fail("导入订单-保存用户失败"); + } + + //添加用户积分流水 + //转入用户 + UserPoint userPoint = new UserPoint(); + userPoint.setType(17); + userPoint.setHistoricalPoint(availablePoint); + userPoint.setVariablePoint(point); + userPoint.setBalance(appuser.getAvailablePoint()); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(userId); + userPoint.setExtention(chargeOrder.getOrderNumber()); + R r = userPointClient.save(userPoint); + if (r.isError(r)) { + return R.fail("导入订单-保存用户积分流水失败"); + } + //保存到数据库 + chargeOrderService.save(chargeOrder); + + return R.ok(); + } + + /** + * 获取现金兑换的积分数 + * @param cash + * @return + */ + public Integer getPoint(BigDecimal cash){ + if (cash == null || cash.compareTo(BigDecimal.ZERO) < 0) { + throw new IllegalArgumentException("金额不能为null或负数"); + } + // 获取积分兑换比例配置 + R<SysConfig> info = sysConfigClient.getInfo(8L); + if (info == null || info.getData() == null) { + throw new RuntimeException("获取积分兑换比例配置失败"); + } + String configValue = info.getData().getConfigValue(); + if (StringUtils.isBlank(configValue)) { + throw new RuntimeException("积分兑换比例配置值为空"); + } + try { + // 使用BigDecimal处理比例,避免精度问题 + BigDecimal ratio = new BigDecimal(configValue.trim()); + if (ratio.compareTo(BigDecimal.ZERO) <= 0) { + throw new RuntimeException("积分兑换比例必须大于0"); + } + + // 计算积分并向下取整(Floor) + BigDecimal points = cash.multiply(ratio); + return points.setScale(0, RoundingMode.FLOOR).intValue(); + + } catch (NumberFormatException e) { + throw new RuntimeException("积分兑换比例配置值格式错误", e); + } catch (ArithmeticException e) { + throw new RuntimeException("积分计算结果溢出", e); + } + + } + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index fed1693..ceb0e8a 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -792,7 +792,11 @@ order.setPointDeductionAmount(pointDeductionAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setPaymentAmount(paymentMoney);//实际支付价格 order.setPoint(orderPoint);//使用积分 - order.setPayMethod(orderPayment.getPaymentType());//支付方式 + if (orderPayment.getPaymentType()==3 && orderPoint>0){//微信支付 但支付的积分也大于0 + order.setPayMethod(4);//组合支付 + }else { + order.setPayMethod(orderPayment.getPaymentType());//积分或者微信 + } order.setPayStatus(1); order.setShopId(orderPayment.getShopId()); order.setDelFlag(0); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java index d521575..e873738 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java @@ -11,15 +11,9 @@ /** * 订单状态 */ - @Excel(name = "订单状态" , readConverterExp = "1=待发货,2=待收货,3=待使用,4=已完成,5=已取消,6=已退款,7=售后中,8=已评价") + @Excel(name = "订单状态" , readConverterExp = "3=待使用,4=已完成,5=已取消,8=已评价") private String orderStatus; - - /** - * 交易单号 - */ - @Excel(name = "交易单号") - private String serialNumber; /** * 商户单号 @@ -28,50 +22,10 @@ private String orderNumber; /** - * 商户号 + * 交易单号 */ - @Excel(name = "商户号") - private String tradeMerchantNo = "729677708"; - - /** - * 发货方式 - */ - @Excel(name = "发货方式", readConverterExp = "1=快递,2=自提") - private String distributionMode; - - /** - * 发货模式 - */ - @Excel(name = "发货模式") - private String deliveryMode = "统一发货"; - - - /** - * 是否完成发货 - */ - @Excel(name = "是否完成发货") - private String isDelivery; - - /** - * 是否重新发货 - */ - @Excel(name = "是否重新发货") - private String isReDelivery; - - - /** - * 订单类型 - */ - @Excel(name = "订单类型", readConverterExp = "1=服务,2=单品(自提),3=单品(快递)") - private String orderType; - - - - /** - * 收货地址 - */ - @Excel(name = "收货地址") - private String address; + @Excel(name = "交易单号") + private String serialNumber; /** * 下单时间 @@ -93,6 +47,7 @@ @Excel(name = "联系方式") private String phone; + /** * 商品名称 */ @@ -104,66 +59,128 @@ */ @Excel(name = "商品售价") private BigDecimal sellingPrice; - - /** - * 成本价 - */ - @Excel(name = "公司运营成本") - private BigDecimal companyCostPrice; - - /** - * 成本价 - */ - @Excel(name = "门店、供应商成本") - private BigDecimal supplierCostPrice; - + @Excel(name = "支付方式",readConverterExp ="1=微信,2=账户余额,3=积分,4=组合") + private Integer pay_method; /** * 支付金额 */ @Excel(name = "支付金额") private String orderMoney; + @Excel(name = "支付积分") + private String point; + + private String goodJson; + /** + * 商户号 + */ + @Excel(name = "商户号") + private String tradeMerchantNo = "729677708"; + + /** + * 发货方式 + */ + /* @Excel(name = "发货方式", readConverterExp = "1=快递,2=自提") + private String distributionMode;*/ + + /** + * 发货模式 + */ +/* @Excel(name = "发货模式") + private String deliveryMode = "统一发货";*/ + + + /** + * 是否完成发货 + */ +/* + @Excel(name = "是否完成发货") + private String isDelivery; +*/ + + /** + * 是否重新发货 + */ +/* + @Excel(name = "是否重新发货") + private String isReDelivery; +*/ + + + /** + * 订单类型 + */ +/* @Excel(name = "订单类型", readConverterExp = "1=服务,2=单品(自提),3=单品(快递)") + private String orderType;*/ + + + + /** + * 收货地址 + */ +/* + @Excel(name = "收货地址") + private String address; +*/ + + + + + /** + * 成本价 + */ + /* @Excel(name = "公司运营成本") + private BigDecimal companyCostPrice;*/ + + /** + * 成本价 + */ +/* @Excel(name = "门店、供应商成本") + private BigDecimal supplierCostPrice;*/ + + + /** * 快递单号 */ - @Excel(name = "快递单号") +/* @Excel(name = "快递单号") private String expressNum; - private String expressJson; + private String expressJson;*/ - private String goodJson; + /** * 快递公司 */ - @Excel(name = "快递公司") - private String expressName; +/* @Excel(name = "快递公司") + private String expressName;*/ - /** + /* *//** * 省 - */ + *//* @Excel(name = "省") private String province; - /** + *//** * 省区划代码 - */ + *//* @Excel(name = "省区划代码") private String provinceCode; - /** + *//** * 市 - */ + *//* @Excel(name = "市") private String city; - /** + *//** * 市区划代码 - */ + *//* @Excel(name = "市区划代码") private String cityCode; - private String addressJson; + private String addressJson;*/ diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/ChargeOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/ChargeOrderMapper.xml new file mode 100644 index 0000000..4dc4b45 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/ChargeOrderMapper.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.order.mapper.ChargeOrderMapper"> + + + <select id="getUserPointPageList" resultType="com.ruoyi.order.model.ChargeOrder"> + select * from t_charge_order + where + 1=1 + <if test="dto.orderNumber != null and dto.orderNumber != ''"> + AND order_number LIKE CONCAT('%', #{dto.orderNumber}, '%') + </if> + <if test="dto.phone != null and dto.phone != ''"> + AND phone LIKE CONCAT('%', #{dto.phone}, '%') + </if> + <if test="dto.chargingStation != null and dto.chargingStation != ''"> + AND charging_station LIKE CONCAT('%', #{dto.chargingStation}, '%') + </if> + <if test="dto.powerStationOperator != null and dto.powerStationOperator != ''"> + AND power_station_operator LIKE CONCAT('%', #{dto.powerStationOperator}, '%') + </if> + <if test="dto.terminalCode != null and dto.terminalCode != ''"> + AND terminal_code LIKE CONCAT('%', #{dto.terminalCode}, '%') + </if> + <if test="dto.beginTime1 != null and dto.endTime1 != null "> + AND begin_time between #{dto.beginTime1} and #{dto.endTime1} + </if> + + <if test="dto.beginTime2 != null and dto.endTime2 != null"> + AND end_time between #{dto.beginTime2 } and #{dto.endTime2 } + </if> + + </select> +</mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 137245d..5372ae5 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -164,21 +164,16 @@ SELECT o.order_status, o.order_number, - CASE WHEN o.order_type = 1 THEN 1 WHEN o.order_type = 2 and o.distribution_mode = 1 THEN 2 ELSE 3 END as orderType, - case when o.order_type = 1 then 1 else o.distribution_mode end as distributionMode, - o.address_Json, o.create_time, o.app_user_id, og.goods_id, og.selling_price, og.good_json, - og.selling_price orderMoney, - o.express_json, - o.serial_number, - o.deliver_province province, - o.deliver_province_code provinceCode, - o.deliver_city city, - o.deliver_city_code cityCode + o.pay_method, + o.payment_amount orderMoney, + o.point , + o.serial_number + FROM t_order_good og LEFT JOIN t_order o ON og.order_id = o.id @@ -186,20 +181,15 @@ <if test="null != item.code and '' != item.code"> and o.order_number like CONCAT('%', #{item.code}, '%') </if> + <if test="null != item.goodsName and '' != item.goodsName"> + and good_name like CONCAT('%', #{item.goodsName}, '%') + </if> + <if test="null != item.appUserIds and item.appUserIds.size() > 0"> and o.app_user_id in <foreach collection="item.appUserIds" separator="," item="tem" index="index" open="(" close=")"> #{tem} </foreach> - </if> - <if test="null != item.goodsType and 1 == item.goodsType"> - and order_type = #{item.goodsType} - </if> - <if test="null != item.goodsType and 2 == item.goodsType"> - and order_type = 2 and distribution_mode = 1 - </if> - <if test="null != item.goodsType and 3 == item.goodsType"> - and order_type = 2 and distribution_mode = 2 </if> <if test="null != item.paymentType"> and o.pay_method = #{item.paymentType} @@ -211,7 +201,7 @@ and o.order_status in (4, 8) </if> <if test="null != item.shopId"> - and o.shop_id = #{item.shopId} and distribution_mode != 2 + and o.shop_id = #{item.shopId} </if> <if test="null != item.startTime and null != item.endTime"> and o.create_time between #{item.startTime} and #{item.endTime} diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java index b70ccf4..1dcd913 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java @@ -8,6 +8,7 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.Shop; import com.ruoyi.other.api.domain.ShopBalanceStatement; @@ -18,9 +19,7 @@ import com.ruoyi.other.service.ShopBalanceStatementService; import com.ruoyi.other.service.ShopService; -import com.ruoyi.other.vo.ShopBalanceStatementDetailPage; -import com.ruoyi.other.vo.ShopCommission; -import com.ruoyi.other.vo.ShopCommissionDetail; +import com.ruoyi.other.vo.*; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; @@ -421,5 +420,24 @@ }*/ + /** + * 获取门店流水数据 + * + * @param types + * @param objectId + * @return + */ + @GetMapping("/getShopBalanceStatementPageList") + public R<PageInfo<ShopBalanceStatementVO>> getShopBalanceStatementPageList(@RequestParam("types") Collection<Integer> types, + @RequestParam(value = "objectId", required = false) Long objectId, + @RequestParam(value = "id") Integer id, + @ApiParam("当前页")@RequestParam("pageCurr") Integer pageCurr, + @ApiParam("分页大小")@RequestParam("pageSize") Integer pageSize) { + PageInfo<ShopBalanceStatementVO> pageInfo=shopBalanceStatementService.getShopBalanceStatementPageList(types,objectId,id,pageCurr,pageSize); + + return R.ok(pageInfo); + } + + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java index 847621e..666e57f 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java @@ -15,6 +15,7 @@ import com.ruoyi.account.api.model.AppUserShop; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.bean.BeanUtils; +import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; @@ -50,6 +51,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; @@ -705,7 +707,7 @@ */ /** - * 获取店铺收益 后天-工作台-收益分析 + * 获取店铺收益 后台-工作台-收益分析 */ @PostMapping("/getIncomeAnalysis") R<Map<String, Object>> getIncomeAnalysis(@RequestBody ShopAnalysisDTO shopAnalysisDTO){ @@ -726,6 +728,30 @@ return R.ok(shop.getId()); } + /** + * 店铺余额列表 + */ + + @GetMapping("/getBalanceList") + @ApiOperation(value = "门店余额列表", tags = {"后台-财务统计-余额列表"}) + R<PageInfo<ShopBalanceListVO>> getBalanceList(@ApiParam("门店名称")@RequestParam("name") String name, + @ApiParam("当前页")@RequestParam("pageCurr") Integer pageCurr, + @ApiParam("分页大小")@RequestParam("pageSize") Integer pageSize){ + PageInfo<ShopBalanceListVO> pageInfo=shopService.getBalanceList(name,pageCurr,pageSize); + return R.ok(pageInfo); + } + + /** + * 导出店铺余额列表 + */ + + @GetMapping("/shopBalanceExcel") + @ApiOperation(value = "导出", tags = {"后台-财务统计-余额列表"}) + void shopBalanceExcel(HttpServletResponse response,@ApiParam("门店名称")@RequestParam(value = "name" ,required = false) String name){ + List<ShopBalanceExcel> exportList =shopMapper.shopBalanceExcel(name); + ExcelUtil<ShopBalanceExcel> util = new ExcelUtil<ShopBalanceExcel>(ShopBalanceExcel.class); + util.exportExcel(response, exportList, "店铺余额列表数据"); + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java index dd74416..a14a1d3 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java @@ -224,10 +224,10 @@ //扣除账户余额及添加变动明细 BigDecimal balance = shop.getBalance();//余额 BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney();//可提现金额 - BigDecimal withdrawMoney = shop.getWithdrawMoney();//审核中金额 + BigDecimal withdrawAuditMoney = shop.getWithdrawAuditMoney();//审核中金额 shop.setBalance(balance.subtract(money).setScale(2, RoundingMode.HALF_EVEN));//余额减少 shop.setCanWithdrawMoney(canWithdrawMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN));//可提现金额减少 - shop.setWithdrawAuditMoney(withdrawMoney.add(money).setScale(2, RoundingMode.HALF_EVEN));//审核中金额增加 + shop.setWithdrawAuditMoney(withdrawAuditMoney.add(money).setScale(2, RoundingMode.HALF_EVEN));//审核中金额增加 shopService.updateById(shop); //添加余额变动明细 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); @@ -301,7 +301,7 @@ //添加门店变动明细 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); shopBalanceStatement.setShopId(shop.getId()); - shopBalanceStatement.setType(4); + shopBalanceStatement.setType(7); shopBalanceStatement.setHistoricalBalance(balance); shopBalanceStatement.setVariableAmount(money); shopBalanceStatement.setBalance(shop.getBalance()); @@ -363,7 +363,7 @@ //添加门店变动明细 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); shopBalanceStatement.setShopId(shop.getId()); - shopBalanceStatement.setType(4); + shopBalanceStatement.setType(7); shopBalanceStatement.setHistoricalBalance(balance); shopBalanceStatement.setVariableAmount(money); shopBalanceStatement.setBalance(shop.getBalance()); diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java index 0b70ed9..8bbdea6 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java @@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.ShopBalanceStatement; +import com.ruoyi.other.vo.ShopBalanceListVO; import com.ruoyi.other.vo.ShopBalanceStatementVO; import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; +import java.util.Collection; import java.util.List; /** @@ -27,4 +29,6 @@ List<ShopBalanceStatementVO> getShopBalanceStatementList(PageInfo<ShopBalanceStatementVO> pageInfo, @Param("shopId") Integer shopId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("type") Integer type); + + List<ShopBalanceStatementVO> getShopBalanceStatementPageList(PageInfo<ShopBalanceStatementVO> pageInfo,@Param("types") Collection<Integer> types,@Param("objectId") Long objectId,@Param("shopId") Integer id); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopMapper.java index c2630c8..90ee5c0 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopMapper.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopMapper.java @@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.Shop; -import com.ruoyi.other.vo.GoodsVO; -import com.ruoyi.other.vo.NearbyShopVO; -import com.ruoyi.other.vo.ShopDetailVO; -import com.ruoyi.other.vo.ShopStatistics; +import com.ruoyi.other.vo.*; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -33,4 +30,8 @@ ShopStatistics getShopStatistics(@Param("shopId") Integer shopId); List<GoodsVO> selectListByShopId(PageInfo<GoodsVO> pageInfo, @Param("shopId") Integer shopId); + + List<ShopBalanceListVO> getBalanceList(PageInfo<ShopBalanceListVO> pageInfo, String name); + + List<ShopBalanceExcel> shopBalanceExcel(String name); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java index ce5f134..201a6ba 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java @@ -2,7 +2,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.ShopBalanceStatement; +import com.ruoyi.other.vo.ShopBalanceListVO; +import com.ruoyi.other.vo.ShopBalanceStatementVO; + +import java.util.Collection; /** @@ -14,5 +19,6 @@ * @since 2024-11-20 */ public interface ShopBalanceStatementService extends IService<ShopBalanceStatement> { + PageInfo<ShopBalanceStatementVO> getShopBalanceStatementPageList(Collection<Integer> types, Long objectId, Integer id, Integer pageCurr, Integer pageSize); // ShopCommissionStatisticsVO shopCommissionStatistics(IPage<ShopBalanceStatement> page, ShopBalanceStatement shopBalanceStatement); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java index ab445f8..1d10a2a 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java @@ -60,4 +60,6 @@ Integer addGoodsByShop(AddGoodsDTO addGoodsDTO); Integer editGoodsByShop(AddGoodsDTO addGoodsDTO); + + PageInfo<ShopBalanceListVO> getBalanceList(String name, Integer pageCurr, Integer pageSize); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java index a3e7e28..609e616 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java @@ -1,14 +1,20 @@ package com.ruoyi.other.service.impl; +import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.mapper.ShopBalanceStatementMapper; import com.ruoyi.other.service.ShopBalanceStatementService; +import com.ruoyi.other.vo.ShopBalanceListVO; +import com.ruoyi.other.vo.ShopBalanceStatementVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -24,6 +30,14 @@ @Service public class ShopBalanceStatementServiceImpl extends ServiceImpl<ShopBalanceStatementMapper, ShopBalanceStatement> implements ShopBalanceStatementService { + @Autowired + private ShopBalanceStatementMapper shopBalanceStatementMapper; - + @Override + public PageInfo<ShopBalanceStatementVO> getShopBalanceStatementPageList(Collection<Integer> types, Long objectId, Integer id, Integer pageCurr, Integer pageSize) { + PageInfo<ShopBalanceStatementVO> pageInfo = new PageInfo<>(pageCurr, pageSize); + List<ShopBalanceStatementVO> list =shopBalanceStatementMapper.getShopBalanceStatementPageList(pageInfo,types,objectId,id); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java index ac388e0..234f0e0 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java @@ -454,6 +454,17 @@ return goods.getId(); } + @Override + public PageInfo<ShopBalanceListVO> getBalanceList(String name, Integer pageCurr, Integer pageSize) { + PageInfo<ShopBalanceListVO> pageInfo = new PageInfo<>(pageCurr, pageSize); + + List<ShopBalanceListVO> list = shopMapper.getBalanceList(pageInfo,name); + + + pageInfo.setRecords(list); + return pageInfo; + } + /** * 获取商品当前的价格,就是看当前商品是否在秒杀活动中 */ diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/AllShopVO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/AllShopVO.java new file mode 100644 index 0000000..2d293e6 --- /dev/null +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/AllShopVO.java @@ -0,0 +1,9 @@ +package com.ruoyi.other.vo; + +import lombok.Data; + +@Data +public class AllShopVO { + private Integer id; + private String name; +} diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceExcel.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceExcel.java new file mode 100644 index 0000000..90b693d --- /dev/null +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceExcel.java @@ -0,0 +1,29 @@ +package com.ruoyi.other.vo; + +import com.ruoyi.common.core.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +@Data +public class ShopBalanceExcel { + @Excel(name = "门店id") + private Integer id; + @Excel(name = "店铺名称") + private String name; + @Excel(name = "收益总额") + private BigDecimal totalMoney; + + @Excel(name = "余额") + private BigDecimal balance; + @Excel(name = "冻结金额") + private BigDecimal frozenMoney; + + @Excel(name = "可提现金额") + private BigDecimal canWithdrawMoney; + + @Excel(name = "提现中金额") + private BigDecimal withdrawAuditMoney; + @Excel(name = "已提现金额") + private BigDecimal withdrawMoney; +} diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceListVO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceListVO.java new file mode 100644 index 0000000..f72d9f5 --- /dev/null +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceListVO.java @@ -0,0 +1,28 @@ +package com.ruoyi.other.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ShopBalanceListVO { + + @ApiModelProperty("门店id") + private Integer id; + @ApiModelProperty("门店名称") + private String name; + + @ApiModelProperty("总收入") + private BigDecimal totalMoney; + @ApiModelProperty("余额") + private BigDecimal balance; + @ApiModelProperty("可提现金额") + private BigDecimal canWithdrawMoney; + @ApiModelProperty("冻结金额") + private BigDecimal frozenMoney; + @ApiModelProperty("审核中金额") + private BigDecimal withdrawAuditMoney; + @ApiModelProperty("已提现金额") + private BigDecimal withdrawMoney; +} diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceStatementVO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceStatementVO.java index 70139a8..67d79d9 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceStatementVO.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopBalanceStatementVO.java @@ -11,7 +11,7 @@ @ApiModel("ShopBalanceStatementVO对象") public class ShopBalanceStatementVO { - @ApiModelProperty(value = "变动类型(4=提现,5=订单收入,6=订单退款)") + @ApiModelProperty(value = "变动类型(4=提现,5=订单收入,6=订单退款,7=提现失败)") private Integer type; @ApiModelProperty(value = "变动金额") @@ -29,4 +29,7 @@ @ApiModelProperty(value = "增或减标识: 1-增 2-减") private Integer flag; + @ApiModelProperty("提现/订单号") + private String objectId; + } diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml index 314c82f..bd7b890 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml @@ -55,4 +55,30 @@ </if> order by createTime desc </select> + + <select id="getShopBalanceStatementPageList" resultType="com.ruoyi.other.vo.ShopBalanceStatementVO"> + select + type, + variable_amount, + DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') as createTime, + historical_balance, + balance, + CASE WHEN (balance - historical_balance) > 0 THEN 1 ELSE 0 END AS flag, + object_id + from + t_shop_balance_statement + where + shop_id = #{shopId} + <if test="objectId != null "> + AND object_id = #{objectId} + </if> + <if test="types != null and types.size>0"> + AND type IN + <foreach collection="types" item="type" open="(" separator="," close=")"> + #{type} + </foreach> + </if> + + + </select> </mapper> \ No newline at end of file diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml index 40daa7a..9e8712f 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml @@ -101,4 +101,36 @@ ORDER BY ifnull(tg.sort, -1) DESC </select> + <select id="getBalanceList" resultType="com.ruoyi.other.vo.ShopBalanceListVO"> + SELECT + id, + name, + balance, + can_withdraw_money AS canWithdrawMoney, + withdraw_audit_money AS withdrawAuditMoney, + withdraw_money AS withdrawMoney, + (balance - can_withdraw_money) AS frozenMoney, + (can_withdraw_money + withdraw_audit_money + withdraw_money + (balance - can_withdraw_money)) AS totalMoney + FROM t_shop + WHERE del_flag = 0 + <if test="name != null and name != ''"> + AND `name` LIKE CONCAT('%', #{name}, '%') + </if> + </select> + <select id="shopBalanceExcel" resultType="com.ruoyi.other.vo.ShopBalanceExcel"> + select + id, + name, + balance, + can_withdraw_money AS canWithdrawMoney, + withdraw_audit_money AS withdrawAuditMoney, + withdraw_money AS withdrawMoney, + (balance - can_withdraw_money) AS frozenMoney, + (can_withdraw_money + withdraw_audit_money + withdraw_money + (balance - can_withdraw_money)) AS totalMoney + FROM t_shop + WHERE del_flag = 0 + <if test="name != null and name != ''"> + AND `name` LIKE CONCAT('%', #{name}, '%') + </if> + </select> </mapper> \ No newline at end of file -- Gitblit v1.7.1