From 9e710473223b9cb94d1da9d58499671bffc1863d Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期四, 19 九月 2024 15:13:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'remote-v2/master-v2' into master-v2 --- src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java | 10 ++ src/main/java/com/mzl/flower/web/payment/OrderController.java | 4 src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java | 2 src/main/java/com/mzl/flower/service/payment/OrderService.java | 51 ++++++++++++ src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java | 4 src/main/java/com/mzl/flower/dto/response/payment/OrderSettlementDetailDTO.java | 15 +++ src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml | 2 src/main/java/com/mzl/flower/web/customer/DeliveryCustomerController.java | 47 +++++++++++ src/main/resources/mapper/payment/OrderMapper.xml | 11 ++ src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java | 25 +++--- src/main/resources/mapper/payment/OrderSettlementDetailMapper.xml | 5 src/main/java/com/mzl/flower/web/supplier/DeliverySupplierController.java | 4 src/main/java/com/mzl/flower/dto/response/flower/FlowerSupplierListDTO.java | 3 src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java | 8 + 14 files changed, 168 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/mzl/flower/dto/response/flower/FlowerSupplierListDTO.java b/src/main/java/com/mzl/flower/dto/response/flower/FlowerSupplierListDTO.java index a433584..a635acd 100644 --- a/src/main/java/com/mzl/flower/dto/response/flower/FlowerSupplierListDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/flower/FlowerSupplierListDTO.java @@ -50,4 +50,7 @@ @ApiModelProperty(value = "价格排序") private Integer typeRank; + + // 限购数量 + private Integer limited;// } diff --git a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java index e878c48..b6abfbb 100644 --- a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java @@ -1,9 +1,11 @@ package com.mzl.flower.dto.response.payment; +import com.fasterxml.jackson.annotation.JsonFormat; import com.mzl.flower.base.AbstractTransDTO; import com.mzl.flower.base.annotation.DictTrans; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -78,4 +80,12 @@ @ApiModelProperty(value = "下单时间") private LocalDateTime orderTime; + + @ApiModelProperty(value = "收货日期") + @JsonFormat(pattern="yyyy-MM-dd" ,timezone="GMT+8") + @DateTimeFormat + private LocalDateTime receiveTime; + + @ApiModelProperty(value = "订单号") + private String orderNo; } diff --git a/src/main/java/com/mzl/flower/dto/response/payment/OrderSettlementDetailDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/OrderSettlementDetailDTO.java index 167c3ee..dc86c02 100644 --- a/src/main/java/com/mzl/flower/dto/response/payment/OrderSettlementDetailDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/payment/OrderSettlementDetailDTO.java @@ -1,11 +1,14 @@ package com.mzl.flower.dto.response.payment; +import com.fasterxml.jackson.annotation.JsonFormat; import com.mzl.flower.base.AbstractTransDTO; import com.mzl.flower.base.annotation.DictTrans; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; +import java.time.LocalDateTime; @Data public class OrderSettlementDetailDTO extends AbstractTransDTO { @@ -40,4 +43,16 @@ @ApiModelProperty(value = "售后理赔") private BigDecimal salesFee; + @ApiModelProperty(value = "收货日期") + @JsonFormat(pattern="yyyy-MM-dd" ,timezone="GMT+8") + @DateTimeFormat + private LocalDateTime receiveTime; + + @ApiModelProperty(value = "质检日期") + @JsonFormat(pattern="yyyy-MM-dd" ,timezone="GMT+8") + @DateTimeFormat + private LocalDateTime checkTime; + + @ApiModelProperty(value = "订单号") + private String orderNo; } diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java index 7c44d31..a893c08 100644 --- a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java +++ b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java @@ -49,4 +49,6 @@ ") t2 ON t1.create_by = t2.create_by AND t1.receive_time = t2.max_time " + "LEFT JOIN t_customer_info c ON t1.create_by = c.user_id ") List<Order> getOrderInfoByReceiveTime(); + + Integer getFlowerCompleteNumToday(@Param("userId") String userId,@Param("flowerId") Long flowerId); } diff --git a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java index 4b2afcc..f7466d1 100644 --- a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java @@ -611,7 +611,7 @@ return dto; } - public OrderItemCheckNumDTO getOtherCheck(String itemId, String type){ + public OrderItemCheckNumDTO getOtherCheck(String itemId, String type, boolean isSupplier){ OrderItemCheck c = orderItemCheckMapper.selectOne(new QueryWrapper<OrderItemCheck>() .eq("type", type) .eq("order_item_id", itemId) @@ -623,6 +623,12 @@ BeanUtils.copyProperties(c, dto); User user = userMapper.selectById(c.getCreateBy()); dto.setCreateName(user.getNickName()); + + if(Constants.CHECK_TYPE.lack.name().equals(c.getType()) && isSupplier){ + OrderItem oi = orderItemMapper.selectById(itemId); + BigDecimal lackFeeSupplier = oi.getSupplierPrice().multiply(new BigDecimal(c.getNum())); + dto.setDeductAmount(lackFeeSupplier); + } } return dto; diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java index 54dd68e..0efa99d 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java @@ -16,6 +16,7 @@ import com.mzl.flower.dto.request.payment.*; import com.mzl.flower.dto.response.flower.FlowerCartListDTO; import com.mzl.flower.dto.response.flower.FlowerCartListWrapDTO; +import com.mzl.flower.dto.response.flower.FlowerDTO; import com.mzl.flower.dto.response.flower.ParamItemDTO; import com.mzl.flower.dto.response.partner.PartnerOrderDTO; import com.mzl.flower.dto.response.payment.*; @@ -25,6 +26,7 @@ import com.mzl.flower.entity.coupon.CouponRecordDO; import com.mzl.flower.entity.customer.Address; import com.mzl.flower.entity.customer.Customer; +import com.mzl.flower.entity.flower.Flower; import com.mzl.flower.entity.flower.FlowerSupplierSaleNum; import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.partner.Partner; @@ -158,6 +160,7 @@ @Autowired private CouponRecordService couponRecordService; + public void changeFlower2Cart(CartSaveDTO dto) { String userId = SecurityUtils.getUserId(); String key = userId + "_" + dto.getId(); @@ -180,7 +183,23 @@ cartMapper.insert(c); } else { + // 查看是否已经超过当前商品的限购数量 + final FlowerDTO flowerDetail = flowerService.getFlowerDetail(c.getFlowerId()); c.setNum((c.getNum()==null?0:c.getNum()) + dto.getNum()); + + // 限购 1.首先查看购物车中的数量是否已经超过限售数量 + if(null!=c.getNum() && null!=flowerDetail.getLimited() + && c.getNum().compareTo(flowerDetail.getLimited())>0){ + throw new ValidationException("数量不能超过限售数量!"); + } + + // 限购 2.查看已结单的订单的当前花朵已经购买的数量,加当前购物车的加入的数量是否超过限购的数量,查看当前5点前到昨天五点前 + Integer completeNumToday=getFlowerCompleteNumToday(userId,c.getFlowerId()); + Integer tmp=completeNumToday+c.getNum(); + if(tmp.compareTo(flowerDetail.getLimited())>0){ + throw new ValidationException("当天的订单的花数量加上购物车的数量不能超过限售数量!"); + } + c.update(userId); if (c.getNum() <= 0) { cartMapper.deleteById(c.getId()); @@ -298,6 +317,8 @@ } public PreOrderDTO getPreOrderInfo(List<CartSaveDTO> flowers, Map<Long, PriceDTO> priceMap) { + String userId = SecurityUtils.getUserId(); + if (flowers == null || flowers.size() == 0) { throw new ValidationException("请选择商品"); } @@ -313,6 +334,18 @@ } idNumMap.put(id, num); } + + // 限购数量校验 鲜花数量校验 + flowers.forEach(cartSaveDTO -> { + // 限购数量 鲜花数量校验 + Integer completeNumToday=getFlowerCompleteNumToday(userId,cartSaveDTO.getId()); + Integer tmp=completeNumToday+cartSaveDTO.getNum(); + Flower flower=flowerMapper.selectById(cartSaveDTO.getId()); + if(tmp.compareTo(flower.getLimited())>0){ + throw new ValidationException("商品:'"+flower.getName()+"' 昨天17:00到今天17:00 超过限售数量:"+flower.getLimited()+"!"); + } + }); + PreOrderDTO result = new PreOrderDTO(); List<FlowerCartListDTO> ls = flowerMapper.selectFlowerOrderList(ids); @@ -395,6 +428,16 @@ } public Map commitOrder(OrderCommitDTO dto, PreOrderDTO p, Map<Long, PriceDTO> priceMap) { + String userId = SecurityUtils.getUserId(); + p.getFlowers().forEach(flower -> { + // 限购数量 鲜花数量校验 + Integer completeNumToday=getFlowerCompleteNumToday(userId,flower.getId()); + Integer tmp=completeNumToday+flower.getNum(); + if(tmp.compareTo(flower.getLimited())>0){ + throw new ValidationException("商品:'"+flower.getName()+"' 昨天17:00到今天17:00 超过限售数量:"+flower.getLimited()+"!"); + } + }); + WxMaJscode2SessionResult session = null; try { session = weChatService.getWxMaSessionInfo(dto.getWxcode()); @@ -417,7 +460,7 @@ deliveryName = d.getName(); } - String userId = SecurityUtils.getUserId(); + Order order = new Order(); order.setId(UUIDGenerator.getUUID()); @@ -485,6 +528,7 @@ BigDecimal usedCouponAmount = new BigDecimal(0); for (int i = 0; i < flowers.size(); i++) { FlowerCartListDTO f = flowers.get(i); + OrderItem t = new OrderItem(); t.setId(UUIDGenerator.getUUID()); t.setOrderId(order.getId()); @@ -1501,4 +1545,9 @@ Order o = orderMapper.getUserLastOrder(userId); return o.getReceiveTime(); } + + public Integer getFlowerCompleteNumToday(String userId,Long flowerId){ + Integer completeNum= orderMapper.getFlowerCompleteNumToday(userId,flowerId); + return completeNum; + } } diff --git a/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java b/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java index 02cb428..7fe5f0c 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java @@ -130,19 +130,21 @@ } String type = settlement.getType(); + String name = ""; + if(Constants.SETTLEMENT_TYPE.supplier.name().equals(type)){ + Supplier s = supplierMapper.selectOne(new QueryWrapper<Supplier>() + .eq("user_id", settlement.getUserId())); + name = "供应商" + s.getName(); + } else { + Partner p = partnerMapper.selectOne(new QueryWrapper<Partner>() + .eq("user_id", settlement.getUserId())); + name = "合伙人" + p.getName(); + } + UserWechat wechat = wechatMapper.selectOne(new QueryWrapper<UserWechat>() .eq("user_id", settlement.getUserId())); if(wechat == null){ - String msg; - if(Constants.SETTLEMENT_TYPE.supplier.name().equals(type)){ - Supplier s = supplierMapper.selectOne(new QueryWrapper<Supplier>() - .eq("user_id", settlement.getUserId())); - msg = "供应商" + s.getName() + "未绑定账号无法结算"; - } else { - Partner p = partnerMapper.selectOne(new QueryWrapper<Partner>() - .eq("user_id", settlement.getUserId())); - msg = "合伙人" + p.getName() + "未绑定账号无法结算"; - } + String msg = name + "未绑定账号无法结算"; log.error(msg); throw new ValidationException(msg); } @@ -151,8 +153,7 @@ LocalDateTime now = LocalDateTime.now(); String day = format(now, "yyyy-MM-dd"); - String remarks = Constants.SETTLEMENT_TYPE.supplier.name().equals(type) - ? "供应商账单结算" : "合伙人账单结算"; + String remarks = name + "账单结算"; String appId = Constants.SETTLEMENT_TYPE.supplier.name().equals(type) ? PyamentV3Configurer.supplier_app_id : PyamentV3Configurer.partner_app_id; diff --git a/src/main/java/com/mzl/flower/web/customer/DeliveryCustomerController.java b/src/main/java/com/mzl/flower/web/customer/DeliveryCustomerController.java new file mode 100644 index 0000000..cd843dd --- /dev/null +++ b/src/main/java/com/mzl/flower/web/customer/DeliveryCustomerController.java @@ -0,0 +1,47 @@ +package com.mzl.flower.web.customer; + +import com.mzl.flower.base.BaseController; +import com.mzl.flower.base.R; +import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.constant.Constants; +import com.mzl.flower.dto.response.payment.*; +import com.mzl.flower.service.payment.DeliveryOrderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/customer/delivery") +@Api(value = "配送管理-花店", tags = "配送管理-花店") +@Validated +@Slf4j +public class DeliveryCustomerController extends BaseController { + + @Autowired + private DeliveryOrderService deliveryOrderService; + + @GetMapping("/mine/list/check/info/reduce") + @ApiOperation(value = "降级操作详情") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderItemId", value = "订单商品id", required = true, dataType = "String", paramType = "query") + }) + public ResponseEntity<ReturnDataDTO<OrderItemCheckReduceDTO>> getReduceCheck(String orderItemId){ + return returnData(R.SUCCESS.getCode(), deliveryOrderService.getReduceCheck(orderItemId)); + } + + @GetMapping("/mine/list/check/info/lack") + @ApiOperation(value = "缺货操作详情") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderItemId", value = "订单商品id", required = true, dataType = "String", paramType = "query") + }) + public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getLackCheck(String orderItemId){ + return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId + , Constants.CHECK_TYPE.lack.name(), false)); + } +} diff --git a/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java b/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java index 50c0a55..a2bf006 100644 --- a/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java +++ b/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java @@ -271,14 +271,14 @@ @ApiOperation(value = "补货操作详情") public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getReplaceCheck(String orderItemId){ return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId - , Constants.CHECK_TYPE.replace.name())); + , Constants.CHECK_TYPE.replace.name(), false)); } @GetMapping("/check/info/lack") @ApiOperation(value = "缺货操作详情") public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getLackCheck(String orderItemId){ return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId - , Constants.CHECK_TYPE.lack.name())); + , Constants.CHECK_TYPE.lack.name(), false)); } @PostMapping("/check/info/do/reduce") diff --git a/src/main/java/com/mzl/flower/web/payment/OrderController.java b/src/main/java/com/mzl/flower/web/payment/OrderController.java index 0600857..915eb23 100644 --- a/src/main/java/com/mzl/flower/web/payment/OrderController.java +++ b/src/main/java/com/mzl/flower/web/payment/OrderController.java @@ -109,7 +109,7 @@ }) public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getReplaceCheck(String orderItemId){ return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId - , Constants.CHECK_TYPE.replace.name())); + , Constants.CHECK_TYPE.replace.name(), false)); } @GetMapping("/list/check/info/lack") @@ -119,7 +119,7 @@ }) public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getLackCheck(String orderItemId){ return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId - , Constants.CHECK_TYPE.lack.name())); + , Constants.CHECK_TYPE.lack.name(), false)); } @GetMapping("/list/check/info/agree") diff --git a/src/main/java/com/mzl/flower/web/supplier/DeliverySupplierController.java b/src/main/java/com/mzl/flower/web/supplier/DeliverySupplierController.java index 53549bb..8aca450 100644 --- a/src/main/java/com/mzl/flower/web/supplier/DeliverySupplierController.java +++ b/src/main/java/com/mzl/flower/web/supplier/DeliverySupplierController.java @@ -160,7 +160,7 @@ }) public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getReplaceCheck(String orderItemId){ return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId - , Constants.CHECK_TYPE.replace.name())); + , Constants.CHECK_TYPE.replace.name(), true)); } @GetMapping("/mine/list/check/info/lack") @@ -170,6 +170,6 @@ }) public ResponseEntity<ReturnDataDTO<OrderItemCheckNumDTO>> getLackCheck(String orderItemId){ return returnData(R.SUCCESS.getCode(), deliveryOrderService.getOtherCheck(orderItemId - , Constants.CHECK_TYPE.lack.name())); + , Constants.CHECK_TYPE.lack.name(), true)); } } diff --git a/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml b/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml index 024312f..0de6831 100644 --- a/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml +++ b/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml @@ -45,7 +45,7 @@ SELECT ois.order_item_id, oi.flower_name, oi.flower_level, oi.num, oi.supplier_price price , s.`status` , ois.check_num, ois.check_fee, ois.replace_num, ois.replace_fee, ois.lack_num, ois.lack_fee_supplier lackFee , ois.station_fee, ois.sales_fee_supplier salesFee, ois.service_fee_rate, ois.service_fee - , ois.income_supplier income, o.status_backend, o.create_time orderTime + , ois.income_supplier income, o.status_backend, o.create_time orderTime, o.receive_time, o.order_no , (select count(1) from t_order_item_sales sa where sa.order_item_id = oi.id) salesNum FROM t_delivery_order_item doi join t_delivery_order q on q.id = doi.delivery_id diff --git a/src/main/resources/mapper/payment/OrderMapper.xml b/src/main/resources/mapper/payment/OrderMapper.xml index 8bcdc82..6639b8c 100644 --- a/src/main/resources/mapper/payment/OrderMapper.xml +++ b/src/main/resources/mapper/payment/OrderMapper.xml @@ -260,4 +260,15 @@ join t_order_point_goods opg on opg.goods_record_id = gr.id where opg.order_id = #{orderId} </select> + <select id="getFlowerCompleteNumToday" resultType="java.lang.Integer"> + select IFNULL(sum(oi.num),0) as complete_num + from t_order o + left join t_order_item oi + on o.id=oi.order_id + where o.DELETEd=0 and oi.DELETEd=0 + and o.status_backend not in ('PENDING','CANCEL','REFUND') + and o.create_by=#{userId} + AND oi.flower_id=#{flowerId} + AND o.complete_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) + INTERVAL 17 HOUR AND CURDATE() + INTERVAL 17 HOUR + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/payment/OrderSettlementDetailMapper.xml b/src/main/resources/mapper/payment/OrderSettlementDetailMapper.xml index 987c63d..4521617 100644 --- a/src/main/resources/mapper/payment/OrderSettlementDetailMapper.xml +++ b/src/main/resources/mapper/payment/OrderSettlementDetailMapper.xml @@ -3,12 +3,13 @@ <mapper namespace="com.mzl.flower.mapper.payment.OrderSettlementDetailMapper"> <select id="selectSettlementDetailList" resultType="com.mzl.flower.dto.response.payment.OrderSettlementDetailDTO"> - SELECT s.*, oi.flower_name, oi.flower_level + SELECT s.*, oi.flower_name, oi.flower_level, o.receive_time, oi.check_time, o.order_no FROM t_order_settlement_detail s join t_order_item oi on oi.id = s.order_item_id + join t_order o on o.id = s.order_id WHERE s.deleted = 0 AND s.settlement_id = #{settlementId} - ORDER BY s.create_time desc + ORDER BY o.receive_time desc, o.id, oi.flower_name </select> </mapper> \ No newline at end of file -- Gitblit v1.9.3