修改开票逻辑
This commit is contained in:
		| @ -49,7 +49,8 @@ public class BillingPageReqVO extends PageParam { | |||||||
|  |  | ||||||
|     @Schema(description = "备注", example = "随便") |     @Schema(description = "备注", example = "随便") | ||||||
|     private String remark; |     private String remark; | ||||||
|  |     @Schema(description = "门店id") | ||||||
|  |     private Long carteenId; | ||||||
|     @Schema(description = "拒绝时间") |     @Schema(description = "拒绝时间") | ||||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||||
|     private LocalDateTime[] refuseTime; |     private LocalDateTime[] refuseTime; | ||||||
|  | |||||||
| @ -69,7 +69,8 @@ public class BillingRespVO { | |||||||
|     @Schema(description = "pdf地址", example = "https://www.iocoder.cn") |     @Schema(description = "pdf地址", example = "https://www.iocoder.cn") | ||||||
|     @ExcelProperty("pdf地址") |     @ExcelProperty("pdf地址") | ||||||
|     private String pdfUrl; |     private String pdfUrl; | ||||||
|  |     @Schema(description = "门店id") | ||||||
|  |     private Long carteenId; | ||||||
|     @Schema(description = "创建时间") |     @Schema(description = "创建时间") | ||||||
|     @ExcelProperty("创建时间") |     @ExcelProperty("创建时间") | ||||||
|     private LocalDateTime createTime; |     private LocalDateTime createTime; | ||||||
|  | |||||||
| @ -48,7 +48,8 @@ public class BillingSaveReqVO { | |||||||
|     @Schema(description = "0食堂发票,1超市发票,2太空舱发票", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") |     @Schema(description = "0食堂发票,1超市发票,2太空舱发票", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||||||
|     @NotNull(message = "0食堂发票,1超市发票,2太空舱发票不能为空") |     @NotNull(message = "0食堂发票,1超市发票,2太空舱发票不能为空") | ||||||
|     private Integer billingType; |     private Integer billingType; | ||||||
|  |     @Schema(description = "门店id") | ||||||
|  |     private Long carteenId; | ||||||
|     @Schema(description = "拒绝理由") |     @Schema(description = "拒绝理由") | ||||||
|     private String refuseDetails; |     private String refuseDetails; | ||||||
|  |  | ||||||
|  | |||||||
| @ -12,11 +12,17 @@ import cn.iocoder.yudao.module.member.service.billing.BillingService; | |||||||
| import io.swagger.v3.oas.annotations.Operation; | import io.swagger.v3.oas.annotations.Operation; | ||||||
| import io.swagger.v3.oas.annotations.Parameter; | import io.swagger.v3.oas.annotations.Parameter; | ||||||
| import io.swagger.v3.oas.annotations.tags.Tag; | import io.swagger.v3.oas.annotations.tags.Tag; | ||||||
|  | import org.springframework.format.annotation.DateTimeFormat; | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
| import javax.validation.Valid; | import javax.validation.Valid; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||||||
|  | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||||
|  |  | ||||||
|  |  | ||||||
| @Tag(name = "小程序 - 开票记录") | @Tag(name = "小程序 - 开票记录") | ||||||
| @ -31,7 +37,7 @@ public class AppBillingController { | |||||||
|     @PostMapping("/create") |     @PostMapping("/create") | ||||||
|     @Operation(summary = "创建开票记录") |     @Operation(summary = "创建开票记录") | ||||||
|     public CommonResult<String> createBilling(@Valid @RequestBody BillingSaveReqVO createReqVO) { |     public CommonResult<String> createBilling(@Valid @RequestBody BillingSaveReqVO createReqVO) { | ||||||
|         return success(billingService.createBillingUnit(createReqVO)); |         return success(billingService.createBilling(createReqVO)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @PutMapping("/update") |     @PutMapping("/update") | ||||||
| @ -58,13 +64,40 @@ public class AppBillingController { | |||||||
|     } |     } | ||||||
|     @GetMapping("/moeny") |     @GetMapping("/moeny") | ||||||
|     @Operation(summary = "获得开票金额与未开票金额") |     @Operation(summary = "获得开票金额与未开票金额") | ||||||
|     public CommonResult<BillingRespMoneyVO> getBillingPage(@RequestParam("userId")Long userId) { |     public CommonResult<BillingRespMoneyVO> getBillingPage(@RequestParam("userId")Long userId,@RequestParam("carteenId") Long carteenId) { | ||||||
|         return success(billingService.getHaveWithoutMoney(userId)); |         return success(billingService.getHaveWithoutMoney(userId,carteenId)); | ||||||
|     } |     } | ||||||
|     @GetMapping("/page") |     @GetMapping("/page") | ||||||
|     @Operation(summary = "获得开票记录分页") |     @Operation(summary = "获得开票记录分页") | ||||||
|     public CommonResult<PageResult<BillingRespVO>> getBillingPage(@Valid BillingPageReqVO pageReqVO) { |     public CommonResult<PageResult<BillingRespVO>> getBillingPage(@Valid BillingPageReqVO pageReqVO) { | ||||||
|  |         Long userId = pageReqVO.getUserId(); | ||||||
|  |         pageReqVO.setUserPhone(billingService.getMemberId(userId)); | ||||||
|  |         pageReqVO.setUserId(null); | ||||||
|         PageResult<BillingDO> pageResult = billingService.getBillingPage(pageReqVO); |         PageResult<BillingDO> pageResult = billingService.getBillingPage(pageReqVO); | ||||||
|         return success(BeanUtils.toBean(pageResult, BillingRespVO.class)); |         return success(BeanUtils.toBean(pageResult, BillingRespVO.class)); | ||||||
|     } |     } | ||||||
|  |     @GetMapping("/totalMoney") | ||||||
|  |     @Operation(summary = "获取月时间段的金额") | ||||||
|  |     public CommonResult<BigDecimal> getBillingPage(@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @RequestParam("time") Date time, | ||||||
|  |                                                    @RequestParam("billingType") Integer billingType, | ||||||
|  |                                                    @RequestParam("carteenId") Long carteenId, | ||||||
|  |                                                    @RequestParam("userId")Long userId) { | ||||||
|  |         BigDecimal totalMoney = billingService.getTotalMoney(time, billingType, carteenId,userId); | ||||||
|  |         return success(totalMoney); | ||||||
|  |     } | ||||||
|  |     @GetMapping("/data") | ||||||
|  |     @Operation(summary = "获取月时间段的订单详情") | ||||||
|  |     public CommonResult<Object> getData(@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @RequestParam("time") Date time, | ||||||
|  |                                         @RequestParam("billingType") Integer billingType, | ||||||
|  |                                         @RequestParam("carteenId") Long carteenId, | ||||||
|  |                                         @RequestParam("userId")Long userId) { | ||||||
|  |         Object data = billingService.getData(time, billingType, carteenId,userId); | ||||||
|  |         return success(data); | ||||||
|  |     } | ||||||
|  |     @GetMapping("/data") | ||||||
|  |     @Operation(summary = "获取月时间段的订单详情") | ||||||
|  |     public CommonResult<Map<Integer, Integer>> getBillingTypeTotal(@RequestParam("carteenId") Long carteenId,@RequestParam("userId") Long userId) { | ||||||
|  |         Map<Integer, Integer> billingTypeTotal = billingService.getBillingTypeTotal(carteenId, userId); | ||||||
|  |         return success(billingTypeTotal); | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -86,6 +86,10 @@ public class BillingDO extends BaseDO { | |||||||
|      * 发票商品名称 |      * 发票商品名称 | ||||||
|      */ |      */ | ||||||
|     private String billingName; |     private String billingName; | ||||||
|  |     /** | ||||||
|  |      * 门店id | ||||||
|  |      */ | ||||||
|  |     private Long carteenId; | ||||||
|     /** |     /** | ||||||
|      * userid 用json |      * userid 用json | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -50,4 +50,5 @@ public interface DishOrderMapper extends BaseMapperX<DishOrderDO> { | |||||||
|  |  | ||||||
|   BigDecimal getSaleMoney(@Param("storeId")Long storeId, @Param("time")String time); |   BigDecimal getSaleMoney(@Param("storeId")Long storeId, @Param("time")String time); | ||||||
|   Integer updateByIdBillingExist(@Param("ids")Set<Long> ids,@Param("exist")Boolean exist); |   Integer updateByIdBillingExist(@Param("ids")Set<Long> ids,@Param("exist")Boolean exist); | ||||||
|  |   Integer updateByIdBillingNum(@Param("ids")Set<Long> ids,@Param("num")String num); | ||||||
| } | } | ||||||
| @ -50,4 +50,5 @@ public interface OrderSpaceCapsuleMapper extends BaseMapperX<OrderSpaceCapsuleDO | |||||||
|     SpaceCapsuleOrderNameRespVO compDay1(@Param("status")Integer status, @Param("start") Date start, @Param("end") Date end,@Param("spId")Long spId); |     SpaceCapsuleOrderNameRespVO compDay1(@Param("status")Integer status, @Param("start") Date start, @Param("end") Date end,@Param("spId")Long spId); | ||||||
|     OrderSpaceCapsuleStatisticsComVo compMoney(@Param("start") Date start, @Param("end") Date end); |     OrderSpaceCapsuleStatisticsComVo compMoney(@Param("start") Date start, @Param("end") Date end); | ||||||
|     Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist); |     Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist); | ||||||
|  |     Integer updateByIdBillingNum (@Param("ids") Set<Long> ids, @Param("num")String num); | ||||||
| } | } | ||||||
| @ -41,4 +41,5 @@ public interface StoreOrderMapper extends BaseMapperX<StoreOrderDO> { | |||||||
|  |  | ||||||
|     List<StoreOrderPageVO> getStoreOrderPageNewList(@Param("vo") StoreOrderPageVO vo); |     List<StoreOrderPageVO> getStoreOrderPageNewList(@Param("vo") StoreOrderPageVO vo); | ||||||
|     Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist); |     Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist); | ||||||
|  |     Integer updateByIdBillingNum (@Param("ids") Set<Long> ids, @Param("num")String num); | ||||||
| } | } | ||||||
| @ -6,6 +6,9 @@ import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMon | |||||||
| import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO; | import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.billing.BillingDO; | import cn.iocoder.yudao.module.member.dal.dataobject.billing.BillingDO; | ||||||
| import javax.validation.*; | import javax.validation.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 开票记录 Service 接口 |  * 开票记录 Service 接口 | ||||||
| @ -58,6 +61,24 @@ public interface BillingService { | |||||||
|      * @return 开票记录分页 |      * @return 开票记录分页 | ||||||
|      */ |      */ | ||||||
|     PageResult<BillingDO> getBillingPage(BillingPageReqVO pageReqVO); |     PageResult<BillingDO> getBillingPage(BillingPageReqVO pageReqVO); | ||||||
|     BillingRespMoneyVO getHaveWithoutMoney(Long userId); |     BillingRespMoneyVO getHaveWithoutMoney(Long userId,Long carteenId); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取指定时间段的所有金额 | ||||||
|  |      * @param time | ||||||
|  |      * @param billingType | ||||||
|  |      * @param carteenId | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     BigDecimal getTotalMoney(Date time,Integer billingType,Long carteenId,Long userId); | ||||||
|  |     Object getData(Date time,Integer billingType,Long carteenId,Long userId); | ||||||
|  |     String getMemberId(Long userId); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开票完成数量,开票中数量,开票回拒数量 | ||||||
|  |      * @param carteenId | ||||||
|  |      * @param userId | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     Map<Integer, Integer>getBillingTypeTotal(Long carteenId, Long userId); | ||||||
| } | } | ||||||
| @ -1,9 +1,10 @@ | |||||||
| package cn.iocoder.yudao.module.member.service.billing; | package cn.iocoder.yudao.module.member.service.billing; | ||||||
|  |  | ||||||
| import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||||
| import cn.hutool.core.collection.ListUtil; | import cn.hutool.core.date.DateTime; | ||||||
|  | import cn.hutool.core.date.DateUtil; | ||||||
|  | import cn.hutool.core.map.MapUtil; | ||||||
| import cn.hutool.core.util.IdUtil; | import cn.hutool.core.util.IdUtil; | ||||||
| import cn.hutool.core.util.ObjUtil; |  | ||||||
| import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||||
| import cn.hutool.json.JSONArray; | import cn.hutool.json.JSONArray; | ||||||
| import cn.hutool.json.JSONUtil; | import cn.hutool.json.JSONUtil; | ||||||
| @ -12,7 +13,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||||||
| import cn.iocoder.yudao.module.member.api.card.CardApi; |  | ||||||
| import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageReqVO; | import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageReqVO; | ||||||
| import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO; | import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO; | ||||||
| import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO; | import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO; | ||||||
| @ -22,7 +22,6 @@ import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; | |||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; | import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; | import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; |  | ||||||
| import cn.iocoder.yudao.module.member.dal.mysql.billing.BillingMapper; | import cn.iocoder.yudao.module.member.dal.mysql.billing.BillingMapper; | ||||||
| import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper; | import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper; | ||||||
| import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; | import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; | ||||||
| @ -30,30 +29,17 @@ import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper; | |||||||
| import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; | import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; | ||||||
| import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper; | import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper; | ||||||
| import cn.iocoder.yudao.module.member.enums.*; | import cn.iocoder.yudao.module.member.enums.*; | ||||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; |  | ||||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; |  | ||||||
| import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; |  | ||||||
| import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper; |  | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
|  |  | ||||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||||
| import org.springframework.util.Assert; |  | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||||
|  |  | ||||||
|  |  | ||||||
| import java.lang.reflect.Method; | import java.lang.reflect.Method; | ||||||
| import java.math.BigDecimal; | import java.math.BigDecimal; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.util.Date; | import java.util.*; | ||||||
| import java.util.List; |  | ||||||
| import java.util.Objects; |  | ||||||
| import java.util.Set; |  | ||||||
| import java.util.function.Function; | import java.util.function.Function; | ||||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||||
| import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; | import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; | ||||||
|  |  | ||||||
| @ -69,8 +55,6 @@ public class BillingServiceImpl implements BillingService { | |||||||
|     @Resource |     @Resource | ||||||
|     private BillingMapper billingMapper; |     private BillingMapper billingMapper; | ||||||
|     @Resource |     @Resource | ||||||
|     private MemberUserService userService; |  | ||||||
|     @Resource |  | ||||||
|     private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper; |     private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper; | ||||||
|     @Resource |     @Resource | ||||||
|     private DishOrderMapper dishOrderMapper; |     private DishOrderMapper dishOrderMapper; | ||||||
| @ -80,20 +64,19 @@ public class BillingServiceImpl implements BillingService { | |||||||
|     private MemberGroupMapper memberGroupMapper; |     private MemberGroupMapper memberGroupMapper; | ||||||
|     @Resource |     @Resource | ||||||
|     private CardMapper cardMapper; |     private CardMapper cardMapper; | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 食堂 |      * 食堂 | ||||||
|      * @param startTime |      * @param startTime | ||||||
|      * @param endTime |      * @param endTime | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     public List<DishOrderDO> getDishOrderDO(Date startTime, Date endTime, Set<Long> ids){ |     public List<DishOrderDO> getDishOrderDO(Date startTime, Date endTime, List<Long> ids,Long carteenId){ | ||||||
|         return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>() |         return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>() | ||||||
|                 .betweenIfPresent(DishOrderDO::getCreateTime,startTime,endTime) |                 .betweenIfPresent(DishOrderDO::getCreateTime,startTime,endTime) | ||||||
|                 .eq(DishOrderDO::getOrderStatus,DishOrderDO.COMPLETE) |                 .eq(DishOrderDO::getOrderStatus,DishOrderDO.COMPLETE) | ||||||
|                 .ne(DishOrderDO::getBillingExist,Boolean.TRUE) |                 .ne(DishOrderDO::getBillingExist,Boolean.FALSE) | ||||||
|                 .in(ObjUtil.isNotEmpty(ids), DishOrderDO::getId,ids) |                 .eq(DishOrderDO::getStoreId,carteenId) | ||||||
|  |                 .in(DishOrderDO::getUserId,ids) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     /** |     /** | ||||||
| @ -102,12 +85,13 @@ public class BillingServiceImpl implements BillingService { | |||||||
|      * @param endTime |      * @param endTime | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     public List<StoreOrderDO> getStoreOrderDO(Date startTime, Date endTime, Set<Long> ids){ |     public List<StoreOrderDO> getStoreOrderDO(Date startTime, Date endTime, List<Long> ids,Long carteenId){ | ||||||
|         return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>() |         return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>() | ||||||
|                 .betweenIfPresent(StoreOrderDO::getCreateTime,startTime,endTime) |                 .betweenIfPresent(StoreOrderDO::getCreateTime,startTime,endTime) | ||||||
|                 .eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode()) |                 .eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode()) | ||||||
|                 .ne(StoreOrderDO::getBillingExist,Boolean.TRUE) |                 .ne(StoreOrderDO::getBillingExist,Boolean.FALSE) | ||||||
|                 .in(ObjUtil.isNotEmpty(ids), StoreOrderDO::getOrderId,ids) |                 .eq(StoreOrderDO::getCarteenId,carteenId) | ||||||
|  |                 .in(StoreOrderDO::getUserId,ids) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     /** |     /** | ||||||
| @ -116,12 +100,13 @@ public class BillingServiceImpl implements BillingService { | |||||||
|      * @param endTime |      * @param endTime | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     public List<OrderSpaceCapsuleDO> getOrderSpaceCapsuleDO(Date startTime, Date endTime, Set<Long> ids){ |     public List<OrderSpaceCapsuleDO> getOrderSpaceCapsuleDO(Date startTime, Date endTime, List<Long> ids,Long carteenId){ | ||||||
|         return  orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>() |         return  orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>() | ||||||
|                 .betweenIfPresent(OrderSpaceCapsuleDO::getCreateTime,startTime,endTime) |                 .betweenIfPresent(OrderSpaceCapsuleDO::getCreateTime,startTime,endTime) | ||||||
|                 .eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode()) |                 .eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode()) | ||||||
|                 .ne(OrderSpaceCapsuleDO::getBillingExist,Boolean.TRUE) |                 .ne(OrderSpaceCapsuleDO::getBillingExist,Boolean.FALSE) | ||||||
|                 .in(ObjUtil.isNotEmpty(ids), OrderSpaceCapsuleDO::getId,ids) |                 .eq(OrderSpaceCapsuleDO::getCarteenId,carteenId) | ||||||
|  |                 .in(OrderSpaceCapsuleDO::getUserId,ids) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     @Override |     @Override | ||||||
| @ -129,40 +114,47 @@ public class BillingServiceImpl implements BillingService { | |||||||
|     public String createBilling(BillingSaveReqVO createReqVO) { |     public String createBilling(BillingSaveReqVO createReqVO) { | ||||||
|         // 插入 BillingDO 对象并生成唯一主键 |         // 插入 BillingDO 对象并生成唯一主键 | ||||||
|         BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class); |         BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class); | ||||||
|  |         MemberGroupDO memberGroupDO = memberGroupDO(billing.getUserId()); | ||||||
|         billing.setId(IdUtil.getSnowflakeNextId() + ""); |         billing.setId(IdUtil.getSnowflakeNextId() + ""); | ||||||
|         // 获取用户信息 |         billing.setUserName(memberGroupDO.getName()); | ||||||
|         MemberUserDO user = userService.getUser(createReqVO.getUserId()); |         billing.setUserPhone(String.valueOf(memberGroupDO.getId())); | ||||||
|         billing.setUserName(user.getNickname()); |  | ||||||
|         billing.setUserPhone(user.getMobile()); |  | ||||||
|         // 根据不同的 billingType 获取订单、金额和订单 ID 列表,并设置开票信息 |         // 根据不同的 billingType 获取订单、金额和订单 ID 列表,并设置开票信息 | ||||||
|         List<Long> orderIds; |         List<Long> orderIds; | ||||||
|         BigDecimal totalMoney; |         BigDecimal totalMoney; | ||||||
|         String billingName; |         String billingName; | ||||||
|  |         //处理时间段 | ||||||
|  |         Date startTime = createReqVO.getStartTime(); | ||||||
|  |         DateTime start = DateUtil.beginOfMonth(startTime); | ||||||
|  |         DateTime end = DateUtil.endOfMonth(startTime); | ||||||
|  |         createReqVO.setStartTime(start); | ||||||
|  |         createReqVO.setEndTime(end); | ||||||
|  |         //获取当前单位下的所有人 | ||||||
|  |         List<Long> memberList = memberGroupMapper.getMemberList(memberGroupDO.getId()); | ||||||
|         switch (BillingEnum.fromCode(billing.getBillingType())) { |         switch (BillingEnum.fromCode(billing.getBillingType())) { | ||||||
|             case BILLING_CANTEEN: |             case BILLING_CANTEEN: | ||||||
|                 List<DishOrderDO> dishOrders = getDishOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId()); |                 List<DishOrderDO> dishOrders = getDishOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), memberList,billing.getCarteenId()); | ||||||
|                 if (CollUtil.isEmpty(dishOrders)) throw exception(BILLING_NOT_ORDER_EXISTS); |                 if (CollUtil.isEmpty(dishOrders)) throw exception(BILLING_NOT_ORDER_EXISTS); | ||||||
|                 totalMoney = calculateTotalMoney(dishOrders, DishOrderDO::getTotalMoney); |                 totalMoney = calculateTotalMoney(dishOrders, DishOrderDO::getTotalMoney); | ||||||
|                 orderIds = getOrderIds(dishOrders, DishOrderDO::getId); |                 orderIds = getOrderIds(dishOrders, DishOrderDO::getId); | ||||||
|                 billingName = "食堂餐饮费"; |                 billingName = "食堂餐饮费"; | ||||||
|                 updateBillingExist(dishOrders, dishOrderMapper); |                 updateBillingExist(dishOrders, dishOrderMapper,billing.getId()); | ||||||
|                 break; |                 break; | ||||||
|             case BILLING_SUPERMARKET: |             case BILLING_SUPERMARKET: | ||||||
|                 List<StoreOrderDO> storeOrders = getStoreOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId()); |                 List<StoreOrderDO> storeOrders = getStoreOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), memberList,billing.getCarteenId()); | ||||||
|                 if (CollUtil.isEmpty(storeOrders)) throw exception(BILLING_NOT_ORDER_EXISTS); |                 if (CollUtil.isEmpty(storeOrders)) throw exception(BILLING_NOT_ORDER_EXISTS); | ||||||
|                 totalMoney = calculateTotalMoney1(storeOrders, StoreOrderDO::getTotalPrice); |                 totalMoney = calculateTotalMoney1(storeOrders, StoreOrderDO::getTotalPrice); | ||||||
|                 List<Integer> orderIds1 = getOrderIds(storeOrders, StoreOrderDO::getOrderId); |                 List<Integer> orderIds1 = getOrderIds(storeOrders, StoreOrderDO::getOrderId); | ||||||
|                 orderIds = orderIds1.stream().map(Integer::longValue).collect(Collectors.toList()); |                 orderIds = orderIds1.stream().map(Integer::longValue).collect(Collectors.toList()); | ||||||
|                 billingName = "超市物品费"; |                 billingName = "超市物品费"; | ||||||
|                 updateBillingExist(storeOrders, storeOrderMapper); |                 updateBillingExist(storeOrders, storeOrderMapper,billing.getId()); | ||||||
|                 break; |                 break; | ||||||
|             case BILLING_SPACE_CAPSULE: |             case BILLING_SPACE_CAPSULE: | ||||||
|                 List<OrderSpaceCapsuleDO> capsuleOrders = getOrderSpaceCapsuleDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId()); |                 List<OrderSpaceCapsuleDO> capsuleOrders = getOrderSpaceCapsuleDO(createReqVO.getStartTime(), createReqVO.getEndTime(),memberList,billing.getCarteenId()); | ||||||
|                 if (CollUtil.isEmpty(capsuleOrders)) throw exception(BILLING_NOT_ORDER_EXISTS); |                 if (CollUtil.isEmpty(capsuleOrders)) throw exception(BILLING_NOT_ORDER_EXISTS); | ||||||
|                 totalMoney = calculateTotalMoney(capsuleOrders, OrderSpaceCapsuleDO::getMoney); |                 totalMoney = calculateTotalMoney(capsuleOrders, OrderSpaceCapsuleDO::getMoney); | ||||||
|                 orderIds = getOrderIds(capsuleOrders, OrderSpaceCapsuleDO::getId); |                 orderIds = getOrderIds(capsuleOrders, OrderSpaceCapsuleDO::getId); | ||||||
|                 billingName = "太空舱费用"; |                 billingName = "太空舱费用"; | ||||||
|                 updateBillingExist(capsuleOrders, orderSpaceCapsuleMapper); |                 updateBillingExist(capsuleOrders, orderSpaceCapsuleMapper,billing.getId()); | ||||||
|                 break; |                 break; | ||||||
|             default: |             default: | ||||||
|                 throw new IllegalArgumentException("Unsupported billing type"); |                 throw new IllegalArgumentException("Unsupported billing type"); | ||||||
| @ -183,14 +175,9 @@ public class BillingServiceImpl implements BillingService { | |||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     public String createBillingUnit(BillingSaveReqVO createReqVO) { |     public String createBillingUnit(BillingSaveReqVO createReqVO) { | ||||||
|         Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); |         Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); | ||||||
|         //校验是否为管理员 |  | ||||||
|         MemberGroupDO memberGroupDO = memberGroupMapper.selectOne(new LambdaQueryWrapperX<MemberGroupDO>() |  | ||||||
|                 .eq(MemberGroupDO::getUserId, loginUserId) |  | ||||||
|                 .last(" limit 1") |  | ||||||
|         ); |  | ||||||
|         if(ObjUtil.isEmpty(memberGroupDO)) throw exception(BILLING_NOT_ORDER_SECURITY); |  | ||||||
|         // 插入 BillingDO 对象并生成唯一主键 |         // 插入 BillingDO 对象并生成唯一主键 | ||||||
|         BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class); |         BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class); | ||||||
|  |         MemberGroupDO memberGroupDO = memberGroupDO(billing.getUserId()); | ||||||
|         billing.setId(IdUtil.getSnowflakeNextId() + ""); |         billing.setId(IdUtil.getSnowflakeNextId() + ""); | ||||||
|         billing.setUserName(memberGroupDO.getName()); |         billing.setUserName(memberGroupDO.getName()); | ||||||
|         billing.setUserPhone(String.valueOf(memberGroupDO.getId())); |         billing.setUserPhone(String.valueOf(memberGroupDO.getId())); | ||||||
| @ -238,7 +225,7 @@ public class BillingServiceImpl implements BillingService { | |||||||
|                 .collect(Collectors.toList()); |                 .collect(Collectors.toList()); | ||||||
|     } |     } | ||||||
|     // 更新订单为开票状态 |     // 更新订单为开票状态 | ||||||
|     private <T> void updateBillingExist(List<T> orders, BaseMapperX<T> mapper) { |     private <T> void updateBillingExist(List<T> orders, BaseMapperX<T> mapper,String billingId) { | ||||||
|         orders.forEach(order -> { |         orders.forEach(order -> { | ||||||
|             // Assuming that the order has a `setBillingExist` method |             // Assuming that the order has a `setBillingExist` method | ||||||
|             try { |             try { | ||||||
| @ -260,12 +247,32 @@ public class BillingServiceImpl implements BillingService { | |||||||
|         // 更新 |         // 更新 | ||||||
|         BillingDO updateObj = BeanUtils.toBean(updateReqVO, BillingDO.class); |         BillingDO updateObj = BeanUtils.toBean(updateReqVO, BillingDO.class); | ||||||
|         updateObj.setOrderId(billingDO.getOrderId()); |         updateObj.setOrderId(billingDO.getOrderId()); | ||||||
|  |         String orderId = updateObj.getOrderId(); | ||||||
|  |         JSONArray jsonArray = JSONUtil.parseArray(orderId); | ||||||
|  |         // 转换为 Set<Long> | ||||||
|  |         Set<Long> orderIds = jsonArray.stream() | ||||||
|  |                 .map(object -> Long.parseLong(object.toString())) // 将每个元素转换为 Long | ||||||
|  |                 .collect(Collectors.toSet()); | ||||||
|         //开票成功是根据pdf上传成功没 |         //开票成功是根据pdf上传成功没 | ||||||
|         if(StrUtil.isNotBlank(updateObj.getPdfUrl())){ |         if(StrUtil.isNotBlank(updateObj.getPdfUrl())){ | ||||||
|             //上传成功 修改状态 |             //上传成功 修改状态 | ||||||
|             updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode()); |             updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode()); | ||||||
|             //设置同意人 |             //设置同意人 | ||||||
|             updateObj.setSystemId(SecurityFrameworkUtils.getLoginUserId()); |             updateObj.setSystemId(SecurityFrameworkUtils.getLoginUserId()); | ||||||
|  |             //同意就把订单编号付上去 | ||||||
|  |             switch (BillingEnum.fromCode(updateObj.getBillingType())){ | ||||||
|  |                 case BILLING_CANTEEN: | ||||||
|  |                     dishOrderMapper.updateByIdBillingNum(orderIds,updateObj.getId()); | ||||||
|  |                     break; | ||||||
|  |                 case BILLING_SUPERMARKET: | ||||||
|  |                     storeOrderMapper.updateByIdBillingNum(orderIds,updateObj.getId()); | ||||||
|  |                     break; | ||||||
|  |                 case BILLING_SPACE_CAPSULE: | ||||||
|  |                     orderSpaceCapsuleMapper.updateByIdBillingNum(orderIds,updateObj.getId()); | ||||||
|  |                     break; | ||||||
|  |                 default: | ||||||
|  |                     throw new IllegalArgumentException("Unsupported billing type"); | ||||||
|  |             } | ||||||
|         }else{ |         }else{ | ||||||
|             //开票回拒 |             //开票回拒 | ||||||
|             if(StrUtil.isBlank(updateObj.getRefuseDetails())){ |             if(StrUtil.isBlank(updateObj.getRefuseDetails())){ | ||||||
| @ -273,16 +280,20 @@ public class BillingServiceImpl implements BillingService { | |||||||
|             } |             } | ||||||
|             updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode()); |             updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode()); | ||||||
|             updateObj.setRefuseTime(LocalDateTime.now()); |             updateObj.setRefuseTime(LocalDateTime.now()); | ||||||
|             String orderId = updateObj.getOrderId(); |             //拒绝就把锁住的订单释放掉 | ||||||
|             JSONArray jsonArray = JSONUtil.parseArray(orderId); |             switch (BillingEnum.fromCode(updateObj.getBillingType())){ | ||||||
|             // 转换为 Set<Long> |                 case BILLING_CANTEEN: | ||||||
|             Set<Long> orderIds = jsonArray.stream() |                     dishOrderMapper.updateByIdBillingExist(orderIds,Boolean.FALSE); | ||||||
|                     .map(object -> Long.parseLong(object.toString())) // 将每个元素转换为 Long |                     break; | ||||||
|                     .collect(Collectors.toSet()); |                 case BILLING_SUPERMARKET: | ||||||
|             LambdaUpdateChainWrapper<CardDO> wrapper = new LambdaUpdateChainWrapper<>(cardMapper); |                     storeOrderMapper.updateByIdBillingExist(orderIds,Boolean.FALSE); | ||||||
|             wrapper.in(CardDO::getId,orderIds); |                     break; | ||||||
|             wrapper.set(CardDO::getBillingExist,BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode()); |                 case BILLING_SPACE_CAPSULE: | ||||||
|             cardMapper.update(wrapper); |                     orderSpaceCapsuleMapper.updateByIdBillingExist(orderIds,Boolean.FALSE); | ||||||
|  |                     break; | ||||||
|  |                 default: | ||||||
|  |                     throw new IllegalArgumentException("Unsupported billing type"); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         billingMapper.updateById(updateObj); |         billingMapper.updateById(updateObj); | ||||||
|     } |     } | ||||||
| @ -311,25 +322,188 @@ public class BillingServiceImpl implements BillingService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public BillingRespMoneyVO getHaveWithoutMoney(Long userId) { |     public BillingRespMoneyVO getHaveWithoutMoney(Long userId,Long carteenId) { | ||||||
|         BillingRespMoneyVO b=new BillingRespMoneyVO(); |         List<Long> memberList = getMemberListByUserId(userId); | ||||||
|         //查询开票的订单 |         // 创建 BillingRespMoneyVO 对象 | ||||||
|         MemberGroupDO memberGroupDO = memberGroupMapper.selectOne(new LambdaQueryWrapperX<MemberGroupDO>() |         BillingRespMoneyVO response = new BillingRespMoneyVO(); | ||||||
|                 .eq(MemberGroupDO::getUserId, userId) |         // 查询已开票的金额 | ||||||
|                 .last(" limit 1") |         BigDecimal haveMoney = getTotalMoneyForBilling(userId, BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode()); | ||||||
|         ); |         response.setHaveMoney(haveMoney); | ||||||
|         BigDecimal reduce = billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>() |         // 查询未开票的金额 | ||||||
|                         .eq(BillingDO::getStatus, BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode()) |         BigDecimal withoutMoney = getTotalMoneyForOrders(memberList, carteenId); | ||||||
|                         .eq(BillingDO::getUserId,memberGroupDO.getId()) |         response.setWithoutMoney(withoutMoney); | ||||||
|                 ).stream() |         return response; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询已开票的金额 | ||||||
|  |      * @param userId 用户 ID | ||||||
|  |      * @param billingStatus 账单状态 | ||||||
|  |      * @return 已开票金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal getTotalMoneyForBilling(Long userId, Integer billingStatus) { | ||||||
|  |         return billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>() | ||||||
|  |                         .eq(BillingDO::getStatus, billingStatus) | ||||||
|  |                         .eq(BillingDO::getUserId, userId)) | ||||||
|  |                 .stream() | ||||||
|                 .map(BillingDO::getBillingMoney) |                 .map(BillingDO::getBillingMoney) | ||||||
|                 .reduce(BigDecimal.ZERO, BigDecimal::add); // 求和 |                 .reduce(BigDecimal.ZERO, BigDecimal::add); // 求和 | ||||||
|         //获取当前单位下的所有人 |     } | ||||||
|         List<Long> memberList = memberGroupMapper.getMemberList(memberGroupDO.getId()); |  | ||||||
|         //获取所有未开票的 |     /** | ||||||
|         BigDecimal moneyByUserIds = cardMapper.getTotalMoneyByuserIds(memberList, CardDO.ADD, CostTypeEnum.ADMIN_PAY.getCode()); |      * 查询未开票的金额(食堂、超市、太空舱) | ||||||
|         b.setWithoutMoney(moneyByUserIds); |      * @param memberList 成员 ID 列表 | ||||||
|         b.setHaveMoney(reduce); |      * @return 未开票金额 | ||||||
|         return b; |      */ | ||||||
|  |     private BigDecimal getTotalMoneyForOrders(List<Long> memberList,Long carteenId) { | ||||||
|  |         // 合并所有订单金额查询 | ||||||
|  |         BigDecimal totalSpaceCapsuleMoney = getTotalMoneyForOrderSpaceCapsules(memberList,carteenId); | ||||||
|  |         BigDecimal totalDishOrderMoney = getTotalMoneyForDishOrders(memberList,carteenId); | ||||||
|  |         BigDecimal totalStoreOrderMoney = getTotalMoneyForStoreOrders(memberList,carteenId); | ||||||
|  |  | ||||||
|  |         return totalSpaceCapsuleMoney.add(totalDishOrderMoney).add(totalStoreOrderMoney); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询未开票的太空舱订单金额 | ||||||
|  |      * @param memberList 成员 ID 列表 | ||||||
|  |      * @return 太空舱订单金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal getTotalMoneyForOrderSpaceCapsules(List<Long> memberList,Long carteenId) { | ||||||
|  |         return orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>() | ||||||
|  |                         .eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode()) | ||||||
|  |                         .isNull(OrderSpaceCapsuleDO::getBillingNum) | ||||||
|  |                         .eq(OrderSpaceCapsuleDO::getCarteenId,carteenId) | ||||||
|  |                         .in(OrderSpaceCapsuleDO::getUserId, memberList)) | ||||||
|  |                 .stream() | ||||||
|  |                 .map(OrderSpaceCapsuleDO::getMoney) | ||||||
|  |                 .reduce(BigDecimal.ZERO, BigDecimal::add); // 求和 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询未开票的食堂订单金额 | ||||||
|  |      * @param memberList 成员 ID 列表 | ||||||
|  |      * @return 食堂订单金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal getTotalMoneyForDishOrders(List<Long> memberList,Long carteenId) { | ||||||
|  |         return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>() | ||||||
|  |                         .eq(DishOrderDO::getOrderStatus, DishOrderDO.COMPLETE) | ||||||
|  |                         .isNull(DishOrderDO::getBillingNum) | ||||||
|  |                         .eq(DishOrderDO::getStoreId,carteenId) | ||||||
|  |                         .in(DishOrderDO::getUserId, memberList)) | ||||||
|  |                 .stream() | ||||||
|  |                 .map(DishOrderDO::getTotalMoney) | ||||||
|  |                 .reduce(BigDecimal.ZERO, BigDecimal::add); // 求和 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询未开票的超市订单金额 | ||||||
|  |      * @param memberList 成员 ID 列表 | ||||||
|  |      * @return 超市订单金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal getTotalMoneyForStoreOrders(List<Long> memberList,Long carteenId) { | ||||||
|  |         return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>() | ||||||
|  |                         .eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode()) | ||||||
|  |                         .eq(StoreOrderDO::getBillingExist, Boolean.FALSE) | ||||||
|  |                         .isNull(StoreOrderDO::getBillingNum) | ||||||
|  |                         .eq(StoreOrderDO::getCarteenId,carteenId) | ||||||
|  |                         .in(StoreOrderDO::getUserId, memberList)) | ||||||
|  |                 .stream() | ||||||
|  |                 .map(f -> BigDecimal.valueOf(f.getTotalPrice())) | ||||||
|  |                 .reduce(BigDecimal.ZERO, BigDecimal::add); // 求和 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public BigDecimal getTotalMoney(Date time, Integer billingType, Long carteenId, Long userId) { | ||||||
|  |         List<?> data =(List<?>) getData(time, billingType, carteenId, userId); | ||||||
|  |         // 根据账单类型计算总金额 | ||||||
|  |         return calculateTotalMoneyByBillingType(billingType, data); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Object getData(Date time, Integer billingType, Long carteenId, Long userId) { | ||||||
|  |         // 获取当前单位下的所有成员 | ||||||
|  |         List<Long> memberList = getMemberListByUserId(userId); | ||||||
|  |         // 获取订单并返回 | ||||||
|  |         List<?> orders = getOrders(time, billingType, memberList,carteenId); | ||||||
|  |         if (CollUtil.isEmpty(orders)) { | ||||||
|  |             throw exception(BILLING_NOT_ORDER_EXISTS); | ||||||
|  |         } | ||||||
|  |         return orders; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getMemberId(Long userId) { | ||||||
|  |         //校验是否为管理员 | ||||||
|  |         return memberGroupDO(userId).getId()+""; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Map<Integer, Integer> getBillingTypeTotal(Long carteenId, Long userId) { | ||||||
|  |         Map<Integer,Integer> map= MapUtil.newHashMap(); | ||||||
|  |         MemberGroupDO memberGroupDO = memberGroupDO(userId); | ||||||
|  |         Long id = memberGroupDO.getId(); | ||||||
|  |         List<BillingDO> billingDOS = billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>() | ||||||
|  |                 .eq(BillingDO::getUserPhone, id) | ||||||
|  |                 .eqIfPresent(BillingDO::getCarteenId,carteenId) | ||||||
|  |         ); | ||||||
|  |         Map<Integer, List<BillingDO>> collect = billingDOS.stream().collect(Collectors.groupingBy(BillingDO::getStatus)); | ||||||
|  |         for (Map.Entry<Integer, List<BillingDO>> entry : collect.entrySet()) { | ||||||
|  |             map.put(entry.getKey(),entry.getValue().size()); | ||||||
|  |         } | ||||||
|  |         return map; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取当前用户所属单位的所有成员列表 | ||||||
|  |      * @param userId 当前用户 ID | ||||||
|  |      * @return 当前单位的所有成员 ID 列表 | ||||||
|  |      */ | ||||||
|  |     private List<Long> getMemberListByUserId(Long userId) { | ||||||
|  |         // 获取当前单位下的所有成员 | ||||||
|  |         return memberGroupMapper.getMemberList(memberGroupDO(userId).getId()); | ||||||
|  |     } | ||||||
|  |     private  MemberGroupDO memberGroupDO(Long userId){ | ||||||
|  |         // 校验是否为管理员 | ||||||
|  |         MemberGroupDO memberGroupDO = memberGroupMapper.selectOne(new LambdaQueryWrapperX<MemberGroupDO>() | ||||||
|  |                 .eq(MemberGroupDO::getUserId, userId) | ||||||
|  |                 .last(" limit 1")); | ||||||
|  |         if (memberGroupDO == null) { | ||||||
|  |             throw exception(GROUP_NOT_EXISTS); | ||||||
|  |         } | ||||||
|  |         return memberGroupDO; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * 根据账单类型计算订单的总金额 | ||||||
|  |      * @param billingType 账单类型 | ||||||
|  |      * @param orders 订单列表 | ||||||
|  |      * @return 计算后的总金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal calculateTotalMoneyByBillingType(Integer billingType, List<?> orders) { | ||||||
|  |         switch (BillingEnum.fromCode(billingType)) { | ||||||
|  |             case BILLING_CANTEEN: | ||||||
|  |                 return calculateTotalMoney((List<DishOrderDO>) orders, DishOrderDO::getTotalMoney); | ||||||
|  |             case BILLING_SUPERMARKET: | ||||||
|  |                 return calculateTotalMoney1((List<StoreOrderDO>) orders, StoreOrderDO::getTotalPrice); | ||||||
|  |             case BILLING_SPACE_CAPSULE: | ||||||
|  |                 return calculateTotalMoney((List<OrderSpaceCapsuleDO>) orders, OrderSpaceCapsuleDO::getMoney); | ||||||
|  |             default: | ||||||
|  |                 throw new IllegalArgumentException("Unsupported billing type: " + billingType); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     private List<?> getOrders(Date time, Integer billingType,List<Long> ids,Long carteenId) { | ||||||
|  |         // 获取时间内的订单 | ||||||
|  |         DateTime start = DateUtil.beginOfMonth(time); | ||||||
|  |         DateTime end = DateUtil.endOfMonth(time); | ||||||
|  |         switch (BillingEnum.fromCode(billingType)) { | ||||||
|  |             case BILLING_CANTEEN: | ||||||
|  |                 return getDishOrderDO(start, end, ids,carteenId); | ||||||
|  |             case BILLING_SUPERMARKET: | ||||||
|  |                 return getStoreOrderDO(start, end, ids,carteenId); | ||||||
|  |             case BILLING_SPACE_CAPSULE: | ||||||
|  |                 return getOrderSpaceCapsuleDO(start, end, ids,carteenId); | ||||||
|  |             default: | ||||||
|  |                 throw new IllegalArgumentException("Unsupported billing type"); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -40,4 +40,11 @@ | |||||||
|             #{id} |             #{id} | ||||||
|         </foreach> |         </foreach> | ||||||
|     </update> |     </update> | ||||||
|  |     <update id="updateByIdBillingNum"> | ||||||
|  |         update member_dish_order SET billing_num = #{num} | ||||||
|  |         WHERE id IN | ||||||
|  |         <foreach collection="ids" item="id" open="(" separator="," close=")"> | ||||||
|  |             #{id} | ||||||
|  |         </foreach> | ||||||
|  |     </update> | ||||||
| </mapper> | </mapper> | ||||||
| @ -72,4 +72,12 @@ | |||||||
|             #{id} |             #{id} | ||||||
|         </foreach> |         </foreach> | ||||||
|     </update> |     </update> | ||||||
|  |  | ||||||
|  |     <update id="updateByIdBillingNum"> | ||||||
|  |         update t_order_space_capsule SET billing_num = #{num} | ||||||
|  |         WHERE id IN | ||||||
|  |         <foreach collection="ids" item="id" open="(" separator="," close=")"> | ||||||
|  |             #{id} | ||||||
|  |         </foreach> | ||||||
|  |     </update> | ||||||
| </mapper> | </mapper> | ||||||
| @ -71,4 +71,12 @@ | |||||||
|             #{id} |             #{id} | ||||||
|         </foreach> |         </foreach> | ||||||
|     </update> |     </update> | ||||||
|  |  | ||||||
|  |     <update id="updateByIdBillingNum"> | ||||||
|  |         update member_store_order SET billing_num = #{num} | ||||||
|  |         WHERE order_id IN | ||||||
|  |         <foreach collection="ids" item="id" open="(" separator="," close=")"> | ||||||
|  |             #{id} | ||||||
|  |         </foreach> | ||||||
|  |     </update> | ||||||
| </mapper> | </mapper> | ||||||
		Reference in New Issue
	
	Block a user
	 qjq
					qjq