From cb00f25c0018bde50529f1289b8e6d824ff66058 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 26 May 2022 10:15:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=88=E5=82=85=E6=B4=BE=E5=8D=95=E7=BB=99?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=B8=88=E5=82=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/order/OrderController.java | 80 +++++++++++++++++++ .../com/ghy/order/domain/OrderDetail.java | 5 +- .../com/ghy/order/domain/OrderMaster.java | 2 +- .../order/request/AppOrderAssignRequest.java | 24 ++++++ .../ghy/order/service/OrderDetailService.java | 6 ++ .../service/impl/OrderDetailServiceImpl.java | 21 +++++ .../ghy/payment/domain/FinancialDetail.java | 22 ++++- .../payment/mapper/FinancialMasterMapper.java | 7 ++ .../service/FinancialMasterService.java | 7 ++ .../impl/FinancialMasterServiceImpl.java | 5 ++ .../financial/FinancialMasterMapper.xml | 11 ++- .../com/ghy/worker/mapper/WorkerMapper.java | 6 ++ .../ghy/worker/mapper/WorkerTeamMapper.java | 26 ++++++ .../com/ghy/worker/service/WorkerService.java | 14 ++++ .../service/impl/WorkerServiceImpl.java | 24 +++++- .../resources/mapper/worker/WorkerMapper.xml | 4 + .../mapper/worker/WorkerTeamMapper.xml | 57 +++++++++++++ 17 files changed, 309 insertions(+), 12 deletions(-) create mode 100644 ghy-order/src/main/java/com/ghy/order/request/AppOrderAssignRequest.java create mode 100644 ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerTeamMapper.java create mode 100644 ghy-worker/src/main/resources/mapper/worker/WorkerTeamMapper.xml diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java index e51d87d7..78fd0a97 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java @@ -8,8 +8,10 @@ import com.ghy.customer.service.CustomerService; import com.ghy.goods.domain.Goods; import com.ghy.goods.request.AppGoodsRequest; import com.ghy.goods.service.GoodsService; +import com.ghy.order.domain.OrderDetail; import com.ghy.order.domain.OrderGoods; import com.ghy.order.domain.OrderMaster; +import com.ghy.order.request.AppOrderAssignRequest; import com.ghy.order.request.AppOrderRequest; import com.ghy.order.service.OrderDetailService; import com.ghy.order.service.OrderGoodsService; @@ -18,8 +20,11 @@ import com.ghy.payment.domain.FinancialDetail; import com.ghy.payment.domain.FinancialMaster; import com.ghy.payment.service.FinancialDetailService; import com.ghy.payment.service.FinancialMasterService; +import com.ghy.worker.domain.Worker; +import com.ghy.worker.service.WorkerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -48,6 +53,9 @@ public class OrderController extends BaseController { @Autowired private GoodsService goodsService; + @Autowired + private WorkerService workerService; + @Autowired private OrderMasterService orderMasterService; @@ -63,9 +71,81 @@ public class OrderController extends BaseController { @Autowired private FinancialDetailService financialDetailService; + @PostMapping("/assign") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public AjaxResult assign(@RequestBody AppOrderAssignRequest request) { + OrderMaster om = orderMasterService.selectById(request.getOrderMasterId()); + Assert.notNull(om, "订单不存在"); + FinancialMaster fm = financialMasterService.selectByOrderMasterId(om.getId()); + Assert.notNull(fm, "找不到对应的订单"); + // 派单师傅 + Worker assignWorker = workerService.selectById(om.getWorkerId()); + Assert.notNull(assignWorker, "找不到师傅信息"); + // 接单师傅 + Worker acceptWorker = workerService.selectById(request.getWorkerId()); + Assert.notNull(acceptWorker, "查询接单师傅信息失败"); + // 校验接单师傅和派单师傅是不是同一个Team + boolean checkInTeam = workerService.checkInTeam(assignWorker.getWorkerId(), acceptWorker.getWorkerId()); + Assert.isTrue(checkInTeam, "找不到接单师傅信息"); + + // 创建子订单 + OrderDetail od = new OrderDetail(); + od.setDeptId(om.getDeptId()); + od.setCode(orderDetailService.createCode()); + od.setOrderMasterId(om.getId()); + od.setOrderMasterCode(om.getCode()); + od.setCustomerId(om.getCustomerId()); + od.setOrderType(om.getOrderType()); + od.setOrderStatus(om.getOrderStatus()); + od.setWorkerId(request.getWorkerId()); + od.setRevTime(new Date()); + orderDetailService.insertOrderDetail(od); + + String leaderTeamMoney = assignWorker.getLeaderTeamMoney(); + String leaderTeamRate = assignWorker.getLeaderTeamRate(); + // 派单师傅的钱 + BigDecimal assignWorkerMoney; + // 接单师傅的钱 + BigDecimal acceptWorkerMoney; + if (StringUtils.isNotBlank(leaderTeamMoney)) { + assignWorkerMoney = new BigDecimal(leaderTeamMoney); + } else if (StringUtils.isNotBlank(leaderTeamRate)) { + BigDecimal rate = new BigDecimal(leaderTeamRate); + assignWorkerMoney = rate.multiply(fm.getPayMoney()); + } else { + assignWorkerMoney = BigDecimal.ZERO; + } + + // 如果派单师傅的抽成金额>0 则为派单师傅生成子财务单 + if (BigDecimal.ZERO.compareTo(assignWorkerMoney) < 0) { + FinancialDetail fd = new FinancialDetail(fm.getDeptId(), financialDetailService.createCode(), fm.getId(), + fm.getCode(), od.getId(), od.getCode(), assignWorkerMoney, 1, assignWorker.getWorkerId(), + fm.getPayType(), fm.getPayStatus(), fm.getPayTime()); + financialDetailService.insertFinancialDetail(fd); + } + + // 减掉派单师傅的抽成 + acceptWorkerMoney = fm.getPayMoney().subtract(assignWorkerMoney); + List fds = financialDetailService.selectFinancialDetailList(new FinancialDetail(fm.getId())); + // 减掉所有的平台和分销抽成 + for (FinancialDetail fd : fds) { + acceptWorkerMoney = acceptWorkerMoney.subtract(fd.getPayMoney()); + } + Assert.isTrue(BigDecimal.ZERO.compareTo(acceptWorkerMoney) < 0, "订单计算出错 请联系管理员"); + + //为接单师傅生成子财务单 + FinancialDetail fd = new FinancialDetail(fm.getDeptId(), financialDetailService.createCode(), fm.getId(), + fm.getCode(), od.getId(), od.getCode(), acceptWorkerMoney, 1, acceptWorker.getWorkerId(), + fm.getPayType(), fm.getPayStatus(), fm.getPayTime()); + financialDetailService.insertFinancialDetail(fd); + + return AjaxResult.success(); + } @PostMapping("/server/app") @ResponseBody + @Transactional(rollbackFor = Exception.class) public AjaxResult appOrder(@RequestBody AppOrderRequest appOrderRequest) { // 校验用户信息 Customer customer = customerService.selectByCustomerId(appOrderRequest.getCustomerId()); diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java index e28b3c53..2aeb3262 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java @@ -18,6 +18,9 @@ public class OrderDetail extends BaseEntity { @Excel(name = "序号", cellType = Excel.ColumnType.NUMERIC) private Long id; + @Excel(name = "商户ID", cellType = Excel.ColumnType.NUMERIC) + private Long deptId; + @Excel(name = "订单编码", cellType = Excel.ColumnType.STRING) private String code; @@ -37,7 +40,7 @@ public class OrderDetail extends BaseEntity { private Integer orderStatus; @Excel(name = "接单师傅id", cellType = Excel.ColumnType.NUMERIC) - private Integer workerId; + private Long workerId; @Excel(name = "接单时间", cellType = Excel.ColumnType.STRING) private Date revTime; diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java index 87637359..764172ca 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java @@ -40,7 +40,7 @@ public class OrderMaster extends BaseEntity { private Integer payStatus; @Excel(name = "接单师傅id", cellType = Excel.ColumnType.NUMERIC) - private Integer workerId; + private Long workerId; @Excel(name = "付款时间", cellType = Excel.ColumnType.STRING) private Date payTime; diff --git a/ghy-order/src/main/java/com/ghy/order/request/AppOrderAssignRequest.java b/ghy-order/src/main/java/com/ghy/order/request/AppOrderAssignRequest.java new file mode 100644 index 00000000..e394d5d0 --- /dev/null +++ b/ghy-order/src/main/java/com/ghy/order/request/AppOrderAssignRequest.java @@ -0,0 +1,24 @@ +package com.ghy.order.request; + +import com.ghy.goods.request.AppGoodsRequest; +import lombok.Data; + +import java.util.List; + +/** + * 订单分配接口请求参数 + * + * @author HH 2022/5/25 + */ +@Data +public class AppOrderAssignRequest { + + // 主订单ID + private Long orderMasterId; + + // 接受分配的师傅ID + private Long workerId; + + // 分配的商品及数量 + private List goodsList; +} diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java index 429d6854..a4002bf0 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java @@ -49,4 +49,10 @@ public interface OrderDetailService { * @return 校验结果 1存在 0不存在 */ String checkOrderDetailCodeUnique(OrderDetail orderDetail); + + /** + * 创建code + */ + String createCode(); + } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index d336115b..72bc83fc 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -8,11 +8,25 @@ import com.ghy.order.service.OrderDetailService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + +import static java.time.temporal.ChronoField.*; +import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; @Service public class OrderDetailServiceImpl implements OrderDetailService { + private static final AtomicLong INDEX = new AtomicLong(1L); + + public static final DateTimeFormatter MINI_FORMATTER = new DateTimeFormatterBuilder() + .appendValue(YEAR, 4).appendValue(MONTH_OF_YEAR, 2) + .appendValue(DAY_OF_MONTH, 2).appendValue(HOUR_OF_DAY, 2) + .appendValue(MINUTE_OF_HOUR, 2).appendValue(SECOND_OF_MINUTE, 2).toFormatter(); + @Resource private OrderDetailMapper orderDetailMapper; @@ -51,4 +65,11 @@ public class OrderDetailServiceImpl implements OrderDetailService { } return UserConstants.ORDER_CODE_UNIQUE; } + + @Override + public String createCode() { + INDEX.compareAndSet(9999L, 1L); + LocalDateTime now = LocalDateTime.now(); + return "od" + now.format(MINI_FORMATTER) + INDEX.getAndIncrement(); + } } diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java index 0a5de37c..1a0082c1 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java +++ b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java @@ -5,6 +5,7 @@ import com.ghy.common.core.domain.BaseEntity; import lombok.Data; import java.math.BigDecimal; +import java.util.Date; /** * @author clunt @@ -64,11 +65,15 @@ public class FinancialDetail extends BaseEntity { private Integer payStatus; @Excel(name = "付款时间", cellType = Excel.ColumnType.STRING) - private String payTime; + private Date payTime; public FinancialDetail() { } + public FinancialDetail(Long financialMasterId) { + this.financialMasterId = financialMasterId; + } + public FinancialDetail(String code, Long deptId, Long financialMasterId, String financialMasterCode, BigDecimal payMoney, Integer financialDetailType, Long payeeId) { this.deptId = deptId; this.code = code; @@ -78,4 +83,19 @@ public class FinancialDetail extends BaseEntity { this.financialDetailType = financialDetailType; this.payeeId = payeeId; } + + public FinancialDetail(Long deptId, String code, Long financialMasterId, String financialMasterCode, Long orderDetailId, String orderDetailCode, BigDecimal payMoney, Integer financialDetailType, Long payeeId, Integer payType, Integer payStatus, Date payTime) { + this.deptId = deptId; + this.code = code; + this.financialMasterId = financialMasterId; + this.financialMasterCode = financialMasterCode; + this.orderDetailId = orderDetailId; + this.orderDetailCode = orderDetailCode; + this.payMoney = payMoney; + this.financialDetailType = financialDetailType; + this.payeeId = payeeId; + this.payType = payType; + this.payStatus = payStatus; + this.payTime = payTime; + } } diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java index 0fcecca7..5718f61a 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java +++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java @@ -50,4 +50,11 @@ public interface FinancialMasterMapper { * @param payType 支付渠道 */ void paySucceeded(String orderNo, int payType); + + /** + * 用主订单ID查询主财务单 + * + * @param orderMasterId 主订单ID + */ + FinancialMaster selectByOrderMasterId(Long orderMasterId); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java index 8fb9690b..1d4e3d2a 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java @@ -54,4 +54,11 @@ public interface FinancialMasterService { * 创建主财务单CODE */ String createCode(); + + /** + * 用主订单ID查询主财务单 + * + * @param orderMasterId 主订单ID + */ + FinancialMaster selectByOrderMasterId(Long orderMasterId); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java index 6f03b786..7765a612 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java @@ -90,4 +90,9 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { return "fm" + now.format(MINI_FORMATTER) + INDEX.getAndIncrement(); } + @Override + public FinancialMaster selectByOrderMasterId(Long orderMasterId) { + return financialMasterMapper.selectByOrderMasterId(orderMasterId); + } + } diff --git a/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml b/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml index 4adf10f9..75212e1d 100644 --- a/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml +++ b/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml @@ -48,12 +48,11 @@ + + diff --git a/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerMapper.java b/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerMapper.java index 2a343694..e67dbc84 100644 --- a/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerMapper.java +++ b/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerMapper.java @@ -24,4 +24,10 @@ public interface WorkerMapper { */ int updateWorker(Worker worker); + /** + * 用师傅ID查询 + * + * @param workerId 师傅ID + */ + Worker selectById(Long workerId); } diff --git a/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerTeamMapper.java b/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerTeamMapper.java new file mode 100644 index 00000000..717d67b4 --- /dev/null +++ b/ghy-worker/src/main/java/com/ghy/worker/mapper/WorkerTeamMapper.java @@ -0,0 +1,26 @@ +package com.ghy.worker.mapper; + +import com.ghy.worker.domain.WorkerTeam; + +import java.util.List; + +public interface WorkerTeamMapper { + + /** + * @param workerTeam 师傅团队 + * @return 师傅团队集合 + */ + List getWorkerTeamList(WorkerTeam workerTeam); + + /** + * @param workerTeam 师傅团队信息 + * @return 新增成功条数 + */ + int insertWorkerTeam(WorkerTeam workerTeam); + + /** + * @param ids 师傅团队ID + * @return 更新成功条数 + */ + int deleteWorkerTeamByIds(Long[] ids); +} diff --git a/ghy-worker/src/main/java/com/ghy/worker/service/WorkerService.java b/ghy-worker/src/main/java/com/ghy/worker/service/WorkerService.java index 4119d5b2..bf366e09 100644 --- a/ghy-worker/src/main/java/com/ghy/worker/service/WorkerService.java +++ b/ghy-worker/src/main/java/com/ghy/worker/service/WorkerService.java @@ -30,4 +30,18 @@ public interface WorkerService { */ int updateWorker(Worker worker); + /** + * 用师傅ID查询 + * + * @param workerId 师傅ID + */ + Worker selectById(Long workerId); + + /** + * 校验成员与leader是否在同一个团队 + * + * @param leaderId leaderId + * @param workerId workerId + */ + boolean checkInTeam(Long leaderId, Long workerId); } diff --git a/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerServiceImpl.java b/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerServiceImpl.java index fc096e37..94dff6ba 100644 --- a/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerServiceImpl.java +++ b/ghy-worker/src/main/java/com/ghy/worker/service/impl/WorkerServiceImpl.java @@ -2,10 +2,12 @@ package com.ghy.worker.service.impl; import com.ghy.common.utils.StringUtils; import com.ghy.worker.domain.Worker; +import com.ghy.worker.domain.WorkerTeam; import com.ghy.worker.mapper.WorkerMapper; +import com.ghy.worker.mapper.WorkerTeamMapper; import com.ghy.worker.service.WorkerService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; @@ -15,6 +17,8 @@ public class WorkerServiceImpl implements WorkerService { @Resource private WorkerMapper workerMapper; + @Resource + private WorkerTeamMapper workerTeamMapper; @Override public List getWorkList(Worker worker) { @@ -24,9 +28,9 @@ public class WorkerServiceImpl implements WorkerService { @Override public Worker selectByOpenId(Worker worker) { List list = workerMapper.getWorkerList(worker); - if(StringUtils.isNotEmpty(list)){ + if (StringUtils.isNotEmpty(list)) { return list.get(0); - }else { + } else { return null; } } @@ -40,4 +44,18 @@ public class WorkerServiceImpl implements WorkerService { public int updateWorker(Worker worker) { return workerMapper.updateWorker(worker); } + + @Override + public Worker selectById(Long workerId) { + return workerMapper.selectById(workerId); + } + + @Override + public boolean checkInTeam(Long leaderId, Long workerId) { + WorkerTeam query = new WorkerTeam(); + query.setLeaderId(leaderId); + query.setWorkerId(workerId); + List teams = workerTeamMapper.getWorkerTeamList(query); + return !CollectionUtils.isEmpty(teams); + } } diff --git a/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml b/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml index ae020459..8c2f1f57 100644 --- a/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml +++ b/ghy-worker/src/main/resources/mapper/worker/WorkerMapper.xml @@ -39,6 +39,10 @@ + + insert into worker( name, diff --git a/ghy-worker/src/main/resources/mapper/worker/WorkerTeamMapper.xml b/ghy-worker/src/main/resources/mapper/worker/WorkerTeamMapper.xml new file mode 100644 index 00000000..c832bd9f --- /dev/null +++ b/ghy-worker/src/main/resources/mapper/worker/WorkerTeamMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + INSERT INTO worker_team( + leader_id, + worker_id, + worker_name, + remark, + create_by, + create_time + )values( + #{leaderId}, + #{workerId}, + #{workerName}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + SELECT * + FROM worker_team + + + + + + DELETE FROM worker_team WHERE worker_team_id IN + + #{workerTeamId} + + + +