提交 704f0709 作者: xiaowang

租赁详情,取消订单

上级 7d44ab5a
......@@ -3,16 +3,15 @@ package com.mmc.oms.controller.lease;
import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.controller.BaseController;
import com.mmc.oms.model.dto.lease.LeaseOrderDTO;
import com.mmc.oms.model.qo.uav.UavOrderQO;
import com.mmc.oms.model.vo.lease.AddLeaseOrderVO;
import com.mmc.oms.model.vo.lease.LeaseOrderRefundVO;
import com.mmc.oms.service.lease.LeaseOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
......@@ -36,4 +35,24 @@ public class LeaseOrderController extends BaseController {
return leaseOrderService.addLeaseOrder(param, this.getCurrentAccount(request));
}
@ApiOperation(value = "订单详情")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = LeaseOrderDTO.class)})
@GetMapping("detail")
public ResultBody<LeaseOrderDTO> detail(@RequestParam Integer id, HttpServletRequest request) throws Exception {
return leaseOrderService.detail(id, this.getCurrentAccount(request));
}
@ApiOperation(value = "买家申请退款(取消订单)")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("close")
public ResultBody close(@RequestBody LeaseOrderRefundVO leaseOrderRefundVO, HttpServletRequest request) {
return leaseOrderService.close(leaseOrderRefundVO, this.getCurrentAccount(request).getToken());
}
@ApiOperation(value = "后台订单列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = LeaseOrderDTO.class)})
@PostMapping("list")
public ResultBody<LeaseOrderDTO> list(@RequestBody UavOrderQO uavOrderQO, HttpServletRequest request) {
return leaseOrderService.list(uavOrderQO, this.getCurrentAccount(request));
}
}
......@@ -2,6 +2,7 @@ package com.mmc.oms.dao.lease;
import com.mmc.oms.entity.lease.LeaseOrderDO;
import com.mmc.oms.entity.lease.LeaseOrderExpressDO;
import com.mmc.oms.entity.lease.LeaseRefundOrderDO;
import org.apache.ibatis.annotations.Mapper;
/**
......@@ -14,4 +15,12 @@ public interface LeaseOrderDao {
void addOrder(LeaseOrderDO leaseOrderDO);
void addAddress(LeaseOrderExpressDO leaseOrderExpressDO);
LeaseOrderDO detail(Integer id);
LeaseOrderExpressDO getLeaseOrderExpress(Integer id);
void updateUavOrderStatus(Integer id, Integer code);
void addLeaseRefundOrder(LeaseRefundOrderDO leaseRefundOrderDO);
}
......@@ -152,12 +152,14 @@ public class LeaseOrderDO implements Serializable {
*/
private Date sendWareTime;
private String modeOfDeliveryInfo;
public LeaseOrderDTO buildLeaseOrderDTO() {
return LeaseOrderDTO.builder().id(id).orderNo(orderNo).statusCode(statusCode).userAccountId(userAccountId)
.thirdBackUserAccountId(thirdBackUserAccountId).companyName(companyName).orderTotalAmount(orderTotalAmount)
.salaryAmount(salaryAmount).shareAmount(shareAmount).otherAmount(otherAmount).payType(payType).payTime(payTime)
.startDate(startDate).endDate(endDate).userRemark(userRemark).sellerRemark(sellerRemark).createTime(createTime)
.confirmReceiptTime(confirmReceiptTime).remarkStatus(remarkStatus).sku(sku).skuImg(skuImg).build();
.confirmReceiptTime(confirmReceiptTime).remarkStatus(remarkStatus).modeOfDeliveryInfo(modeOfDeliveryInfo).sku(sku).skuImg(skuImg).build();
}
}
package com.mmc.oms.entity.lease;
import com.mmc.oms.entity.mall.UserAddressDO;
import com.mmc.oms.model.dto.uav.UavOrderExpressDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -50,7 +51,7 @@ public class LeaseOrderExpressDO implements Serializable {
/**
* 是否已签收
*/
private Integer isReceive;
private Integer receive;
/**
* 收货人签收时间
*/
......@@ -66,5 +67,11 @@ public class LeaseOrderExpressDO implements Serializable {
this.takeRegion = userAddressDO.getTakeRegion();
this.takeAddress = userAddressDO.getTakeAddress();
}
public UavOrderExpressDTO buildUavOrderExpressDTO() {
return UavOrderExpressDTO.builder().id(this.id).uavOrderId(this.leaseOrderId).sendExpNo(this.sendExpNo).sendExpCode(this.sendExpCode).takeName(this.takeName)
.takePhone(this.takePhone).takeAddress(this.takeAddress).takeRegion(this.takeRegion).receive(this.receive).receiveTime(this.receiveTime)
.sendTime(this.sendTime).build();
}
}
package com.mmc.oms.entity.lease;
import com.mmc.oms.model.vo.lease.LeaseOrderRefundVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* (LeaseRefundOrderDO)实体类
*
* @author makejava
* @since 2023-09-23 15:49:05
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LeaseRefundOrderDO implements Serializable {
private static final long serialVersionUID = -78279245843440398L;
private Integer id;
private Integer leaseOrderId;
/**
* 归还状态:0已归还 1无需归还
*/
private Integer status;
/**
* 物流单号
*/
private String expressNum;
/**
* 图片文件
*/
private String file;
/**
* 原因
*/
private String reason;
private Date createTime;
private Date updateTime;
public LeaseRefundOrderDO(LeaseOrderRefundVO leaseOrderRefundVO) {
this.leaseOrderId = leaseOrderRefundVO.getId();
this.status = leaseOrderRefundVO.getStatus();
this.expressNum = leaseOrderRefundVO.getExpressNum();
this.file = leaseOrderRefundVO.getFile();
this.reason = leaseOrderRefundVO.getReason();
}
}
package com.mmc.oms.model.vo.lease;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author LW
* @date 2023/9/23 15:36
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LeaseOrderRefundVO implements Serializable {
@ApiModelProperty("订单id")
private Integer id;
@ApiModelProperty("归还状态 0已归还 1无需归还")
private Integer status;
@ApiModelProperty("物流单号")
private String expressNum;
@ApiModelProperty("图片文件")
private String file;
@ApiModelProperty("原因")
private String reason;
}
......@@ -3,7 +3,9 @@ package com.mmc.oms.service.lease;
import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.model.dto.lease.LeaseOrderDTO;
import com.mmc.oms.model.dto.user.BaseAccountDTO;
import com.mmc.oms.model.qo.uav.UavOrderQO;
import com.mmc.oms.model.vo.lease.AddLeaseOrderVO;
import com.mmc.oms.model.vo.lease.LeaseOrderRefundVO;
/**
* @Author LW
......@@ -13,4 +15,10 @@ import com.mmc.oms.model.vo.lease.AddLeaseOrderVO;
public interface LeaseOrderService {
ResultBody<LeaseOrderDTO> addLeaseOrder(AddLeaseOrderVO param, BaseAccountDTO currentAccount);
ResultBody detail(Integer id, BaseAccountDTO currentAccount) throws Exception;
ResultBody close(LeaseOrderRefundVO leaseOrderRefundVO, String token);
ResultBody<LeaseOrderDTO> list(UavOrderQO uavOrderQO, BaseAccountDTO currentAccount);
}
package com.mmc.oms.service.lease.impl;
import com.mmc.oms.common.ResultEnum;
import com.mmc.oms.common.json.JsonUtil;
import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.common.util.CodeUtil;
import com.mmc.oms.common.util.KdnExpressUtil;
import com.mmc.oms.dao.UserAddressDao;
import com.mmc.oms.dao.lease.LeaseOrderDao;
import com.mmc.oms.entity.lease.LeaseOrderDO;
import com.mmc.oms.entity.lease.LeaseOrderExpressDO;
import com.mmc.oms.entity.lease.LeaseRefundOrderDO;
import com.mmc.oms.entity.mall.UserAddressDO;
import com.mmc.oms.enums.LeaseOrderStatus;
import com.mmc.oms.enums.LeaseTermInfo;
import com.mmc.oms.feign.PaymentAppApi;
import com.mmc.oms.feign.PmsAppApi;
import com.mmc.oms.feign.UserAppApi;
import com.mmc.oms.model.dto.kdn.KdnExpDTO;
import com.mmc.oms.model.dto.lease.LeaseOrderDTO;
import com.mmc.oms.model.dto.order.ExpStationsDTO;
import com.mmc.oms.model.dto.uav.PayWalletDTO;
import com.mmc.oms.model.dto.user.BaseAccountDTO;
import com.mmc.oms.model.dto.user.UserAccountSimpleDTO;
import com.mmc.oms.model.qo.uav.UavOrderQO;
import com.mmc.oms.model.vo.ApplyRefundVO;
import com.mmc.oms.model.vo.lease.AddLeaseOrderVO;
import com.mmc.oms.model.vo.lease.LeaseGoodsVO;
import com.mmc.oms.model.vo.lease.LeaseOrderRefundVO;
import com.mmc.oms.model.vo.lease.LeasePriceStockVO;
import com.mmc.oms.model.vo.uav.GoodsResourcesVO;
import com.mmc.oms.model.vo.uav.PayUavWalletVO;
import com.mmc.oms.service.lease.LeaseOrderService;
import com.mmc.oms.service.uav.UavOrderService;
import com.mmc.oms.util.TDateUtil;
......@@ -30,6 +41,8 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
/**
......@@ -50,6 +63,8 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
private UserAddressDao userAddressDao;
@Resource
private UserAppApi userAppApi;
@Resource
private PaymentAppApi paymentAppApi;
@Override
@Transactional
......@@ -61,7 +76,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
if (param.getWareNum() <= 0) {
return ResultBody.error("购买数量不得少于1");
}
LeaseGoodsVO leaseGoodsVO = null;
LeaseGoodsVO leaseGoodsVO;
LeasePriceStockVO priceStock = null;
try {
leaseGoodsVO = pmsAppApi.leaseGoodsDetails(param.getLeaseGoodsId()).getResult();
......@@ -166,6 +181,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
leaseOrderDO.setCompanyName(param.getCompanyName());
leaseOrderDO.setThirdBackUserAccountId(param.getThirdBackUserAccountId());
leaseOrderDO.setOrderName(leaseGoodsVO.getTradeName());
leaseOrderDO.setModeOfDeliveryInfo(leaseGoodsVO.getModeOfDeliveryInfo());
if (priceStock.getSkuImage() != null) {
leaseOrderDO.setSkuImg(priceStock.getSkuImage());
} else {
......@@ -238,4 +254,112 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
return LeaseTermInfo.ONE_HUNDRED_AND_EIGHTY_DAY.getDays();
}
}
@Override
public ResultBody detail(Integer id, BaseAccountDTO currentAccount) throws Exception {
LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(id);
if (leaseOrderDO == null) {
return ResultBody.error("订单信息不存在!");
}
LeaseOrderDTO leaseOrderDTO = leaseOrderDO.buildLeaseOrderDTO();
if (leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.PLACED_AN_ORDER.getCode())) {
leaseOrderDTO.setNeedPayAmount(leaseOrderDO.getOtherAmount());
}
// 收货信息、付款信息、规格信息、快递信息、签署信息
LeaseOrderExpressDO leaseOrderExpressDO = leaseOrderDao.getLeaseOrderExpress(id);
if (leaseOrderExpressDO != null) {
leaseOrderDTO.setUavOrderExpressDTO(leaseOrderExpressDO.buildUavOrderExpressDTO());
// 快递信息
KdnExpDTO kdnExpDTO = this.getOrderExpInfo(leaseOrderExpressDO);
leaseOrderDTO.setKdnExpDTO(kdnExpDTO);
}
// 设置个人信息
UserAccountSimpleDTO userAccountSimpleDTO = userAppApi.feignGetUserSimpleInfo(leaseOrderDO.getUserAccountId(), currentAccount.getToken());
if (userAccountSimpleDTO != null) {
leaseOrderDTO.setUserName(userAccountSimpleDTO.getUserName());
leaseOrderDTO.setNickname(userAccountSimpleDTO.getNickName());
leaseOrderDTO.setPhoneNum(userAccountSimpleDTO.getPhoneNum());
}
return ResultBody.success(leaseOrderDTO);
}
private KdnExpDTO getOrderExpInfo(LeaseOrderExpressDO exp) throws Exception {
String json = "";
if ("SF".equals(exp.getSendExpCode())) {
json = KdnExpressUtil.SF(exp.getTakePhone(), exp.getSendExpNo());
} else if ("JD".equals(exp.getSendExpCode())) {
json = KdnExpressUtil.JD("", exp.getSendExpNo());
} else {
json = KdnExpressUtil.others(exp.getSendExpCode(), exp.getSendExpNo());
}
KdnExpDTO kdn = JsonUtil.parseJsonToObj(json, KdnExpDTO.class);
kdn.setLogisticCode(exp.getSendExpNo());
if (!org.springframework.util.CollectionUtils.isEmpty(kdn.getTraces())) {
Collections.sort(kdn.getTraces(), Comparator.comparing(ExpStationsDTO::getAcceptTime).reversed());// 升序
}
return kdn;
}
@Override
public ResultBody close(LeaseOrderRefundVO leaseOrderRefundVO, String token) {
LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(leaseOrderRefundVO.getId());
if (leaseOrderDO == null) {
return ResultBody.error("订单信息不存在!");
}
// 判断订单状态
if (leaseOrderDO.getStatusCode().compareTo(LeaseOrderStatus.PAID.getCode()) > 0) {
if (leaseOrderDO.getStatusCode().compareTo(LeaseOrderStatus.TO_BE_RETURNED.getCode()) == 0) {
return ResultBody.error("当前状态不可申请退款");
}
// 判断商品是否需要归还
if (leaseOrderRefundVO.getStatus().equals(0) && leaseOrderRefundVO.getExpressNum() == null) {
return ResultBody.error("请填充物流编号");
}
// 插入退款订单信息
LeaseRefundOrderDO leaseRefundOrderDO = new LeaseRefundOrderDO(leaseOrderRefundVO);
leaseOrderDao.addLeaseRefundOrder(leaseRefundOrderDO);
// 修改订单状态
leaseOrderDao.updateUavOrderStatus(leaseOrderRefundVO.getStatus(), LeaseOrderStatus.APPLY_REFUND.getCode());
return ResultBody.success();
} else {
// 退云享金、佣金
if (leaseOrderDO.getShareAmount().compareTo(BigDecimal.ZERO) > 0 || leaseOrderDO.getSalaryAmount().compareTo(BigDecimal.ZERO) > 0) {
PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setCashAmount(leaseOrderDO.getShareAmount());
payUavWalletVO.setSalaryAmount(leaseOrderDO.getSalaryAmount());
payUavWalletVO.setOrderStatus(1400);
payUavWalletVO.setUserAccountId(leaseOrderDO.getUserAccountId());
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, token);
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return resultBody;
}
}
// 微信退款
if ("wechatpay".equals(leaseOrderDO.getPayType())) {
ApplyRefundVO applyRefundVO = new ApplyRefundVO();
applyRefundVO.setOutTradeNo(leaseOrderDO.getOrderNo());
applyRefundVO.setReason("关闭租赁订单");
applyRefundVO.setRefund(leaseOrderDO.getOtherAmount().multiply(BigDecimal.valueOf(100)).longValue());
ResultBody applyRefund = paymentAppApi.applyRefund(applyRefundVO, token);
log.info("applyRefund res:{}", applyRefund);
if (!applyRefund.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResultBody.error("关闭订单失败!");
}
}
// 修改订单状态
this.updateLeaseOrderStatus(leaseOrderRefundVO.getId(), LeaseOrderStatus.CLOSE);
return ResultBody.success();
}
}
@Transactional(rollbackFor = Exception.class)
public void updateLeaseOrderStatus(Integer id, LeaseOrderStatus leaseOrderStatus) {
leaseOrderDao.updateUavOrderStatus(id, leaseOrderStatus.getCode());
}
@Override
public ResultBody<LeaseOrderDTO> list(UavOrderQO uavOrderQO, BaseAccountDTO currentAccount) {
return null;
}
}
......@@ -34,4 +34,39 @@
values (#{leaseOrderId}, #{sendExpNo}, #{sendExpCode}, #{takeName}, #{takePhone}, #{takeRegion}, #{takeAddress},
NOW())
</insert>
<insert id="addLeaseRefundOrder">
insert into lease_order_id,status,express_num,file,reason
values (#{leaseOrderId}, #{status}, #{expressNum}, #{file}, #{reason})
</insert>
<update id="updateUavOrderStatus">
update lease_order
set status_code = #{code}
where id = #{id}
</update>
<sql id="lease_order_column">
id
,order_no,status_code,user_account_id,lease_goods_id,company_name,third_back_user_account_id,
order_name,sku_img,sku,order_total_amount,salary_amount,share_amount,other_amount,pay_type,
user_address_id,user_remark,seller_remark,pay_time,confirm_receipt_time,version,remark_status,mode_of_delivery_Info,
proportion,show_user_port,create_time,update_time,unit_price,ware_num,deposit,start_date,end_date,shut_reason,send_ware_time
</sql>
<select id="detail" resultType="com.mmc.oms.entity.lease.LeaseOrderDO">
select
<include refid="lease_order_column"/>
from lease_order where id = #{id}
</select>
<sql id="lease_order_express_column">
id
, lease_order_id, send_exp_no, send_exp_code, take_name, take_phone, take_region, take_address, send_time,
is_receive as receive, receive_time, update_time, create_time
</sql>
<select id="getLeaseOrderExpress" resultType="com.mmc.oms.entity.lease.LeaseOrderExpressDO">
select
<include refid="lease_order_express_column"/>
from lease_order_express
where lease_order_id = #{id}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论