提交 c7a6a354 作者: xiaowang

租赁订单下单

上级 de8e5ad1
package com.mmc.oms.common.util; package com.mmc.oms.common.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random; import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* @Author small * @Author small
...@@ -243,4 +246,14 @@ public class CodeUtil { ...@@ -243,4 +246,14 @@ public class CodeUtil {
return "AC" + CodeUtil.getRandomNum(5); return "AC" + CodeUtil.getRandomNum(5);
} }
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
private static final AtomicInteger counter = new AtomicInteger(0);
public static String generateOrderId() {
Date now = new Date();
String dateString = sdf.format(now);
int count = counter.incrementAndGet();
return "ORD" + dateString + String.format("%04d", count);
}
} }
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.vo.lease.AddLeaseOrderVO;
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 javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* @author: lw
* @Date: 2023/9/21 16:29
*/
@Api(tags = {"最新版--租赁订单接口"})
@RestController
@RequestMapping("/lease/order/")
public class LeaseOrderController extends BaseController {
@Resource
private LeaseOrderService leaseOrderService;
@ApiOperation(value = "提交订单")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = LeaseOrderDTO.class)})
@PostMapping("addLeaseOrder")
public ResultBody<LeaseOrderDTO> addLeaseOrder(@RequestBody AddLeaseOrderVO param, HttpServletRequest request) {
return leaseOrderService.addLeaseOrder(param, this.getCurrentAccount(request));
}
}
package com.mmc.oms.dao.lease;
import com.mmc.oms.entity.lease.LeaseOrderDO;
import com.mmc.oms.entity.lease.LeaseOrderExpressDO;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author LW
* @date 2023/9/21 16:48
* 概要:
*/
@Mapper
public interface LeaseOrderDao {
void addOrder(LeaseOrderDO leaseOrderDO);
void addAddress(LeaseOrderExpressDO leaseOrderExpressDO);
}
package com.mmc.oms.entity.lease;
import com.mmc.oms.model.dto.lease.LeaseOrderDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* (LeaseOrderDO)实体类
*
* @author makejava
* @since 2023-09-21 16:59:10
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LeaseOrderDO implements Serializable {
private static final long serialVersionUID = -58305538180098964L;
private Integer id;
/**
* 订单编号
*/
private String orderNo;
/**
* 订单状态
*/
private Integer statusCode;
/**
* 下单用户id
*/
private Integer userAccountId;
/**
* 租赁商品id
*/
private Integer leaseGoodsId;
/**
* 商家企业名称
*/
private String companyName;
/**
* 商家id
*/
private Integer thirdBackUserAccountId;
/**
* 商品标题
*/
private String orderName;
/**
* sku图片/商品图片
*/
private String skuImg;
/**
* 订单总金额
*/
private BigDecimal orderTotalAmount;
/**
* 抵扣佣金金额
*/
private BigDecimal salaryAmount;
/**
* 抵扣云享金金额
*/
private BigDecimal shareAmount;
/**
* 其他渠道应支付金额
*/
private BigDecimal otherAmount;
/**
* 支付方式,wechatpay微信,alipay支付宝,offline线下
*/
private String payType;
/**
* 用户收货地址id
*/
private Integer userAddressId;
/**
* 买家备注信息
*/
private String userRemark;
/**
* 商家备注信息
*/
private String sellerRemark;
/**
* 支付时间
*/
private Date payTime;
/**
* 确认收货时间(成交时间)
*/
private Date confirmReceiptTime;
/**
* 修改版本
*/
private Integer version;
/**
* 评价状态
*/
private Integer remarkStatus;
/**
* 订单分成比例(平台收取)
*/
private Integer proportion;
/**
* 用户删除(0用户不可看,1用户可看)
* (假删除,后台还能看到)
*/
private Integer showUserPort;
/**
* 生成订单时间(下单时间)
*/
private Date createTime;
/**
* 最近修改时间
*/
private Date updateTime;
/**
* 单价 元/天
*/
private BigDecimal unitPrice;
/**
* 购买的商品数量
*/
private Integer wareNum;
/**
* 押金
*/
private BigDecimal deposit;
/**
* 租约开始日
*/
private Date startDate;
/**
* 租约结束日
*/
private Date endDate;
/**
* 关闭原因
*/
private String shutReason;
/**
* sku
*/
private String sku;
/**
* 发货时间
*/
private Date sendWareTime;
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();
}
}
package com.mmc.oms.entity.lease;
import com.mmc.oms.entity.mall.UserAddressDO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* (LeaseOrderExpressDO)实体类
*
* @author makejava
* @since 2023-09-22 15:02:22
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LeaseOrderExpressDO implements Serializable {
private static final long serialVersionUID = -24578000103219438L;
private Integer id;
private Integer leaseOrderId;
private String sendExpNo;
private String sendExpCode;
/**
* 收货人姓名
*/
private String takeName;
/**
* 收货人电话
*/
private String takePhone;
/**
* 收货地区
*/
private String takeRegion;
/**
* 收货详细地址
*/
private String takeAddress;
/**
* 发货时间
*/
private Date sendTime;
/**
* 是否已签收
*/
private Integer isReceive;
/**
* 收货人签收时间
*/
private Date receiveTime;
private Date updateTime;
private Date createTime;
public LeaseOrderExpressDO(UserAddressDO userAddressDO) {
this.takeName = userAddressDO.getTakeName();
this.takePhone = userAddressDO.getTakePhone();
this.takeRegion = userAddressDO.getTakeRegion();
this.takeAddress = userAddressDO.getTakeAddress();
}
}
package com.mmc.oms.enums;
/**
* @author: zj
* @Date: 2023/9/4 14:36
*/
public enum LeaseOrderStatus {
PLACED_AN_ORDER(100, "已下单", "待付款"),
PAID(200, "已付款", "等发货"),
SHIPPED(300, "卖家已发货", "待买家收货"),
TO_BE_RETURNED(400, "待归还", "待归还"),
WAITING_MERCHANT_CONFIRM(500, "等待商家确认", "等待商家确认"),
COMPLETE_TRANSACTION(600, "交易完成", "交易完成"),
APPLY_REFUND(700, "申请退款", "退款中"),
CLOSE(999, "订单关闭", "订单关闭");
public Integer getCode() {
return code;
}
public String getDoing() {
return doing;
}
public String getWaiting() {
return waiting;
}
LeaseOrderStatus(Integer code, String doing, String waiting) {
this.code = code;
this.doing = doing;
this.waiting = waiting;
}
private Integer code;
private String doing;
private String waiting;
}
package com.mmc.oms.enums;
/**
* @author: lw
* @Date: 2023/9/4 14:36
*/
public enum LeaseTermInfo {
THREE_DAY(1, 3, "三天"),
SEVEN_DAY(2, 7, "七天"),
THIRTY_DAY(3, 30, "三十天"),
NINETY_DAY(4, 90, "九十天"),
ONE_HUNDRED_AND_EIGHTY_DAY(5, 180, "一百八十天");
public Integer getId() {
return id;
}
public Integer getDays() {
return days;
}
public String getDescription() {
return description;
}
LeaseTermInfo(Integer id, Integer days, String description) {
this.id = id;
this.days = days;
this.description = description;
}
private Integer id;
private Integer days;
private String description;
}
...@@ -4,8 +4,12 @@ import com.mmc.oms.common.result.ResultBody; ...@@ -4,8 +4,12 @@ import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.feign.hystrix.PmsAppApiHystrix; import com.mmc.oms.feign.hystrix.PmsAppApiHystrix;
import com.mmc.oms.model.dto.uav.UavCartDTO; import com.mmc.oms.model.dto.uav.UavCartDTO;
import com.mmc.oms.model.qo.uav.PriceStockQO; import com.mmc.oms.model.qo.uav.PriceStockQO;
import com.mmc.oms.model.vo.lease.LeaseGoodsVO;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
...@@ -20,4 +24,7 @@ public interface PmsAppApi { ...@@ -20,4 +24,7 @@ public interface PmsAppApi {
@PostMapping("app/goods/listPriceStock") @PostMapping("app/goods/listPriceStock")
List<UavCartDTO> listPriceStock(@RequestBody List<PriceStockQO> priceStockQOS); List<UavCartDTO> listPriceStock(@RequestBody List<PriceStockQO> priceStockQOS);
@GetMapping("app/lease/leaseGoodsDetails")
ResultBody<LeaseGoodsVO> leaseGoodsDetails(@RequestParam Integer id);
} }
...@@ -5,8 +5,8 @@ import com.mmc.oms.common.result.ResultBody; ...@@ -5,8 +5,8 @@ import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.feign.PmsAppApi; import com.mmc.oms.feign.PmsAppApi;
import com.mmc.oms.model.dto.uav.UavCartDTO; import com.mmc.oms.model.dto.uav.UavCartDTO;
import com.mmc.oms.model.qo.uav.PriceStockQO; import com.mmc.oms.model.qo.uav.PriceStockQO;
import com.mmc.oms.model.vo.lease.LeaseGoodsVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
...@@ -18,7 +18,7 @@ import java.util.List; ...@@ -18,7 +18,7 @@ import java.util.List;
public class PmsAppApiHystrix implements PmsAppApi { public class PmsAppApiHystrix implements PmsAppApi {
@Override @Override
public ResultBody feignLeaseGoodsInfoByAddressId(Integer id) { public ResultBody feignLeaseGoodsInfoByAddressId(Integer id) {
log.info("熔断:PmsAppApiHystrix.feignLeaseGoodsInfoByAddressId==error==>param:{}",id); log.info("熔断:PmsAppApiHystrix.feignLeaseGoodsInfoByAddressId==error==>param:{}", id);
return null; return null;
} }
...@@ -27,4 +27,10 @@ public class PmsAppApiHystrix implements PmsAppApi { ...@@ -27,4 +27,10 @@ public class PmsAppApiHystrix implements PmsAppApi {
log.info("熔断:PmsAppApiHystrix.listPriceStock==error==>param:{}", JSONObject.toJSONString(priceStockQOS)); log.info("熔断:PmsAppApiHystrix.listPriceStock==error==>param:{}", JSONObject.toJSONString(priceStockQOS));
return null; return null;
} }
@Override
public ResultBody<LeaseGoodsVO> leaseGoodsDetails(Integer id) {
log.info("熔断:PmsAppApiHystrix.leaseGoodsDetails==error==>param:{}", id);
return null;
}
} }
package com.mmc.oms.model.dto.lease;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mmc.oms.model.dto.kdn.KdnExpDTO;
import com.mmc.oms.model.dto.uav.UavOrderExpressDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author: lw
* @Date: 2023/9/4 14:50
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "最新版-订单")
public class LeaseOrderDTO implements Serializable {
private static final long serialVersionUID = 7548192478556457453L;
@ApiModelProperty("id")
private Integer id;
@ApiModelProperty("订单编号")
private String orderNo;
@ApiModelProperty("订单状态")
private Integer statusCode;
@ApiModelProperty("买家id")
private Integer userAccountId;
@ApiModelProperty("买家手机号")
private String phoneNum;
@ApiModelProperty("买家姓名")
private String userName;
@ApiModelProperty("买家昵称")
private String nickname;
@ApiModelProperty("卖家id")
private Integer thirdBackUserAccountId;
@ApiModelProperty("卖家企业名称")
private String companyName;
@ApiModelProperty("订单实付总额")
private BigDecimal orderTotalAmount;
@ApiModelProperty("订单需付金额")
private BigDecimal needPayAmount;
@ApiModelProperty("抵扣佣金余额")
private BigDecimal salaryAmount;
@ApiModelProperty("抵扣云享金余额")
private BigDecimal shareAmount;
@ApiModelProperty("其他方式支付额度")
private BigDecimal otherAmount;
@ApiModelProperty("wechatpay微信,alipay支付宝,offline线下")
private String payType;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty("租赁开始时间")
private Date startDate;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty("租赁结束时间")
private Date endDate;
@ApiModelProperty("买家备注")
private String userRemark;
@ApiModelProperty("卖家备注")
private String sellerRemark;
@ApiModelProperty("下单时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("支付时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date payTime;
@ApiModelProperty("确认收货时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date confirmReceiptTime;
@ApiModelProperty(value = "修改版本", hidden = true)
private Integer version;
@ApiModelProperty("评价状态")
private Integer remarkStatus;
@ApiModelProperty("最近修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@ApiModelProperty("用户收货地址信息")
private UavOrderExpressDTO uavOrderExpressDTO;
@ApiModelProperty("快递信息")
private KdnExpDTO kdnExpDTO;
@ApiModelProperty("订单规格列表")
private String sku;
@ApiModelProperty("sku图片")
private String skuImg;
@ApiModelProperty("运费")
private String modeOfDeliveryInfo;
}
package com.mmc.oms.model.vo.lease;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author: lw
* @Date: 2023/9/21 16:01
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AddLeaseOrderVO implements Serializable {
private static final long serialVersionUID = 2749055915508197141L;
@ApiModelProperty("商家id")
private Integer thirdBackUserAccountId;
@ApiModelProperty("卖家企业名称")
private String companyName;
@ApiModelProperty("租赁商品id")
private Integer leaseGoodsId;
@ApiModelProperty("收货地址id")
private Integer userAddressId;
@ApiModelProperty(value = "订单实付总额", hidden = true)
private BigDecimal orderTotalAmount;
@ApiModelProperty(value = "抵扣钱包余额", hidden = true)
private BigDecimal walletAmount;
@ApiModelProperty(value = "抵扣云享金余额", hidden = true)
private BigDecimal shareAmount;
@ApiModelProperty(value = "其他方式支付额度", hidden = true)
private BigDecimal otherAmount;
@ApiModelProperty(value = "租期", hidden = true)
private Integer leaseTerm;
@ApiModelProperty("用户备注")
private String userRemark;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty("租赁开始时间")
private Date startDate;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty("租赁结束时间")
private Date endDate;
@ApiModelProperty("购买数量")
private Integer wareNum;
@ApiModelProperty(value = "单价", hidden = true)
private BigDecimal unitPrice;
@ApiModelProperty(value = "押金", hidden = true)
private BigDecimal deposit;
@ApiModelProperty("sku")
private String sku;
@ApiModelProperty("是否抵扣云享金,0否,1是")
private Integer deductShareAmount;
@ApiModelProperty("是否抵扣余额,0否,1是")
private Integer deductSalaryAmount;
}
package com.mmc.oms.model.vo.lease;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mmc.oms.common.publicinterface.Create;
import com.mmc.oms.common.publicinterface.Update;
import com.mmc.oms.model.vo.uav.GoodsResourcesVO;
import com.mmc.oms.model.vo.uav.SpecAttrVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Author LW
* @date 2023/7/24 17:44
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LeaseGoodsVO implements Serializable {
private static final long serialVersionUID = -3147170430919703826L;
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空", groups = {Update.class})
private Integer id;
@ApiModelProperty(value = "商品标题", example = "商品标题", required = true)
@NotEmpty(message = "商品标题不能为空", groups = {Update.class, Create.class})
private String tradeName;
@ApiModelProperty(value = "商品卖点", example = "商品卖点")
private String sellingPoint;
@ApiModelProperty(value = "商品成新", example = "1", required = true)
private Integer level;
@ApiModelProperty(value = "商品状态 :0下架 1上架", example = "1", required = true)
@NotNull(message = "商品状态不能为空", groups = {Update.class, Create.class})
private Integer shelfStatus;
@ApiModelProperty(value = "商品类型id", example = "1", required = true)
@NotNull(message = "商品类型id不能为空", groups = {Update.class, Create.class})
private Integer productTypeId;
@ApiModelProperty(value = "品牌id", example = "2", required = true)
@NotNull(message = "品牌id不能为空", groups = {Update.class, Create.class})
private Integer brandInfoId;
@ApiModelProperty(value = "型号id", example = "2", required = true)
@NotNull(message = "型号id不能为空", groups = {Update.class, Create.class})
private Integer deviceModeId;
@ApiModelProperty(value = "商品参数", example = "示例:[{\"起飞重量\":\"595g\"}]")
private String productParam;
@ApiModelProperty(value = "商品资源:图片or视频及其他")
@NotEmpty(message = "图片不能为空")
private List<GoodsResourcesVO> resourcesList;
@ApiModelProperty(value = "规格")
@NotEmpty(message = "规格不能为空", groups = {Update.class, Create.class})
private List<SpecAttrVO> specAttrList;
@ApiModelProperty(value = "价格库存排列组合表信息")
private List<LeasePriceStockVO> priceStock;
@ApiModelProperty(value = "商品详情 富文本")
private String productDetails;
@ApiModelProperty(value = "最短租期")
private Integer minLeaseTerm;
@ApiModelProperty(value = "最长租期")
private Integer maxLeaseTerm;
@ApiModelProperty(value = "发货地址")
private Integer shipAddress;
@ApiModelProperty(value = "归还地址")
private Integer returnAddress;
@ApiModelProperty(value = "寄出物流")
private String logisticsCompany;
@ApiModelProperty(value = "配送方式")
private Integer modeOfDelivery;
@ApiModelProperty(value = "展示最低价", example = "1")
private BigDecimal showPrice;
@ApiModelProperty(value = "创建时间 用作列表回显", hidden = true)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty(value = "店铺id 小程序用", hidden = true)
private Integer userAccountId;
@ApiModelProperty(value = "押金范围", hidden = true)
private String cashPledgeRange;
@ApiModelProperty(value = "租金范围", hidden = true)
private String rentalRange;
@ApiModelProperty(value = "库存", hidden = true)
private Integer stock;
@ApiModelProperty(value = "市code编码")
private String districtCode;
@ApiModelProperty(value = "类型名称", hidden = true)
private String productTypeName;
@ApiModelProperty(value = "品牌名称", hidden = true)
private String brandName;
@ApiModelProperty(value = "型号名称", hidden = true)
private String deviceModeName;
@ApiModelProperty(value = "配送方式信息", hidden = true)
private String modeOfDeliveryInfo;
@ApiModelProperty(value = "企业名称", hidden = true)
private String companyName;
}
package com.mmc.oms.model.vo.lease;
import com.mmc.oms.common.publicinterface.Create;
import com.mmc.oms.common.publicinterface.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Author LW
* @date 2023/8/8 10:48
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class LeasePriceStockVO implements Serializable {
private static final long serialVersionUID = 1011141620995647903L;
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "商品规格", example = "示例:{\"颜色\":\"蓝色\",\"尺寸\":\"1寸\",\"大小\":\"小\"} 或 [\"颜色\":\"蓝色\",\"尺寸\":\"1寸\",\"大小\":\"小\"] 或 你怎么方便怎么来")
@NotEmpty(message = "商品规格不能为空", groups = {Update.class, Create.class})
private String productSpec;
@ApiModelProperty(value = "押金", example = "1")
private BigDecimal cashPledge;
@ApiModelProperty(value = "3天租金", example = "1")
private BigDecimal threeDaysRental;
@ApiModelProperty(value = "7天租金", example = "1")
private BigDecimal sevenDaysRental;
@ApiModelProperty(value = "30天租金", example = "1")
private BigDecimal thirtyDaysRental;
@ApiModelProperty(value = "90天租金", example = "1")
private BigDecimal ninetyDaysRental;
@ApiModelProperty(value = "180天租金", example = "1")
private BigDecimal maxDaysRental;
@ApiModelProperty(value = "sku图片", example = "https://pad-video-x.oss-cn-shenzhen.aliyuncs.com/file/35bbd044-7cd7-4c85-ba27-69776e03dbb2.jpg")
private String skuImage;
@ApiModelProperty(value = "库存", example = "10")
@Max(message = "最大不能超过9999", groups = {Update.class, Create.class}, value = 9999)
private Integer stock;
@ApiModelProperty(value = "是否缺货 0:否 1:是")
private Integer stockOut;
}
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.vo.lease.AddLeaseOrderVO;
/**
* @Author LW
* @date 2023/9/21 16:38
* 概要:
*/
public interface LeaseOrderService {
ResultBody<LeaseOrderDTO> addLeaseOrder(AddLeaseOrderVO param, BaseAccountDTO currentAccount);
}
package com.mmc.oms.service.lease.impl;
import com.mmc.oms.common.ResultEnum;
import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.common.util.CodeUtil;
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.mall.UserAddressDO;
import com.mmc.oms.enums.LeaseOrderStatus;
import com.mmc.oms.enums.LeaseTermInfo;
import com.mmc.oms.feign.PmsAppApi;
import com.mmc.oms.feign.UserAppApi;
import com.mmc.oms.model.dto.lease.LeaseOrderDTO;
import com.mmc.oms.model.dto.uav.PayWalletDTO;
import com.mmc.oms.model.dto.user.BaseAccountDTO;
import com.mmc.oms.model.vo.lease.AddLeaseOrderVO;
import com.mmc.oms.model.vo.lease.LeaseGoodsVO;
import com.mmc.oms.model.vo.lease.LeasePriceStockVO;
import com.mmc.oms.model.vo.uav.GoodsResourcesVO;
import com.mmc.oms.service.lease.LeaseOrderService;
import com.mmc.oms.service.uav.UavOrderService;
import com.mmc.oms.util.TDateUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Author LW
* @date 2023/9/21 16:46
* 概要:
*/
@Service
@Slf4j
public class LeaseOrderServiceImpl implements LeaseOrderService {
@Resource
private PmsAppApi pmsAppApi;
@Resource
private UavOrderService uavOrderService;
@Resource
private LeaseOrderDao leaseOrderDao;
@Resource
private UserAddressDao userAddressDao;
@Resource
private UserAppApi userAppApi;
@Override
@Transactional
public ResultBody addLeaseOrder(AddLeaseOrderVO param, BaseAccountDTO currentAccount) {
log.info("user:{},addOrder param:{}", currentAccount.getUserAccountId(), param);
if (StringUtils.isEmpty(param.getSku())) {
return ResultBody.error("至少选择一个规格!");
}
if (param.getWareNum() <= 0) {
return ResultBody.error("购买数量不得少于1");
}
LeaseGoodsVO leaseGoodsVO = null;
LeasePriceStockVO priceStock = null;
try {
leaseGoodsVO = pmsAppApi.leaseGoodsDetails(param.getLeaseGoodsId()).getResult();
// 检验商品是否在卖
if (leaseGoodsVO == null || !leaseGoodsVO.getShelfStatus().equals(1)) {
return ResultBody.error("商品已下架");
}
// 判断租赁时间是否超出当前商品的最长租期或小于最短租期
int distanceDays = TDateUtil.distanceDays(param.getStartDate(), param.getEndDate());
param.setLeaseTerm(distanceDays);
// 获取租赁商品的最低租期
Integer minLeaseTerm = getLeaseTerm(leaseGoodsVO.getMinLeaseTerm());
// 获取租赁商品的最大租期
Integer maxLeaseTerm = getLeaseTerm(leaseGoodsVO.getMaxLeaseTerm());
if (distanceDays < minLeaseTerm || distanceDays > maxLeaseTerm) {
return ResultBody.error("商品信息发生变更,刷新后重试!");
}
// 判断该租期在那个价格区间
Integer priceSection = getPriceSection(distanceDays);
// 找到对应的规格
boolean flag = false;
for (LeasePriceStockVO priceStockVO : leaseGoodsVO.getPriceStock()) {
if (param.getSku().equals(priceStockVO.getProductSpec())) {
priceStock = priceStockVO;
// 获取最新的规格单价
param.setUnitPrice(getUnitPrice(priceSection, priceStockVO));
param.setDeposit(priceStockVO.getCashPledge());
flag = true;
break;
}
}
if (!flag) {
return ResultBody.error("选择规格不存在");
}
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResultBody.error(e.getMessage());
}
String orderNo = CodeUtil.generateOrderId();
// 计算订单总金额
BigDecimal orderTotalAmount = param.getUnitPrice().multiply(BigDecimal.valueOf(param.getLeaseTerm()))
.multiply(BigDecimal.valueOf(param.getWareNum())).add(param.getDeposit().multiply(BigDecimal.valueOf(param.getWareNum())));
BigDecimal otherAmount = BigDecimal.ZERO;
otherAmount = otherAmount.add(orderTotalAmount);
// 判断云享金或余额是否够抵扣
// 校验云享金、钱包余额是否足够抵扣
BigDecimal shareAmount = BigDecimal.ZERO;
BigDecimal salaryAmount = BigDecimal.ZERO;
Integer statusCode = null;
// 获取用户钱包信息
ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken());
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null) {
return payResInfo;
}
PayWalletDTO payWalletDTO = payResInfo.getResult();
if (param.getDeductShareAmount().equals(1)) {
if (otherAmount.compareTo(payWalletDTO.getCashAmt()) >= 0) {
// 抵扣云享金小于等于订单总额时,直接使用云享金
shareAmount = payWalletDTO.getCashAmt();
} else {
// 余额超过订单金额时,订单总额使用余额支付
shareAmount = otherAmount;
}
}
otherAmount = otherAmount.subtract(shareAmount);
// 支付完成
if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
statusCode = LeaseOrderStatus.PAID.getCode();
} else {
if (param.getDeductSalaryAmount().equals(1)) {
if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) >= 0) {
// 抵扣余额小于等于订单总额时,直接使用余额
salaryAmount = payWalletDTO.getSalaryAmt();
} else {
// 余额超过订单金额时,订单总额使用余额支付
salaryAmount = otherAmount;
}
}
otherAmount = otherAmount.subtract(salaryAmount);
if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
statusCode = LeaseOrderStatus.PAID.getCode();
}
}
// 抵扣余额
uavOrderService.deductWallet(shareAmount, salaryAmount, currentAccount);
// 获取商品主图
String url = null;
for (GoodsResourcesVO goodsResourcesVO : leaseGoodsVO.getResourcesList()) {
if (goodsResourcesVO.getType().equals(0)) {
url = goodsResourcesVO.getUrl();
break;
}
}
// 添加总订单表
LeaseOrderDO leaseOrderDO = new LeaseOrderDO();
leaseOrderDO.setOrderNo(orderNo);
leaseOrderDO.setOrderTotalAmount(orderTotalAmount);
leaseOrderDO.setStatusCode(otherAmount.compareTo(BigDecimal.ZERO) > 0 ? LeaseOrderStatus.PLACED_AN_ORDER.getCode() : statusCode);
leaseOrderDO.setUserAccountId(currentAccount.getUserAccountId());
leaseOrderDO.setLeaseGoodsId(param.getLeaseGoodsId());
leaseOrderDO.setCompanyName(param.getCompanyName());
leaseOrderDO.setThirdBackUserAccountId(param.getThirdBackUserAccountId());
leaseOrderDO.setOrderName(leaseGoodsVO.getTradeName());
if (priceStock.getSkuImage() != null) {
leaseOrderDO.setSkuImg(priceStock.getSkuImage());
} else {
leaseOrderDO.setSkuImg(url);
}
leaseOrderDO.setSalaryAmount(salaryAmount);
leaseOrderDO.setSku(param.getSku());
leaseOrderDO.setShareAmount(shareAmount);
leaseOrderDO.setOtherAmount(otherAmount);
leaseOrderDO.setUserAddressId(param.getUserAddressId());
leaseOrderDO.setUserRemark(param.getUserRemark());
leaseOrderDO.setUnitPrice(param.getUnitPrice());
leaseOrderDO.setWareNum(param.getWareNum());
leaseOrderDO.setDeposit(param.getDeposit());
leaseOrderDO.setStartDate(param.getStartDate());
if (null != statusCode && statusCode.equals(LeaseOrderStatus.PAID.getCode())) {
leaseOrderDO.setPayTime(new Date());
}
leaseOrderDO.setEndDate(param.getEndDate());
leaseOrderDao.addOrder(leaseOrderDO);
// 添加收货地址
UserAddressDO userAddressDO = userAddressDao.selectById(param.getUserAddressId());
LeaseOrderExpressDO leaseOrderExpressDO = new LeaseOrderExpressDO(userAddressDO);
leaseOrderExpressDO.setLeaseOrderId(leaseOrderDO.getId());
leaseOrderDao.addAddress(leaseOrderExpressDO);
LeaseOrderDTO leaseOrderDTO = leaseOrderDO.buildLeaseOrderDTO();
leaseOrderDTO.setModeOfDeliveryInfo(leaseGoodsVO.getModeOfDeliveryInfo());
return ResultBody.success(leaseOrderDTO);
}
private Integer getLeaseTerm(Integer leaseTermId) {
if (leaseTermId.equals(LeaseTermInfo.THREE_DAY.getId())) {
return LeaseTermInfo.THREE_DAY.getDays();
} else if (leaseTermId.equals(LeaseTermInfo.SEVEN_DAY.getId())) {
return LeaseTermInfo.SEVEN_DAY.getDays();
} else if (leaseTermId.equals(LeaseTermInfo.THIRTY_DAY.getId())) {
return LeaseTermInfo.THIRTY_DAY.getDays();
} else if (leaseTermId.equals(LeaseTermInfo.NINETY_DAY.getId())) {
return LeaseTermInfo.NINETY_DAY.getDays();
} else {
return LeaseTermInfo.ONE_HUNDRED_AND_EIGHTY_DAY.getDays();
}
}
private BigDecimal getUnitPrice(Integer priceSection, LeasePriceStockVO priceStockVO) {
if (priceSection.equals(LeaseTermInfo.THREE_DAY.getDays())) {
return priceStockVO.getThreeDaysRental();
} else if (priceSection.equals(LeaseTermInfo.SEVEN_DAY.getDays())) {
return priceStockVO.getSevenDaysRental();
} else if (priceSection.equals(LeaseTermInfo.THIRTY_DAY.getDays())) {
return priceStockVO.getThirtyDaysRental();
} else if (priceSection.equals(LeaseTermInfo.NINETY_DAY.getDays())) {
return priceStockVO.getNinetyDaysRental();
} else {
return priceStockVO.getMaxDaysRental();
}
}
private Integer getPriceSection(int distanceDays) {
if (distanceDays >= LeaseTermInfo.THREE_DAY.getDays() && distanceDays < LeaseTermInfo.SEVEN_DAY.getDays()) {
return LeaseTermInfo.THREE_DAY.getDays();
} else if (distanceDays >= LeaseTermInfo.SEVEN_DAY.getDays() && distanceDays < LeaseTermInfo.THIRTY_DAY.getDays()) {
return LeaseTermInfo.SEVEN_DAY.getDays();
} else if (distanceDays >= LeaseTermInfo.THIRTY_DAY.getDays() && distanceDays < LeaseTermInfo.NINETY_DAY.getDays()) {
return LeaseTermInfo.THIRTY_DAY.getDays();
} else if (distanceDays >= LeaseTermInfo.NINETY_DAY.getDays() && distanceDays < LeaseTermInfo.ONE_HUNDRED_AND_EIGHTY_DAY.getDays()) {
return LeaseTermInfo.NINETY_DAY.getDays();
} else {
return LeaseTermInfo.ONE_HUNDRED_AND_EIGHTY_DAY.getDays();
}
}
}
package com.mmc.oms.service.uav; package com.mmc.oms.service.uav;
import com.mmc.oms.common.result.ResultBody; import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.model.dto.ContractInfoDTO;
import com.mmc.oms.model.dto.uav.UavCartCompanyDTO;
import com.mmc.oms.model.dto.uav.UavOrderDTO;
import com.mmc.oms.model.dto.user.BaseAccountDTO; import com.mmc.oms.model.dto.user.BaseAccountDTO;
import com.mmc.oms.model.qo.uav.UavOrderQO; import com.mmc.oms.model.qo.uav.UavOrderQO;
import com.mmc.oms.model.vo.uav.*; import com.mmc.oms.model.vo.uav.*;
import com.mmc.oms.model.vo.wallet.TopUpOrderVO; import com.mmc.oms.model.vo.wallet.TopUpOrderVO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.math.BigDecimal;
/** /**
* @author: zj * @author: zj
...@@ -54,4 +51,7 @@ public interface UavOrderService { ...@@ -54,4 +51,7 @@ public interface UavOrderService {
ResultBody removeUavOrder(Integer id); ResultBody removeUavOrder(Integer id);
ResultBody addOrderByCart(AddUavOrderByCartQO orderByCartQO, BaseAccountDTO currentAccount); ResultBody addOrderByCart(AddUavOrderByCartQO orderByCartQO, BaseAccountDTO currentAccount);
ResultBody deductWallet(BigDecimal allShareAmount, BigDecimal allSalaryAmount, BaseAccountDTO currentAccount);
} }
...@@ -86,14 +86,14 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -86,14 +86,14 @@ public class UavOrderServiceImpl implements UavOrderService {
@Transactional @Transactional
public ResultBody addOrder(AddUavOrderVO param, BaseAccountDTO currentAccount) { public ResultBody addOrder(AddUavOrderVO param, BaseAccountDTO currentAccount) {
log.info("user:{},addOrder param:{}", currentAccount.getUserAccountId(), param); log.info("user:{},addOrder param:{}", currentAccount.getUserAccountId(), param);
if (CollectionUtils.isEmpty(param.getSkuVOS())){ if (CollectionUtils.isEmpty(param.getSkuVOS())) {
return ResultBody.error("至少选择一个规格!"); return ResultBody.error("至少选择一个规格!");
} }
MallGoodsVO mallGoodsVO = null; MallGoodsVO mallGoodsVO = null;
try { try {
mallGoodsVO = pmsClient.mallGoodsDetails(param.getMallGoodsId()); mallGoodsVO = pmsClient.mallGoodsDetails(param.getMallGoodsId());
// 检验商品是否在卖 // 检验商品是否在卖
if (mallGoodsVO == null || !mallGoodsVO.getShelfStatus().equals(1)){ if (mallGoodsVO == null || !mallGoodsVO.getShelfStatus().equals(1)) {
return ResultBody.error("商品已下架"); return ResultBody.error("商品已下架");
} }
// 找到对应的规格 // 找到对应的规格
...@@ -107,11 +107,11 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -107,11 +107,11 @@ public class UavOrderServiceImpl implements UavOrderService {
break; break;
} }
} }
if (!flag){ if (!flag) {
return ResultBody.error("选择规格不存在"); return ResultBody.error("选择规格不存在");
} }
} }
}catch (Exception e){ } catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
e.printStackTrace(); e.printStackTrace();
} }
...@@ -129,31 +129,31 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -129,31 +129,31 @@ public class UavOrderServiceImpl implements UavOrderService {
BigDecimal salaryAmount = BigDecimal.ZERO; BigDecimal salaryAmount = BigDecimal.ZERO;
Integer statusCode = null; Integer statusCode = null;
// 正常订单可以抵扣云享金和余额、意向订单不能扣 // 正常订单可以抵扣云享金和余额、意向订单不能扣
if (param.getOrderType().equals(UavOrderType.PAY.getCode())){ if (param.getOrderType().equals(UavOrderType.PAY.getCode())) {
ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken()); ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken());
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null){ if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null) {
return payResInfo; return payResInfo;
} }
PayWalletDTO payWalletDTO = payResInfo.getResult(); PayWalletDTO payWalletDTO = payResInfo.getResult();
if (param.getDeductShareAmount().equals(1)){ if (param.getDeductShareAmount().equals(1)) {
if (otherAmount.compareTo(payWalletDTO.getCashAmt()) >= 0) { if (otherAmount.compareTo(payWalletDTO.getCashAmt()) >= 0) {
// 抵扣云享金小于等于订单总额时,直接使用云享金 // 抵扣云享金小于等于订单总额时,直接使用云享金
shareAmount = payWalletDTO.getCashAmt(); shareAmount = payWalletDTO.getCashAmt();
}else { } else {
// 余额超过订单金额时,订单总额使用余额支付 // 余额超过订单金额时,订单总额使用余额支付
shareAmount = otherAmount; shareAmount = otherAmount;
} }
} }
otherAmount = otherAmount.subtract(shareAmount); otherAmount = otherAmount.subtract(shareAmount);
// 支付完成 // 支付完成
if (otherAmount.compareTo(BigDecimal.ZERO) == 0 ){ if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode(); statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode();
}else { } else {
if (param.getDeductSalaryAmount().equals(1)){ if (param.getDeductSalaryAmount().equals(1)) {
if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) >= 0) { if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) >= 0) {
// 抵扣余额小于等于订单总额时,直接使用余额 // 抵扣余额小于等于订单总额时,直接使用余额
salaryAmount = payWalletDTO.getSalaryAmt(); salaryAmount = payWalletDTO.getSalaryAmt();
}else { } else {
// 余额超过订单金额时,订单总额使用余额支付 // 余额超过订单金额时,订单总额使用余额支付
salaryAmount = otherAmount; salaryAmount = otherAmount;
} }
...@@ -171,9 +171,9 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -171,9 +171,9 @@ public class UavOrderServiceImpl implements UavOrderService {
uavOrderDO.setOrderNo(orderNo); uavOrderDO.setOrderNo(orderNo);
uavOrderDO.setOrderTotalAmount(orderTotalAmount); uavOrderDO.setOrderTotalAmount(orderTotalAmount);
uavOrderDO.setOrderType(param.getOrderType()); uavOrderDO.setOrderType(param.getOrderType());
if (param.getOrderType().equals(UavOrderType.PAY.getCode())){ if (param.getOrderType().equals(UavOrderType.PAY.getCode())) {
uavOrderDO.setStatusCode(otherAmount.compareTo(BigDecimal.ZERO) > 0 ? UavOrderStatus.PAYING.getCode() : statusCode); uavOrderDO.setStatusCode(otherAmount.compareTo(BigDecimal.ZERO) > 0 ? UavOrderStatus.PAYING.getCode() : statusCode);
}else { } else {
uavOrderDO.setStatusCode(UavOrderStatus.CONFIRM.getCode()); uavOrderDO.setStatusCode(UavOrderStatus.CONFIRM.getCode());
} }
uavOrderDO.setUserAccountId(currentAccount.getUserAccountId()); uavOrderDO.setUserAccountId(currentAccount.getUserAccountId());
...@@ -224,7 +224,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -224,7 +224,7 @@ public class UavOrderServiceImpl implements UavOrderService {
List<UavOrderPayDTO> collect = payDOS.stream().map(UavOrderPayDO::buildUavOrderPayDTO).collect(Collectors.toList()); List<UavOrderPayDTO> collect = payDOS.stream().map(UavOrderPayDO::buildUavOrderPayDTO).collect(Collectors.toList());
uavOrderDTO.setPayDTOList(collect); uavOrderDTO.setPayDTOList(collect);
} }
List<UavOrderSkuDO> skuDOS =uavOrderDao.listUavOrderSkuDO(id); List<UavOrderSkuDO> skuDOS = uavOrderDao.listUavOrderSkuDO(id);
if (CollectionUtils.isNotEmpty(skuDOS)) { if (CollectionUtils.isNotEmpty(skuDOS)) {
List<UavOrderSkuDTO> uavOrderSkuDTOS = skuDOS.stream().map(UavOrderSkuDO::buildUavOrderSkuDTO).collect(Collectors.toList()); List<UavOrderSkuDTO> uavOrderSkuDTOS = skuDOS.stream().map(UavOrderSkuDO::buildUavOrderSkuDTO).collect(Collectors.toList());
uavOrderDTO.setSkuDTOList(uavOrderSkuDTOS); uavOrderDTO.setSkuDTOList(uavOrderSkuDTOS);
...@@ -282,7 +282,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -282,7 +282,7 @@ public class UavOrderServiceImpl implements UavOrderService {
payUavWalletVO.setOrderStatus(1400); payUavWalletVO.setOrderStatus(1400);
payUavWalletVO.setUserAccountId(uavOrderDO.getUserAccountId()); payUavWalletVO.setUserAccountId(uavOrderDO.getUserAccountId());
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, token); ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, token);
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){ if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return resultBody; return resultBody;
} }
} }
...@@ -306,7 +306,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -306,7 +306,7 @@ public class UavOrderServiceImpl implements UavOrderService {
@Override @Override
public ResultBody list(UavOrderQO uavOrderQO, BaseAccountDTO currentAccount) { public ResultBody list(UavOrderQO uavOrderQO, BaseAccountDTO currentAccount) {
if (!currentAccount.getRoleInfo().getSuperAdmin().equals(1)){ if (!currentAccount.getRoleInfo().getSuperAdmin().equals(1)) {
uavOrderQO.setThirdBackUserAccountId(currentAccount.getUserAccountId()); uavOrderQO.setThirdBackUserAccountId(currentAccount.getUserAccountId());
uavOrderQO.setOrderType(UavOrderType.PAY.getCode()); uavOrderQO.setOrderType(UavOrderType.PAY.getCode());
} }
...@@ -461,7 +461,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -461,7 +461,7 @@ public class UavOrderServiceImpl implements UavOrderService {
} }
@Transactional @Transactional
public void updateUavOrderStatus(Integer id, UavOrderStatus uavOrderStatus){ public void updateUavOrderStatus(Integer id, UavOrderStatus uavOrderStatus) {
uavOrderDao.updateUavOrderStatus(id, uavOrderStatus.getNextCode()); uavOrderDao.updateUavOrderStatus(id, uavOrderStatus.getNextCode());
} }
...@@ -502,7 +502,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -502,7 +502,7 @@ public class UavOrderServiceImpl implements UavOrderService {
UavOrderPayDO beforeUavOrderPayDO = uavOrderDao.getUavOrderPayById(uavOrderPayVO.getId()); UavOrderPayDO beforeUavOrderPayDO = uavOrderDao.getUavOrderPayById(uavOrderPayVO.getId());
// 一个订单可能会多次上传付款凭证,因此单独审核 // 一个订单可能会多次上传付款凭证,因此单独审核
UavOrderDO uavOrderDO = uavOrderDao.detail(beforeUavOrderPayDO.getUavOrderId()); UavOrderDO uavOrderDO = uavOrderDao.detail(beforeUavOrderPayDO.getUavOrderId());
if (uavOrderPayVO.getCheckStatus().equals(1)){ if (uavOrderPayVO.getCheckStatus().equals(1)) {
// 第一次审核通过,则要把订单状态改为待发货;意向订单还要生成采购订单 // 第一次审核通过,则要把订单状态改为待发货;意向订单还要生成采购订单
if (uavOrderDO.getStatusCode().equals(UavOrderStatus.FINISH_PAYING.getCode())) { if (uavOrderDO.getStatusCode().equals(UavOrderStatus.FINISH_PAYING.getCode())) {
this.updateUavOrderStatus(beforeUavOrderPayDO.getUavOrderId(), UavOrderStatus.FINISH_PAYING); this.updateUavOrderStatus(beforeUavOrderPayDO.getUavOrderId(), UavOrderStatus.FINISH_PAYING);
...@@ -516,7 +516,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -516,7 +516,7 @@ public class UavOrderServiceImpl implements UavOrderService {
uavPurchaseOrderDO.setStatusCode(UavOrderStatus.CONFIRM.getCode()); uavPurchaseOrderDO.setStatusCode(UavOrderStatus.CONFIRM.getCode());
uavPODao.addPurchaseOrder(uavPurchaseOrderDO); uavPODao.addPurchaseOrder(uavPurchaseOrderDO);
} }
}else { } else {
if (uavOrderDO.getStatusCode().equals(UavOrderStatus.FINISH_PAYING.getCode())) { if (uavOrderDO.getStatusCode().equals(UavOrderStatus.FINISH_PAYING.getCode())) {
// 第一次未通过,需要走回上一步 // 第一次未通过,需要走回上一步
this.updateUavOrderStatus(beforeUavOrderPayDO.getUavOrderId(), UavOrderStatus.SIGN); this.updateUavOrderStatus(beforeUavOrderPayDO.getUavOrderId(), UavOrderStatus.SIGN);
...@@ -569,7 +569,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -569,7 +569,7 @@ public class UavOrderServiceImpl implements UavOrderService {
if (uavOrderDO.getOrderType().equals(UavOrderType.SIGN.getCode())) { if (uavOrderDO.getOrderType().equals(UavOrderType.SIGN.getCode())) {
ResultBody<PayWalletDTO> payResInfo = userAppApi.getPayWalletInfo(uavOrderDO.getUserAccountId(), currentAccount.getToken()); ResultBody<PayWalletDTO> payResInfo = userAppApi.getPayWalletInfo(uavOrderDO.getUserAccountId(), currentAccount.getToken());
PayWalletDTO payWalletDTO = payResInfo.getResult(); PayWalletDTO payWalletDTO = payResInfo.getResult();
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payWalletDTO == null){ if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payWalletDTO == null) {
return payResInfo; return payResInfo;
} }
// 要扣除的云享金 // 要扣除的云享金
...@@ -581,11 +581,11 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -581,11 +581,11 @@ public class UavOrderServiceImpl implements UavOrderService {
// 根据订单总额确认扣除多少云享金 // 根据订单总额确认扣除多少云享金
if (uavOrderVO.getOrderTotalAmount().compareTo(payWalletDTO.getCashAmt()) >= 0) { if (uavOrderVO.getOrderTotalAmount().compareTo(payWalletDTO.getCashAmt()) >= 0) {
shareAmount = payWalletDTO.getCashAmt(); shareAmount = payWalletDTO.getCashAmt();
}else { } else {
shareAmount = uavOrderVO.getOrderTotalAmount(); shareAmount = uavOrderVO.getOrderTotalAmount();
} }
// 抵扣 // 抵扣
if (shareAmount.compareTo(BigDecimal.ZERO) > 0 ) { if (shareAmount.compareTo(BigDecimal.ZERO) > 0) {
PayUavWalletVO payUavWalletVO = new PayUavWalletVO(); PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setUserAccountId(uavOrderDO.getUserAccountId()); payUavWalletVO.setUserAccountId(uavOrderDO.getUserAccountId());
payUavWalletVO.setCashAmount(shareAmount); payUavWalletVO.setCashAmount(shareAmount);
...@@ -594,7 +594,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -594,7 +594,7 @@ public class UavOrderServiceImpl implements UavOrderService {
payUavWalletVO.setOrderStatus(100); payUavWalletVO.setOrderStatus(100);
payUavWalletVO.setRemark("商城确认订单抵扣"); payUavWalletVO.setRemark("商城确认订单抵扣");
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken()); ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){ if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return resultBody; return resultBody;
} }
} }
...@@ -660,16 +660,16 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -660,16 +660,16 @@ public class UavOrderServiceImpl implements UavOrderService {
return ResultBody.error("意向订单仅限下单个商家的商品"); return ResultBody.error("意向订单仅限下单个商家的商品");
} }
// 正常订单可以抵扣云享金和余额、意向订单不能扣 // 正常订单可以抵扣云享金和余额、意向订单不能扣
if (orderByCartQO.getOrderType().equals(UavOrderType.PAY.getCode())){ if (orderByCartQO.getOrderType().equals(UavOrderType.PAY.getCode())) {
}else { } else {
} }
// 购物车id // 购物车id
List<Integer> cartIds = new ArrayList<>(); List<Integer> cartIds = new ArrayList<>();
// 云享金、余额扣除相关 // 云享金、余额扣除相关
ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken()); ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken());
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null){ if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null) {
return payResInfo; return payResInfo;
} }
PayWalletDTO payWalletDTO = payResInfo.getResult(); PayWalletDTO payWalletDTO = payResInfo.getResult();
...@@ -705,7 +705,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -705,7 +705,7 @@ public class UavOrderServiceImpl implements UavOrderService {
if (companyDTO.getDeductShareAmount().equals(1) && payWalletDTO.getCashAmt().compareTo(BigDecimal.ZERO) > 0) { if (companyDTO.getDeductShareAmount().equals(1) && payWalletDTO.getCashAmt().compareTo(BigDecimal.ZERO) > 0) {
if (payWalletDTO.getCashAmt().compareTo(otherAmount) > 0) { if (payWalletDTO.getCashAmt().compareTo(otherAmount) > 0) {
shareAmount = shareAmount.add(otherAmount); shareAmount = shareAmount.add(otherAmount);
}else { } else {
shareAmount = shareAmount.add(payWalletDTO.getCashAmt()); shareAmount = shareAmount.add(payWalletDTO.getCashAmt());
} }
otherAmount = otherAmount.subtract(shareAmount); otherAmount = otherAmount.subtract(shareAmount);
...@@ -717,7 +717,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -717,7 +717,7 @@ public class UavOrderServiceImpl implements UavOrderService {
&& otherAmount.compareTo(BigDecimal.ZERO) > 0) { && otherAmount.compareTo(BigDecimal.ZERO) > 0) {
if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) > 0) { if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) > 0) {
salaryAmount = salaryAmount.add(payWalletDTO.getSalaryAmt()); salaryAmount = salaryAmount.add(payWalletDTO.getSalaryAmt());
}else { } else {
salaryAmount = salaryAmount.add(otherAmount); salaryAmount = salaryAmount.add(otherAmount);
} }
otherAmount = otherAmount.subtract(salaryAmount); otherAmount = otherAmount.subtract(salaryAmount);
...@@ -726,7 +726,7 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -726,7 +726,7 @@ public class UavOrderServiceImpl implements UavOrderService {
} }
if (otherAmount.compareTo(BigDecimal.ZERO) == 0) { if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode(); statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode();
}else { } else {
statusCode = UavOrderStatus.PAYING.getCode(); statusCode = UavOrderStatus.PAYING.getCode();
} }
// 设置订单状态 // 设置订单状态
...@@ -775,7 +775,8 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -775,7 +775,8 @@ public class UavOrderServiceImpl implements UavOrderService {
return ResultBody.success(); return ResultBody.success();
} }
public ResultBody deductWallet(BigDecimal allShareAmount, BigDecimal allSalaryAmount, BaseAccountDTO currentAccount){ @Override
public ResultBody deductWallet(BigDecimal allShareAmount, BigDecimal allSalaryAmount, BaseAccountDTO currentAccount) {
PayUavWalletVO payUavWalletVO = new PayUavWalletVO(); PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setCashAmount(allShareAmount); payUavWalletVO.setCashAmount(allShareAmount);
payUavWalletVO.setSalaryAmount(allSalaryAmount); payUavWalletVO.setSalaryAmount(allSalaryAmount);
...@@ -783,8 +784,8 @@ public class UavOrderServiceImpl implements UavOrderService { ...@@ -783,8 +784,8 @@ public class UavOrderServiceImpl implements UavOrderService {
payUavWalletVO.setUserAccountId(currentAccount.getUserAccountId()); payUavWalletVO.setUserAccountId(currentAccount.getUserAccountId());
if (allShareAmount.compareTo(BigDecimal.ZERO) > 0 || allSalaryAmount.compareTo(BigDecimal.ZERO) > 0) { if (allShareAmount.compareTo(BigDecimal.ZERO) > 0 || allSalaryAmount.compareTo(BigDecimal.ZERO) > 0) {
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken()); ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){ if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
throw new RuntimeException("余额抵扣失败!"); ResultBody.error("余额抵扣失败!");
} }
} }
return ResultBody.success(); return ResultBody.success();
......
package com.mmc.oms.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author 作者 geDuo
* @version 创建时间:2021年7月17日 下午5:28:19
* @explain 日期时间工具类
*/
public class TDateUtil {
public static final String ONE_WEEK = "oneweek";
public static final String ONE_MONTH = "onemonth";
public static final String THREE_MONTH = "threemonth";
public static final String SIX_MONTH = "sixmonth";
public static final String ONE_YEAR = "oneyear";
public static String getCurrentDate() {
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm");// 设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
return date;
}
public static String getCurrentDateByType(String format) {
SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
return date;
}
public static String getCurrentDateMidd() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
return date;
}
public static Date getDate(String str, String format) {
Date date = null;
try {
SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
// String dates=df.format(new Date());// new Date()为获取当前系统时间
date = df.parse(str);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* date类型转字符串
*/
public static String getDateStr(Date date, String type) {
SimpleDateFormat format = new SimpleDateFormat(type);
String s = format.format(date);
return s;
}
/**
* 根据日期获得随机数
*/
public static Integer getDateRandom(Date date, String format, int count) {
String code = "";
for (int i = 0; i < count; i++) {
code = code + (int) (Math.random() * 9);
}
code = TDateUtil.getDateStr(date, format) + code;
return Integer.parseInt(code);
}
/**
* 10位数的秒转日期字符
*
* @param mss
* @return
*/
public static Date dateFromSecond(long sceondTime) {
return new Date(sceondTime * 1000);
}
/**
* 10位数的秒转日期字符
*
* @param mss
* @return
*/
public static String dateFromSecondStr(long sceondTime) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(sceondTime * 1000));
}
/**
* 秒转时分秒
*
* @param secondTime
* @return
*/
public static String hmsFromSecond(Integer secondTime) {
Integer hour = secondTime / 60 / 60;
Integer minutes = secondTime / 60 % 60;
Integer remainingSeconds = secondTime % 60;
return (hour + "h" + minutes + "min" + remainingSeconds + "s");
}
public static String hmsFromSecondFormat(long secondTime) {
long day = secondTime / 60 / 60 / 24;
long hour = secondTime / 60 / 60 % 24;
long minutes = secondTime / 60 % 60;
long remainingSeconds = secondTime % 60;
if (day > 0) {
return (day + "天" + hour + "小时" + minutes + "分" + remainingSeconds + "秒");
}
return (hour + "小时" + minutes + "分" + remainingSeconds + "秒");
}
/**
* 两个日期的相差秒数
*
* @param maxDate
* @param minDate
* @return
*/
public static long calLastedTime(Date maxDate, Date minDate) {
long a = maxDate.getTime();
long b = minDate.getTime();
long c = (a - b) / 1000;
return c;
}
/**
* 获取某个月的月底最后一天的时间
*/
public static Date getMonthLatestDay(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String last = format.format(ca.getTime());
Date dates = getDate(last, "yyyy-MM-dd");
return dates;
}
/**
* 某个时间 加N天
*/
public static Date nextNumDay(Date d, int num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
Date now = d;
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.DAY_OF_MONTH, num);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* 某天个时间加 N 小时
*
* @param now
* @param num
* @return
*/
public static Date addHourTime(Date now, int num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.HOUR, num);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd HH:mm:ss");
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* 某个时间加n个月加n天(负数为减)
*/
@SuppressWarnings("static-access")
public static Date getMonthNDayN(Date date, int month, int day) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date news = null;
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, month);
calendar.add(calendar.DATE, day);
String last = format.format(calendar.getTime());
news = getDate(last, "yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
}
return news;
}
/**
* 时间戳-计算小时
*/
public static long getDistanceTime(long time1, long time2) {
long diff = 0;
long day = 0;
long hour = 0;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
day = diff / (24 * 60 * 60 * 1000);
hour = (diff / (60 * 60 * 1000) - day * 24);
return hour;
}
/**
* 两个时间之间相差距离多少天
*
* @param one 时间参数 1:
* @param two 时间参数 2:
* @return 相差天数
*/
public static int distanceDays(Date one, Date two) {
int days = 0;
long time1 = one.getTime();
long time2 = two.getTime();
long diff;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
days = new Long(diff / (1000 * 60 * 60 * 24)).intValue();
return days;
}
public static Date nextNumDateTime(Date d, int num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
Date now = d;
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.DAY_OF_MONTH, num);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd HH:mm:ss");
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static String createYearWeek(String startStr, String endStr) {
if (startStr == null || "".equals(startStr) || endStr == null || "".equals(endStr)) {
return "起止日期不能为空";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start = null;
Date end = null;
Date startDate;
Date endDate;
int dayOfWeek;
boolean goOn = true;
int no = 0;
try {
start = sdf.parse(startStr);
end = sdf.parse(endStr);
} catch (ParseException e) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
try {
start = simpleDateFormat.parse(startStr);
end = simpleDateFormat.parse(endStr);
} catch (ParseException pe) {
pe.printStackTrace();
}
}
if (start.compareTo(end) > -1) {
return "结束日期必须大于开始日期";
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(start);
dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
List<Map<String, String>> weekList = new ArrayList<>();
if (dayOfWeek > 1 && dayOfWeek < 7) {
do {
startDate = start;
calendar.add(Calendar.DATE, (8 - dayOfWeek));
endDate = calendar.getTime();
no += 1;
Map<String, String> map = new HashMap<>();
map.put("startOfWeek", sdf.format(startDate));
map.put("weekNo", no + "");
if (endDate.compareTo(end) < 0) {
map.put("endOfWeek", sdf.format(endDate));
weekList.add(map);
calendar.add(Calendar.DATE, 1);
start = calendar.getTime();
dayOfWeek = 2;
} else {
map.put("endOfWeek", sdf.format(end));
weekList.add(map);
goOn = false;
}
} while (goOn);
} else {
no += 1;
startDate = start;
if (dayOfWeek == 1) {
endDate = start;
} else {
calendar.add(Calendar.DATE, 1);
endDate = calendar.getTime();
}
Map<String, String> map = new HashMap<>();
map.put("startOfWeek", sdf.format(startDate));
map.put("endOfWeek", sdf.format(endDate));
map.put("weekNo", no + "");
weekList.add(map);
calendar.add(Calendar.DATE, 1);
start = calendar.getTime();
do {
startDate = start;
calendar.add(Calendar.DATE, 6);
endDate = calendar.getTime();
no += 1;
map = new HashMap<>();
map.put("startOfWeek", sdf.format(startDate));
map.put("weekNo", no + "");
if (endDate.compareTo(end) < 0) {
map.put("endOfWeek", sdf.format(endDate));
weekList.add(map);
calendar.add(Calendar.DATE, 1);
start = calendar.getTime();
} else {
map.put("endOfWeek", sdf.format(end));
weekList.add(map);
goOn = false;
}
} while (goOn);
}
return weekList.toString();
}
/**
* 获取起止日期
*
* @param sdf 需要显示的日期格式
* @param date 需要参照的日期
* @param n 最近n周
* @param option 0 开始日期;1 结束日期
* @param k 0 包含本周 1 不包含本周
* @return
*/
public static String getFromToDate(SimpleDateFormat sdf, Date date, int n, int option, int k) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int offset = 0 == option ? 1 - dayOfWeek : 7 - dayOfWeek;
int amount = 0 == option ? offset - (n - 1 + k) * 7 : offset - k * 7;
calendar.add(Calendar.DATE, amount);
return sdf.format(calendar.getTime());
}
/**
* 根据当前日期获得最近n周的日期区间(包含本周)
*
* @param n
* @param sdf
* @return
*/
public static String getNWeekTimeInterval(int n, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);// 设置日期格式
String beginDate = getFromToDate(sdf, new Date(), n, 0, 0);
String endDate = getFromToDate(sdf, new Date(), n, 1, 0);
return beginDate + "," + endDate;
}
/**
* 根据当前日期获得最近n周的日期区间(不包含本周)
*
* @param n
* @param sdf
* @return
*/
public static String getNWeekTimeIntervalTwo(int n, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);// 设置日期格式
String beginDate = getFromToDate(sdf, new Date(), n, 0, 1);
String endDate = getFromToDate(sdf, new Date(), n, 1, 1);
return beginDate + "," + endDate;
}
/**
* 根据当前日期获得本周的日期区间(本周周一和周日日期)
*
* @param sdf
* @return
*/
public static String getThisWeekTimeInterval(String format) {
return getNWeekTimeInterval(1, format);
}
/**
* 根据当前日期获得上周的日期区间(上周周一和周日日期)
*
* @param sdf
* @return
*/
public static String getLastWeekTimeInterval(String format) {
return getNWeekTimeIntervalTwo(1, format);
}
/**
* 获取某个日期最近一个的星期日
*
* @return
*/
public static Date getLatestWeekend(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
Date endDate = TDateUtil.nextNumDay(date, w * -1);
return endDate;
}
/**
* 获取N周的星期一的日期(正加负减)
*
* @param date
* @return
*/
public static Date getMinMonday(Date date, int weekNum) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
Date endDate = TDateUtil.nextNumDay(date, w * -1);
Date startDate = TDateUtil.nextNumDay(endDate, (weekNum * 7) + 1);
return startDate;
}
/**
* 获取某个月加几个月后一号的日期
*/
@SuppressWarnings("static-access")
public static Date getAddMonThDay(Date date, int i) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(calendar.MONTH, i);
calendar.set(Calendar.DAY_OF_MONTH, 1);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd");
return date;
}
/**
* 某个月最后一天
*/
public static Date getAnyMonthLastDay(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String last = format.format(ca.getTime());
date = getDate(last, "yyyy-MM-dd");
return date;
}
public static Date getDate(Date date, String type) {
SimpleDateFormat format = new SimpleDateFormat(type);
String s = format.format(date);
return getDate(s, type);
}
/**
* 获取去年今天的日期
*/
public static Date getLastYearTodayDate() {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.YEAR, -1);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String s = format.format(instance.getTime());
return getDate(s, "yyyy-MM-dd");
}
/**
* 获取昨天的日期
*
* @param type
* @return
*/
public static String getYesterdayDateByType(String type) {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.DAY_OF_MONTH, -1);
Date time = instance.getTime();
SimpleDateFormat format = new SimpleDateFormat(type);
return format.format(time);
}
/**
* 判断两个时间是不是在同一个月
*/
public static boolean isSameMonth(Date date1, Date date2) {
Calendar c = Calendar.getInstance();
c.setTime(date1);
int month1 = c.get(Calendar.MONTH);
c.setTime(date2);
int month2 = c.get(Calendar.MONTH);
if (month1 == month2) {
return true;
}
return false;
}
/**
* 间隔天数
*
* @param startTime
* @param endTime
* @return
*/
public static int isolateDayNum(String startTime, String endTime) {
Date startDate = getDate(startTime, "yyyy-MM-dd");
Date endDate = getDate(endTime, "yyyy-MM-dd");
long differentMillis = endDate.getTime() - startDate.getTime();
long dayNum = differentMillis / (1000 * 60 * 60 * 24);
return (int) dayNum;
}
/**
* 获取某月最后一天的时间
*
* @param yearMonth
* @return
*/
public static String getLastDateTimeOfMonth(String yearMonth) {
SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar instance = Calendar.getInstance();
try {
Date parse = format0.parse(yearMonth);
instance.setTime(parse);
instance.set(Calendar.DAY_OF_MONTH, instance.getActualMaximum(Calendar.DAY_OF_MONTH));
instance.set(Calendar.HOUR_OF_DAY, 23);
instance.set(Calendar.MINUTE, 59);
instance.set(Calendar.SECOND, 59);
String format = format1.format(instance.getTime());
return format;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Date getStrToDate(String str) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date date = null;
try {
if (str == null) {
date = null;
} else {
date = dateFormat.parse(str);
}
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static int getStageByDate(Date date) {
Calendar instance = Calendar.getInstance();
instance.setTime(date);
//当前时间
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
String format = dateFormat.format(date);
try {
Date currentTime = dateFormat.parse(format);
Date parse1 = dateFormat.parse("05:00:00");
Date parse2 = dateFormat.parse("11:00:00");
Date parse3 = dateFormat.parse("17:00:00");
Date parse4 = dateFormat.parse("00:00:00");
//A:05:00-11:00 | B:11:00-17:00 | C:00:00-05:00,17:00-00:00
if (currentTime.after(parse4) && currentTime.before(parse1)) {
return 3;
} else if (currentTime.after(parse1) && currentTime.before(parse2)) {
return 1;
} else if (currentTime.after(parse2) && currentTime.before(parse3)) {
return 2;
} else if (currentTime.after(parse3) && currentTime.after(parse4)) {
return 4;
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public static String getCurrentYear() {
Calendar date = Calendar.getInstance();
String year = String.valueOf(date.get(Calendar.YEAR));
return year;
}
}
<?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.mmc.oms.dao.lease.LeaseOrderDao">
<insert id="addOrder" keyProperty="id" useGeneratedKeys="true"
parameterType="com.mmc.oms.entity.lease.LeaseOrderDO">
insert into lease_order (order_no,
status_code,
user_account_id,
lease_goods_id,
company_name,
third_back_user_account_id,
order_name,
sku_img,
order_total_amount,
salary_amount,
share_amount,
other_amount,
user_address_id,
pay_time,
user_remark,
unit_price,
ware_num,
deposit,
start_date,
end_date)
values (#{orderNo}, #{statusCode}, #{userAccountId}, #{leaseGoodsId}, #{companyName}, #{thirdBackUserAccountId},
#{orderName}, #{skuImg}, #{orderTotalAmount}, #{salaryAmount}, #{shareAmount}, #{otherAmount},
#{userAddressId},
#{payTime}, #{userRemark}, #{unitPrice}, #{wareNum}, #{deposit}, #{startDate}, #{endDate});
</insert>
<insert id="addAddress">
insert into lease_order_express(lease_order_id, send_exp_no, send_exp_code, take_name, take_phone, take_region,
take_address, create_time)
values (#{leaseOrderId}, #{sendExpNo}, #{sendExpCode}, #{takeName}, #{takePhone}, #{takeRegion}, #{takeAddress},
NOW())
</insert>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论