Merge branch 'master' of https://gitee.com/op-souls/ghy-all
This commit is contained in:
commit
604e7bc703
|
|
@ -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<FinancialDetail> 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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<AppGoodsRequest> goodsList;
|
||||
}
|
||||
|
|
@ -49,4 +49,10 @@ public interface OrderDetailService {
|
|||
* @return 校验结果 1存在 0不存在
|
||||
*/
|
||||
String checkOrderDetailCodeUnique(OrderDetail orderDetail);
|
||||
|
||||
/**
|
||||
* 创建code
|
||||
*/
|
||||
String createCode();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,4 +50,11 @@ public interface FinancialMasterMapper {
|
|||
* @param payType 支付渠道
|
||||
*/
|
||||
void paySucceeded(String orderNo, int payType);
|
||||
|
||||
/**
|
||||
* 用主订单ID查询主财务单
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
*/
|
||||
FinancialMaster selectByOrderMasterId(Long orderMasterId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,4 +54,11 @@ public interface FinancialMasterService {
|
|||
* 创建主财务单CODE
|
||||
*/
|
||||
String createCode();
|
||||
|
||||
/**
|
||||
* 用主订单ID查询主财务单
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
*/
|
||||
FinancialMaster selectByOrderMasterId(Long orderMasterId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,12 +48,11 @@
|
|||
</select>
|
||||
|
||||
<select id="selectById" parameterType="long" resultMap="FinancialMasterResult">
|
||||
<include refid="selectFinancialMaster"/>
|
||||
<where>
|
||||
<if test="financialMasterId != null and financialMasterId != 0">
|
||||
AND id = #{financialMasterId}
|
||||
</if>
|
||||
</where>
|
||||
<include refid="selectFinancialMaster"/> WHERE id = #{financialMasterId}
|
||||
</select>
|
||||
|
||||
<select id="selectByOrderMasterId" parameterType="long" resultMap="FinancialMasterResult">
|
||||
<include refid="selectFinancialMaster"/> WHERE order_master_id = #{orderMasterId}
|
||||
</select>
|
||||
|
||||
<delete id="deleteFinancialMasterByIds" parameterType="Long">
|
||||
|
|
|
|||
|
|
@ -24,4 +24,10 @@ public interface WorkerMapper {
|
|||
*/
|
||||
int updateWorker(Worker worker);
|
||||
|
||||
/**
|
||||
* 用师傅ID查询
|
||||
*
|
||||
* @param workerId 师傅ID
|
||||
*/
|
||||
Worker selectById(Long workerId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<WorkerTeam> getWorkerTeamList(WorkerTeam workerTeam);
|
||||
|
||||
/**
|
||||
* @param workerTeam 师傅团队信息
|
||||
* @return 新增成功条数
|
||||
*/
|
||||
int insertWorkerTeam(WorkerTeam workerTeam);
|
||||
|
||||
/**
|
||||
* @param ids 师傅团队ID
|
||||
* @return 更新成功条数
|
||||
*/
|
||||
int deleteWorkerTeamByIds(Long[] ids);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Worker> getWorkList(Worker worker) {
|
||||
|
|
@ -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<WorkerTeam> teams = workerTeamMapper.getWorkerTeamList(query);
|
||||
return !CollectionUtils.isEmpty(teams);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@
|
|||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectById" parameterType="Long" resultMap="WorkerResult">
|
||||
<include refid="selectWorker" /> WHERE worker_id = #{workerId}
|
||||
</select>
|
||||
|
||||
<insert id="insertWorker" parameterType="com.ghy.worker.domain.Worker" useGeneratedKeys="true" keyProperty="workerId">
|
||||
insert into worker(
|
||||
<if test="name != null and name != ''">name,</if>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
<?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.ghy.worker.mapper.WorkerTeamMapper">
|
||||
|
||||
<resultMap id="WorkerTeamResult" type="com.ghy.worker.domain.WorkerTeam">
|
||||
<id property="workerTeamId" column="worker_team_id"/>
|
||||
<result property="leaderId" column="leader_id"/>
|
||||
<result property="workerId" column="worker_id"/>
|
||||
<result property="workerName" column="worker_name"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<insert id="insertWorkerTeam" parameterType="com.ghy.worker.domain.WorkerTeam" useGeneratedKeys="true"
|
||||
keyProperty="workerTeamId">
|
||||
INSERT INTO worker_team(
|
||||
<if test="leaderId != null and leaderId != 0">leader_id,</if>
|
||||
<if test="workerId != null and workerId != 0">worker_id,</if>
|
||||
<if test="workerName != null and workerName != ''">worker_name,</if>
|
||||
<if test="remark != null and remark != ''">remark,</if>
|
||||
<if test="createBy != null and createBy != ''">create_by,</if>
|
||||
create_time
|
||||
)values(
|
||||
<if test="leaderId != null and leaderId != 0">#{leaderId},</if>
|
||||
<if test="workerId != null and workerId != 0">#{workerId},</if>
|
||||
<if test="workerName != null and workerName != ''">#{workerName},</if>
|
||||
<if test="remark != null and remark != ''">#{remark},</if>
|
||||
<if test="createBy != null and createBy != ''">#{createBy},</if>
|
||||
sysdate()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<sql id="selectWorkerTeam">
|
||||
SELECT *
|
||||
FROM worker_team
|
||||
</sql>
|
||||
|
||||
<select id="getWorkerTeamList" resultMap="WorkerTeamResult">
|
||||
<include refid="selectWorkerTeam"/>
|
||||
<where>
|
||||
<if test="leaderId != null and leaderId != ''">
|
||||
AND leader_id = #{leaderId}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<delete id="deleteWorkerTeamByIds" parameterType="Long">
|
||||
DELETE FROM worker_team WHERE worker_team_id IN
|
||||
<foreach collection="array" item="workerTeamId" open="(" separator="," close=")">
|
||||
#{workerTeamId}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue