Commit 9a012ed9 authored by libin's avatar libin

Merge remote-tracking branch 'origin/dev' into dev

parents 359c87f3 c41c9981
...@@ -16,6 +16,10 @@ public class ResultCode { ...@@ -16,6 +16,10 @@ public class ResultCode {
// 操作失败 // 操作失败
public static int FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("FAILED_CODE")); public static int FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("FAILED_CODE"));
//IM消息删除失败
public static int IM_DELETE_FAIL_CODE = Integer.valueOf(SystemProperty.getResultConfig("IM_DELETE_FAIL_CODE"));
public static int IM_MSG_NOT_EXIST_CODE = Integer.valueOf(SystemProperty.getResultConfig("IM_MSG_NOT_EXIST_CODE"));
// 车辆预定失败,请重试 // 车辆预定失败,请重试
public static int BOOKED_FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_FAILED_CODE")); public static int BOOKED_FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_FAILED_CODE"));
//预定时间不能为空 DATE_TIME_IS_NULL //预定时间不能为空 DATE_TIME_IS_NULL
......
...@@ -6,6 +6,10 @@ SUCCESS_CODE=200 ...@@ -6,6 +6,10 @@ SUCCESS_CODE=200
#操作失败 #操作失败
FAILED_CODE=1001 FAILED_CODE=1001
1001=操作失败 1001=操作失败
IM_DELETE_FAIL_CODE = 10011
10011 = 删除消息失败
IM_MSG_NOT_EXIST_CODE = 10012
10012 = 消息不存在
#数据已存在 #数据已存在
EXIST_CODE=1002 EXIST_CODE=1002
1002=数据已存在 1002=数据已存在
......
...@@ -52,6 +52,9 @@ public interface UserFeign { ...@@ -52,6 +52,9 @@ public interface UserFeign {
public ObjectRestResponse<AppUserDTO> userDetailById(@RequestParam("id") Integer id); public ObjectRestResponse<AppUserDTO> userDetailById(@RequestParam("id") Integer id);
@GetMapping("/app/user/app/unauth/getUserIdByUsername")
public List<Integer> getUserIdByUsername(@RequestParam(value="keywords")String keywords);
/** /**
*status:0-判断是否认证过,1-认证成功后修改用户认证状态 *status:0-判断是否认证过,1-认证成功后修改用户认证状态
*userId:用户登录时的id,必须 *userId:用户登录时的id,必须
......
...@@ -144,4 +144,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -144,4 +144,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
appUserInfoVo.setNickname(userDetail.getNickname()); appUserInfoVo.setNickname(userDetail.getNickname());
return appUserInfoVo; return appUserInfoVo;
} }
public List<Integer> getUserIdByUsername(String keywords) {
return mapper.getUserIdByUsername(keywords);
}
} }
...@@ -19,4 +19,6 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> { ...@@ -19,4 +19,6 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
void updateUserMemberStatusByUserId(@Param("userId") Integer userId,@Param("status") Integer status); void updateUserMemberStatusByUserId(@Param("userId") Integer userId,@Param("status") Integer status);
void updateUserPositionByUserId(@Param("userId") Integer id, @Param("positionId") Integer positionId); void updateUserPositionByUserId(@Param("userId") Integer id, @Param("positionId") Integer positionId);
List<Integer> getUserIdByUsername(@Param("keywords") String keywords);
} }
\ No newline at end of file
...@@ -280,6 +280,14 @@ public class AppUserController extends CommonBaseController{ ...@@ -280,6 +280,14 @@ public class AppUserController extends CommonBaseController{
return ObjectRestResponse.succ(appUserInfoVo); return ObjectRestResponse.succ(appUserInfoVo);
} }
@GetMapping("/app/unauth/getUserIdByUsername")
@IgnoreUserToken
@IgnoreClientToken
public List<Integer> getUserIdByUsername(@RequestParam("keywords") String keywords){
List<Integer> userIds = userDetailBiz.getUserIdByUsername(keywords);
return userIds;
}
@GetMapping("/app/unauth/test") @GetMapping("/app/unauth/test")
@IgnoreUserToken @IgnoreUserToken
@IgnoreClientToken @IgnoreClientToken
......
...@@ -42,6 +42,15 @@ ...@@ -42,6 +42,15 @@
where d.userid = #{userId} limit 1 where d.userid = #{userId} limit 1
</select> </select>
<select id="getUserIdByUsername" resultType="java.lang.Integer" parameterType="java.lang.String">
select d.userid from app_user_login l
left join app_user_detail d
on d.userid = l.id
where d.realname like concat("%", #{keywords}, "%") or l.username like concat("%", #{keywords}, "%")
</select>
<select id="selectAppUserManage" parameterType="com.github.wxiaoqi.security.admin.dto.AppUserManageDTO" <select id="selectAppUserManage" parameterType="com.github.wxiaoqi.security.admin.dto.AppUserManageDTO"
resultType="com.github.wxiaoqi.security.admin.vo.AppUserManageVo"> resultType="com.github.wxiaoqi.security.admin.vo.AppUserManageVo">
select select
......
...@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.admin.vo.ImiVo; ...@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.admin.vo.ImiVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.mongodb.client.result.DeleteResult;
import com.xxfc.platform.im.dto.CommentVo; import com.xxfc.platform.im.dto.CommentVo;
import com.xxfc.platform.im.dto.PraiseVo; import com.xxfc.platform.im.dto.PraiseVo;
import com.xxfc.platform.im.dto.QuestionParamDto; import com.xxfc.platform.im.dto.QuestionParamDto;
...@@ -16,7 +17,9 @@ import com.xxfc.platform.im.model.Comment; ...@@ -16,7 +17,9 @@ import com.xxfc.platform.im.model.Comment;
import com.xxfc.platform.im.model.Msg; import com.xxfc.platform.im.model.Msg;
import com.xxfc.platform.im.model.Praise; import com.xxfc.platform.im.model.Praise;
import com.xxfc.platform.im.vo.MsgVo; import com.xxfc.platform.im.vo.MsgVo;
import com.xxfc.platform.universal.constant.ResCode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.bson.types.ObjectId; import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
...@@ -27,9 +30,7 @@ import org.springframework.data.mongodb.core.query.Criteria; ...@@ -27,9 +30,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.Iterator;
import java.util.List;
@Service @Service
@Slf4j @Slf4j
...@@ -162,6 +163,36 @@ public class MsgBiz { ...@@ -162,6 +163,36 @@ public class MsgBiz {
} }
/**
* 删除消息
* @param ids id字符串,用逗号隔开
* @return
*/
public ObjectRestResponse deleteByList(String ids) {
Integer userId = 0;
AppUserDTO appUserDTO = userBiz.getUserInfo();
if(appUserDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, ResultCode.getMsg(ResultCode.RSTOKEN_EXPIRED_CODE));
}
if (StringUtils.isBlank(ids)) {
return ObjectRestResponse.paramIsEmpty();
}
userId = appUserDTO.getImUserid();
List<String> list = Arrays.asList(ids.split(","));
Set<String> set = new HashSet<>();
set.addAll(list);
Query query = new Query(Criteria.where("id").in(set));
query.addCriteria(Criteria.where("userId").is(userId));
List<Msg> msgList = mongoTemplate.find(query, Msg.class, "s_msg");
if(msgList.size() != set.size()) { //查询到的消息条数不等于查询的Id数
return ObjectRestResponse.createFailedResult(ResultCode.IM_DELETE_FAIL_CODE, ResultCode.getMsg(ResultCode.IM_DELETE_FAIL_CODE));
}
DeleteResult deleteResult = mongoTemplate.remove(query, Msg.class, "s_msg");
if (deleteResult != null && deleteResult.getDeletedCount() == set.size()) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createFailedResult(ResultCode.IM_DELETE_FAIL_CODE, ResultCode.getMsg(ResultCode.IM_DELETE_FAIL_CODE));
}
/** /**
......
...@@ -35,4 +35,9 @@ public class MsgController { ...@@ -35,4 +35,9 @@ public class MsgController {
public ObjectRestResponse getByUserId(Integer page, Integer limit, Integer type) { public ObjectRestResponse getByUserId(Integer page, Integer limit, Integer type) {
return msgBiz.getMsgListByUserId(page, limit, type); return msgBiz.getMsgListByUserId(page, limit, type);
} }
@GetMapping(value = "/delete")
public ObjectRestResponse deleteByIds(String ids) {
return msgBiz.deleteByList(ids);
}
} }
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum AccountTypeEnum {
//账款类型 1*--入账;2*--出账
//账款类型 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款
IN_ORDER_PAY(101, "订单支付"),
OUT_ORDER_FUND(201, "订单款"),
OUT_DEPOSIT(202, "所有押金"),
OUT_PART_DEPOSIT(203, "部分押金(扣除该扣除的 + 保留违章预备金)"),
OUT_RESIDUE_DEPOSIT(204, "剩余押金(扣除该扣除的)"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
//Maps.newHashMap();
static{
for(AccountTypeEnum enumE : AccountTypeEnum.values()){
codeAndDesc.put(enumE.getCode(),enumE.getDesc());
}
}
AccountTypeEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
...@@ -7,6 +7,7 @@ public enum CrosstownTypeEnum { ...@@ -7,6 +7,7 @@ public enum CrosstownTypeEnum {
DEPARTURE(1, "交车"), DEPARTURE(1, "交车"),
ARRIVE(2, "还车"), ARRIVE(2, "还车"),
FIXED_LOSS(3, "定损"), FIXED_LOSS(3, "定损"),
FIXED_LOSS_NOW(4, "定损"),
; ;
/** /**
* 编码 * 编码
......
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum DeductionTypeEnum {
//账款类型 1--违约金;2--消费金额;3--赔偿金(定损);4--违章相关
VIOLATE_CANCEL(101, "提前取消违约金"),
VIOLATE_ADVANCE(102, "提前还车违约金"),
VIOLATE_DELAY(103, "延迟还车违约金"),
EXTRA(201, "消费金额"),
DAMAGES(301, "赔偿金(定损)"),
VIOLATE_TRAFFIC_DEDUCT(401, "违章扣款"),
VIOLATE_TRAFFIC_KEEP(402, "违章扣款保留金"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
//Maps.newHashMap();
static{
for(DeductionTypeEnum enumE : DeductionTypeEnum.values()){
codeAndDesc.put(enumE.getCode(),enumE.getDesc());
}
}
DeductionTypeEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
...@@ -6,7 +6,8 @@ import java.util.Map; ...@@ -6,7 +6,8 @@ import java.util.Map;
public enum OrderViolateEnum { public enum OrderViolateEnum {
BEFORE(1, "提前"), BEFORE(1, "提前"),
AFTER(2, "延期") AFTER(2, "延期"),
EXCESS(3, "消费超额金")
; ;
/** /**
* 编码 * 编码
......
package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单帐目
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
*/
@Data
@Table(name = "order_account")
public class OrderAccount implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 账款对应的流水号
*/
@Column(name = "trade_no")
@ApiModelProperty(value = "账款对应的流水号")
private String tradeNo;
/**
* 记账时间
*/
@Column(name = "account_time")
@ApiModelProperty(value = "记账时间")
private Long accountTime;
/**
* 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款
*/
@Column(name = "account_type")
@ApiModelProperty(value = "记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款")
private Integer accountType;
/**
* 账款状态 1--成功;2--失败
*/
@Column(name = "account_status")
@ApiModelProperty(value = "账款状态 1--成功;2--失败")
private Integer accountStatus;
/**
* 账款金额
*/
@Column(name = "account_amount")
@ApiModelProperty(value = "账款金额")
private BigDecimal accountAmount;
/**
* 账款说明
*/
@Column(name = "account_desc")
@ApiModelProperty(value = "账款说明")
private String accountDesc;
/**
* 账款详情
*/
@Column(name = "account_detail")
@ApiModelProperty(value = "账款详情")
private String accountDetail;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 原金额
*/
@Column(name = "original_amount")
@ApiModelProperty(value = "原金额")
private BigDecimal originalAmount;
/**
* 扣除金额
*/
@Column(name = "deduct_amount")
@ApiModelProperty(value = "扣除金额")
private BigDecimal deductAmount;
}
...@@ -146,6 +146,14 @@ public class OrderItem implements Serializable { ...@@ -146,6 +146,14 @@ public class OrderItem implements Serializable {
return calculateAmount; return calculateAmount;
} }
public BigDecimal getBuyAmount() {
return getUnitPrice().multiply(new BigDecimal(getBuyNum() + ""));
}
public BigDecimal getCutAmount() {
return getUnitPrice().multiply(new BigDecimal(getCutNum() + ""));
}
public BigDecimal handleCouponAmount(BigDecimal couponAmount) { public BigDecimal handleCouponAmount(BigDecimal couponAmount) {
BigDecimal realAmountResidue = getRealAmount().subtract(couponAmount); BigDecimal realAmountResidue = getRealAmount().subtract(couponAmount);
//剩余价格小于0 即优惠价格超出本item的实际价格,返回剩余优惠 //剩余价格小于0 即优惠价格超出本item的实际价格,返回剩余优惠
......
...@@ -315,4 +315,12 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -315,4 +315,12 @@ public class OrderRentVehicleDetail implements Serializable {
// @Column(name = "back_free_days") // @Column(name = "back_free_days")
// Integer backFreeDays; // Integer backFreeDays;
@ApiModelProperty(value = "违章金额")
@Column(name = "violate_traffic_amount")
BigDecimal violateTrafficAmount;
@ApiModelProperty(value = "使用天数")
@Column(name = "used_day")
Integer usedDay;
} }
...@@ -7,6 +7,9 @@ import java.util.List; ...@@ -7,6 +7,9 @@ import java.util.List;
@Data @Data
public class DedDetailDTO { public class DedDetailDTO {
//public static final int TYPE_VIOLATE_ADVANCE = 1;
/** /**
* : 扣除项名称 * : 扣除项名称
*/ */
...@@ -17,13 +20,19 @@ public class DedDetailDTO { ...@@ -17,13 +20,19 @@ public class DedDetailDTO {
*/ */
BigDecimal cost; BigDecimal cost;
/**
* 订单超额费用
*/
BigDecimal excessCost;
/** /**
* 编号(用于顺序) * 编号(用于顺序)
*/ */
Integer id; Integer id;
//1、延期, 2、车辆损坏 3、其他 //作为:DedDetail :2、车辆损坏 3、其他
//作为:violate_amount_detail 1--提前还车 2--延期还车 3--消费超额
Integer type; Integer type;
//小雨都不知道什么东西 //小雨都不知道什么东西
......
package com.xxfc.platform.order.pojo.account;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OrderAccountDeduction {
public static final int ORIGIN_ORDER = 1;
public static final int ORIGIN_DEPOSIT = 2;
public static final int ORIGIN_ORDER_DEPOSIT = 3;
public static final int ORIGIN_DEPOSIT_ORDERß = 4;
/**
* 名称
*/
String name;
/**
* 类型
*/
Integer type;
/**
* 来源 1--订单款 2--押金
*/
Integer origin;
/**
* 金额
*/
BigDecimal amount;
}
package com.xxfc.platform.order.pojo.account;
import lombok.Data;
import org.assertj.core.util.Lists;
import java.math.BigDecimal;
import java.util.List;
@Data
public class OrderAccountDetail {
/**
* 实际返回订单款
*/
BigDecimal orderAmount;
/**
* 实际返回押金款
*/
BigDecimal depositAmount;
/**
* 原来要返回的订单款
*/
BigDecimal originOrderAmount;
/**
* 原来要返回的押金款
*/
BigDecimal originDepositAmount;
/**
* 扣款列表
*/
List<OrderAccountDeduction> deductions = Lists.newArrayList();
}
...@@ -23,6 +23,31 @@ public class InProgressVO { ...@@ -23,6 +23,31 @@ public class InProgressVO {
*/ */
BigDecimal extraAmount = BigDecimal.ZERO; BigDecimal extraAmount = BigDecimal.ZERO;
/**
* 已使用天数
*/
Integer usedDays = 0;
/**
* 已使用的金额
*/
BigDecimal usedAmount = BigDecimal.ZERO;
/**
* 已使用免费天数
*/
Integer usedfreeDays = 0;
/**
* 已使用的免费天数对应的费用
*/
BigDecimal usedFreeDaysAmount = BigDecimal.ZERO;
/**
* 返回订单款金额
*/
BigDecimal refundOrderAmount = BigDecimal.ZERO;
/** /**
* 返还的优惠券 * 返还的优惠券
*/ */
...@@ -32,4 +57,9 @@ public class InProgressVO { ...@@ -32,4 +57,9 @@ public class InProgressVO {
* 返还的免费天数 * 返还的免费天数
*/ */
Integer backFreeDays = 0; Integer backFreeDays = 0;
String cancelCostDetail = "";
String advanceDelayCostDetail = "";
} }
package com.xxfc.platform.order.pojo.order; package com.xxfc.platform.order.pojo.order;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense; import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import lombok.Data; import lombok.Data;
...@@ -33,6 +34,8 @@ public class OrderPageVO extends BaseOrder { ...@@ -33,6 +34,8 @@ public class OrderPageVO extends BaseOrder {
private String telephone; private String telephone;
//订单违约金
private String dedDetailDTO;
/** /**
* 車輛編碼 * 車輛編碼
*/ */
......
...@@ -33,4 +33,29 @@ public class RentVehiclePriceVO extends OrderPriceVO{ ...@@ -33,4 +33,29 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal damageSafePrice; BigDecimal damageSafePrice;
@ApiModelProperty(value = "费用详情") @ApiModelProperty(value = "费用详情")
private String costDetail; private String costDetail;
// /**
// * 原租车天数
// */
// private Integer originDayNum;
/**
* 免费天数
*/
private Integer freeDayNum;
/**
* 免费价格
*/
private BigDecimal freeAmount;
/**
* 购买的租车金额
*/
private BigDecimal buyVehicleAmount;
/**
* 优惠描述
*/
private String couponDesc = "";
} }
...@@ -2,11 +2,11 @@ package com.xxfc.platform.order.biz; ...@@ -2,11 +2,11 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO; import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
...@@ -14,18 +14,21 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; ...@@ -14,18 +14,21 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query; import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.gson.JsonObject;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.biz.inner.OrderMsgBiz; import com.xxfc.platform.order.biz.inner.OrderMsgBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.mapper.BaseOrderMapper; import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.OrderListVo; import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto; import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto;
import com.xxfc.platform.order.pojo.order.QueryOrderDTO; import com.xxfc.platform.order.pojo.order.QueryOrderDTO;
import com.xxfc.platform.order.rest.BaseOrderController;
import com.xxfc.platform.tour.entity.TourUser; import com.xxfc.platform.tour.entity.TourUser;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
...@@ -43,6 +46,9 @@ import com.xxfc.platform.vehicle.pojo.CompanyDetail; ...@@ -43,6 +46,9 @@ import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -89,6 +95,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -89,6 +95,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired @Autowired
OrderItemBiz orderItemBiz; OrderItemBiz orderItemBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
...@@ -110,6 +119,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -110,6 +119,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired @Autowired
ActivityFeign activityFeign; ActivityFeign activityFeign;
@Autowired
OrderCalculateBiz orderCalculateBiz;
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap) { public List<OrderPageVO> pageByParm(Map<String, Object> paramMap) {
return mapper.pageByParm(paramMap); return mapper.pageByParm(paramMap);
} }
...@@ -144,12 +159,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -144,12 +159,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
AppUserDTO appUserVo = userFeign.userDetailById(orderPageVo.getUserId()).getData(); AppUserDTO appUserVo = userFeign.userDetailById(orderPageVo.getUserId()).getData();
if(appUserVo != null) { if(appUserVo != null) {
orderPageVo.setTelephone(appUserVo.getUsername()); orderPageVo.setTelephone(appUserVo.getUsername());
orderPageVo.setUsername(appUserVo.getNickname()); orderPageVo.setUsername(appUserVo.getRealname());
} }
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone()); List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList()); List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
if (orderPageVo.getOrderRentVehicleDetail() != null) { if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) { if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) {
return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc()); return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc());
} }
...@@ -163,6 +179,8 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -163,6 +179,8 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
// } // }
getDriverInfo(orderPageVo); getDriverInfo(orderPageVo);
} else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车 } else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车
//设置违约金金额
updateCrossRefund(orderPageVo);
getDriverInfo(orderPageVo); getDriverInfo(orderPageVo);
getUserLicense(orderPageVo); getUserLicense(orderPageVo);
} }
...@@ -178,13 +196,16 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -178,13 +196,16 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
RestResponse<Vehicle> response = vehicleFeign.findById(orderPageVo.getOrderRentVehicleDetail().getVehicleId()); RestResponse<Vehicle> response = vehicleFeign.findById(orderPageVo.getOrderRentVehicleDetail().getVehicleId());
if (response.getData() != null) { if (response.getData() != null) {
orderPageVo.setVehicalNumberPlat(response.getData().getNumberPlate()); orderPageVo.setVehicalNumberPlat(response.getData().getNumberPlate());
orderPageVo.setCode(response.getData().getCode());
} }
} else if (orderPageVo.getOrderTourDetail() != null) { } else if (orderPageVo.getOrderTourDetail() != null) {
if(StringUtils.isNotBlank(orderPageVo.getOrderTourDetail().getTourUserIds())) { if(StringUtils.isNotBlank(orderPageVo.getOrderTourDetail().getTourUserIds())) {
List<TourUser> list = tourFeign.getTourUsers(orderPageVo.getOrderTourDetail().getTourUserIds()).getData(); List<TourUser> list = tourFeign.getTourUsers(orderPageVo.getOrderTourDetail().getTourUserIds()).getData();
orderPageVo.getOrderTourDetail().setUserVoList(list == null || list.size() <= 0 ? new ArrayList<>() : list); orderPageVo.getOrderTourDetail().setUserVoList(list == null || list.size() <= 0 ? new ArrayList<>() : list);
} }
} }
//设置保留金 //设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail()); BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
...@@ -195,20 +216,128 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -195,20 +216,128 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
return ObjectRestResponse.succ(orderPageVo); return ObjectRestResponse.succ(orderPageVo);
} }
//获取两个日期之间的天数
public int getDaysBetweenDateTime(DateTime startDay, DateTime endDay) {
int a = 0;
for (DateTime curDate = startDay.plusDays(1); curDate.compareTo(endDay) < 0; curDate = curDate.plusDays(1)) {
a++;
}
return a;
}
public void updateCrossRefund(OrderPageVO orderPageVO) {
//计算延期费用
DedDetailDTO dedDetailDTO = new DedDetailDTO();
//提前还车,结束时间大于当前时间
DateTime nowTime = DateTime.parse(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER);
DateTime endTime = DateTime.parse(new DateTime(orderPageVO.getOrderRentVehicleDetail().getEndTime()).toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER);
DateTime startTime = DateTime.parse(new DateTime(orderPageVO.getOrderRentVehicleDetail().getStartTime()).toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER);
//设置使用天数
int userUsedDay = getDaysBetweenDateTime(startTime, nowTime);
orderPageVO.getOrderRentVehicleDetail().setUsedDay(userUsedDay);
orderRentVehicleBiz.updateSelectiveById(orderPageVO.getOrderRentVehicleDetail());
//实际预定的天数
int actualDay = getDaysBetweenDateTime(startTime, endTime);
Integer orderId = orderPageVO.getId();
List<OrderItem> items = orderItemBiz.selectList(new OrderItem() {{
setOrderId(orderId);
}});
//租车车辆单价
BigDecimal amount = new BigDecimal(0);
if (items != null && items.size() > 0) {
for (OrderItem orderItem : items) {
if (orderItem.getType() == ItemTypeEnum.VEHICLE_MODEL.getCode()) {
amount = orderItem.getUnitPrice();
break;
}
}
}
/**
* 提前还车
*/
if (orderPageVO.getOrderRentVehicleDetail().getEndTime() > nowTime.getMillis()) {
StringBuilder stringBuilder = new StringBuilder();
//提前的天数, 当天就算使用一天
int noUsedDay = getDaysBetweenDateTime(nowTime, endTime) - 1;
//退还未使用的天数,或者金额,扣除违约金,实际未使用天数的金额,最多3000元
InProgressVO inProgressVO = new InProgressVO();
inProgressVO.setViolateAmount(new BigDecimal(200));
inProgressVO.setExtraAmount(new BigDecimal(200));
//InProgressVO inProgressVO = orderCalculateBiz.inProgressCalculate(orderPageVO, actualDay - noUsedDay);
if (inProgressVO != null) {
//消费超额金
if(inProgressVO.getExtraAmount() != null) {
dedDetailDTO.setExcessCost(inProgressVO.getExtraAmount());
}
stringBuilder.append("违约金( ¥");
stringBuilder.append(amount);
stringBuilder.append(" x ");
stringBuilder.append(actualDay - noUsedDay);
stringBuilder.append("天) = ");
BigDecimal cost = (inProgressVO.getExtraAmount()).add(inProgressVO.getViolateAmount());
stringBuilder.append(cost);
initDedDetail(dedDetailDTO, OrderViolateEnum.BEFORE.getCode(), cost, stringBuilder);
}
/**
* 延期还车
*/
} else if (orderPageVO.getOrderRentVehicleDetail().getEndTime() < nowTime.getMillis()) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("违约金( ¥");
//延期的天数, 延期违约金是延期天数*200%
int usedDay = getDaysBetweenDateTime(endTime, nowTime);
stringBuilder.append(amount);
stringBuilder.append(" x ");
stringBuilder.append(usedDay);
stringBuilder.append("(天)");
stringBuilder.append(" x 2");
BigDecimal cost = amount.multiply(new BigDecimal(usedDay)).multiply(new BigDecimal(2));
stringBuilder.append(" = ");
stringBuilder.append(cost);
stringBuilder.append("元");
initDedDetail(dedDetailDTO, OrderViolateEnum.AFTER.getCode(), cost, stringBuilder);
}
orderPageVO.setDedDetailDTO(JSONObject.toJSONString(dedDetailDTO));
}
public void initDedDetail(DedDetailDTO dedDetailDTO, Integer type, BigDecimal cost, StringBuilder stringBuilder) {
String detailName = null;
if (type == OrderViolateEnum.BEFORE.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.BEFORE.getCode());
detailName = "提前还车违约金";
} else if (type == OrderViolateEnum.AFTER.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.AFTER.getCode());
detailName = "延期还车违约金";
}
//900元+违约金(¥900x2天=)1800元
dedDetailDTO.setDeductions(stringBuilder.toString());
dedDetailDTO.setCost(cost);
dedDetailDTO.setId(1);
dedDetailDTO.setStatusIndex(1);
dedDetailDTO.setStatusName(detailName);
}
public void getUserLicense(OrderPageVO orderPageVo) { public void getUserLicense(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto(); OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId()); orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo()); orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstowns = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto); List<OrderVehicleCrosstownDto> orderVehicleCrosstown = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (orderVehicleCrosstowns != null && orderVehicleCrosstowns.size() > 0) { if (orderVehicleCrosstown != null && orderVehicleCrosstown.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstowns.get(0).getUserLicenseId()).getData(); List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstown.get(0).getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) { if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard()); orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg()); orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName()); orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
orderVehicleCrosstownDto.setLicensePhone(orderUserLicenses.get(0).getLicensePhone()); orderVehicleCrosstownDto.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
} }
//设置保留金
for (OrderVehicleCrosstownDto a : orderVehicleCrosstown) {
if(a.getType() != CrosstownTypeEnum.DEPARTURE.getCode()) {
if(StringUtils.isNotBlank(a.getViolateDetail())) {
orderPageVo.setDedDetailDTO(a.getViolateDetail());
}
}
}
} }
orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto); orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
} }
...@@ -302,6 +431,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -302,6 +431,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
setVersion(baseOrder.getVersion()); setVersion(baseOrder.getVersion());
}}; }};
//订单账款类
OrderAccountDetail oad = new OrderAccountDetail();
oad.setOriginOrderAmount(baseOrder.getRealAmount());
oad.setOrderAmount(baseOrder.getRealAmount());
//如果是会员订单,则触发会员效益 //如果是会员订单,则触发会员效益
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) { if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
//直接设置订单完成 //直接设置订单完成
...@@ -327,6 +461,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -327,6 +461,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{ orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//账款设置押金
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setDepositAmount(orvd.getDeposit());
//车辆预定审核通过 //车辆预定审核通过
RestResponse<Integer> result = vehicleFeign.rentProveVehicleBooking(orvd.getBookRecordId()); RestResponse<Integer> result = vehicleFeign.rentProveVehicleBooking(orvd.getBookRecordId());
...@@ -344,8 +483,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -344,8 +483,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
//站点总人数添加 //站点总人数添加
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber()); tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
} }
try { try {
this.updateSelectiveByIdRe(updateOrder); this.updateSelectiveByIdRe(updateOrder);
//记录订单账款记录
Integer flag = orderAccountBiz.addOrderAccount(baseOrder.getId(), "订单支付", oad.getOriginOrderAmount().add(oad.getOriginDepositAmount()), oad.getOrderAmount().add(oad.getDepositAmount()), tradeNo, AccountTypeEnum.IN_ORDER_PAY.getCode(), JSONUtil.toJsonStr(oad));
} finally { } finally {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData(); AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
......
package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.biz.inner.OrderMsgBiz;
import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.jexl2.MapContext;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.mapper.OrderAccountMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
/**
* 订单帐目
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
*/
@Service
@Slf4j
public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderVehicleCrosstownBiz crosstownBiz;
@Autowired
OrderMsgBiz orderMsgBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired
OrderDepositRefundRecordBiz orderDepositRefundRecordBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
ThirdFeign thirdFeign;
@Autowired
UserFeign userFeign;
/**
* 租车退款流程
* @param baseOrder
* @param mainItemRealAmount 主要商品(租车费用、旅游费用等)
* @param timeLag 与开始时间的时间差
* @param dicParentKey
*/
public BigDecimal rentRefundProcessCancel(BaseOrder baseOrder, BigDecimal mainItemRealAmount, Long timeLag, String dicParentKey, BigDecimal depositAmount, BigDecimal originalDeductAmount) {
//计算退款金额
//商品价格 - 优惠券减免的价格
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(mainItemRealAmount);
StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:");
OrderAccountDetail oad = new OrderAccountDetail();
BigDecimal refundMainGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder, oad);
refundMainGoodsAmount = refundMainGoodsAmount.setScale(2, RoundingMode.HALF_UP);
//退款金额 = 主要商品退款 + (其他商品退款) 即--> 主要商品退款 + (订单总商品款 - 主要商品款)
oad.setOrderAmount(refundMainGoodsAmount.add(baseOrder.getOrderAmount().subtract(mainItemRealAmount)));
BigDecimal refundAmount = oad.getOrderAmount();
// 押金
BigDecimal originalRefundAmountDeposit = BigDecimal.ZERO.add(depositAmount);
BigDecimal refundAmountDeposit = BigDecimal.ZERO.add(depositAmount);
refundDescBuilder = refundDescBuilder.append(",押金退款:");
if(null != originalDeductAmount && BigDecimal.ZERO.compareTo(originalDeductAmount) < 0) {
//通过原扣除款 计算剩余款
BigDecimal residueAmount = calculateRefund(originalDeductAmount, timeLag, dicParentKey, refundDescBuilder, oad);
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//退款金额 :押金 - (原扣除款 - 剩余款) 即: 押金 - (免费天数对应的钱 - 剩余款)
refundAmountDeposit = originalRefundAmountDeposit.subtract(originalDeductAmount.subtract(residueAmount));
}
originalRefundAmount = originalRefundAmount.add(originalRefundAmountDeposit);
oad.setDepositAmount(refundAmountDeposit);
refundAmount = refundAmount.add(refundAmountDeposit);
//退款子流程: 订单基础,退款描述, 款金额
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, AccountTypeEnum.OUT_ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad);
return refundAmount;
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc 退款描述
* @param refundAmount 退款金额
* @param refundType 退款类型
* @param refundStatus 退款状态
*/
public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus, OrderAccountDetail oad) {
String refundTradeNo = null;
//0 小于 退款金额
if(BigDecimal.ZERO.compareTo(refundAmount) < 0) {
OrderRefundVo orv = new OrderRefundVo();
orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
orv.setOrderNo(baseOrder.getNo());
orv.setRefundDesc(refundDesc+ refundAmount.toString());
orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
ObjectRestResponse<String> result = thirdFeign.refund(orv);
refundTradeNo = result.getData();
if(null == refundTradeNo) {
log.error("退款没有refundTradeNo,订单号为:"+ baseOrder.getNo()+ ", 微服务调用结果为"+ JSONUtil.toJsonStr(result));
}
}
//记录订单退款记录
Integer flag = addOrderAccount(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType, JSONUtil.toJsonStr(oad));
//更新订单的退款状态和退款时间
BaseOrder updateBaseOrder = new BaseOrder();
updateBaseOrder.setId(baseOrder.getId());
updateBaseOrder.setRefundStatus(refundStatus);
updateBaseOrder.setRefundTime(System.currentTimeMillis());
updateBaseOrder.setVersion(baseOrder.getVersion());
if(SYS_TRUE.equals(flag) && null != refundStatus) {
BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder);
}
}
public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder, OrderAccountDetail orderAccountDetail) {
BigDecimal refundGoodsAmount = goodsAmount;
if(null == orderAccountDetail) {
orderAccountDetail = new OrderAccountDetail();
}
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Set<Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens();
for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
if(StrUtil.isBlank(dic.getName())) {
continue;
}
String[] names = dic.getName().split("\\|");
if(names.length < 2) {
continue;
}
//符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmount = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount
set("ga", goodsAmount);
}})).toString());
refundDescBuilder = refundDescBuilder.insert(0, names[1]+ ",");
orderAccountDetail.getDeductions().add(initDeduction(goodsAmount.subtract(refundGoodsAmount), names[1], DeductionTypeEnum.VIOLATE_CANCEL, OrderAccountDeduction.ORIGIN_DEPOSIT));
break;
}
}
return refundGoodsAmount;
}
/**
* 初始化deduction
* @param subtract
* @param name
* @return
*/
public OrderAccountDeduction initDeduction(BigDecimal subtract, String name, DeductionTypeEnum dte, Integer origin) {
OrderAccountDeduction orderAccountDeduction = new OrderAccountDeduction();
orderAccountDeduction.setType(dte.getCode());
orderAccountDeduction.setName(name);
orderAccountDeduction.setAmount(subtract);
orderAccountDeduction.setOrigin(origin);
return orderAccountDeduction;
}
/**
* 记录订单退款记录
* @param orderId
* @param accountDesc
* @param accountAmount
* @param tradeNo
*/
public Integer addOrderAccount(Integer orderId, String accountDesc, BigDecimal originalAmount, BigDecimal accountAmount, String tradeNo, Integer accountType, String detail) {
//如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(tradeNo)) {
refundStatus = SYS_FALSE;
}
//创建订单退款记录
OrderAccount orderAccount = new OrderAccount(){{
setOrderId(orderId);
setAccountTime(System.currentTimeMillis());
setTradeNo(tradeNo);
setAccountType(RefundTypeEnum.ORDER_FUND.getCode());
}};
orderAccount.setOriginalAmount(originalAmount);
orderAccount.setDeductAmount(originalAmount.subtract(accountAmount));
orderAccount.setAccountAmount(accountAmount);
orderAccount.setAccountDesc(accountDesc);
orderAccount.setAccountStatus(refundStatus);
orderAccount.setAccountType(accountType);
orderAccount.setAccountDetail(detail);
insertSelective(orderAccount);
return refundStatus;
}
public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, AccountTypeEnum accountTypeEnum, OrderAccountDetail oad) {
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, accountTypeEnum.getCode(), refundStatus, oad);
//设置剩余没有返还的钱
orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{
setId(orvd.getId());
setReturnPayResidue(residueAmount);
}});
}
/**
* 退还部分押金
* @param orderMQDTO
*/
public void refundPartDeposit(OrderMQDTO orderMQDTO){
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ILLEGAL_RESERVE).getDetail());
//未退还, 进行挂起保留违章预备金 的退还
if(RefundStatusEnum.NONE.getCode().equals(orderMQDTO.getRefundStatus())) {
Integer crosstownTypeEnum;
DepositRefundStatus depositRefundRecordStatus;
//判断是否定损过
if(SYS_TRUE.equals(orderMQDTO.getOrderRentVehicleDetail().getFixedLossStatus())) {
crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode();
depositRefundRecordStatus = DepositRefundStatus.FIXLOSSREFUNDARRIVAL;
}else {
crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode();
depositRefundRecordStatus = DepositRefundStatus.REFUNDARRIVAL;
}
OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{
setOrderId(orderMQDTO.getId());
setType(crosstownTypeEnum);
}});
OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(orderMQDTO.getId());
}});
if(null == crosstown) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退款第一部分押金失败,获取不了还车/定损记录,订单号:"+ orderMQDTO.getId()));
}
if(null == crosstown.getRestDeposit()
|| crosstown.getRestDeposit().subtract(illegalReserve).compareTo(BigDecimal.ZERO) < 0 ){
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退第一笔押金剩余金额异常,异常记录为:"+ crosstown.getId()));
}
OrderAccountDetail oad = new OrderAccountDetail();
orderCalculateBiz.calculateOrderComplete(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), oad, orderItem, orderMQDTO.getOrderRentVehicleDetail().getUsedDay());
//还车扣除款 剩余的 钱,再减去违章预备金
oad.getDeductions().add(
initDeduction(illegalReserve, "违章保证金", DeductionTypeEnum.VIOLATE_TRAFFIC_KEEP, OrderAccountDeduction.ORIGIN_DEPOSIT)
);
oad.getDeductions().add(
initDeduction(crosstown.getDeductionCost(), "定损赔偿金", DeductionTypeEnum.DAMAGES, OrderAccountDeduction.ORIGIN_DEPOSIT)
);
//剩余押金 -
oad.setDepositAmount(oad.getDepositAmount().subtract(illegalReserve).subtract(crosstown.getDeductionCost()));
handleCrosstownDetail(crosstown, oad);
BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve);
BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve);
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
refundDesc = handleDed(crosstown, refundDesc);
refundDesc += ")";
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), AccountTypeEnum.OUT_PART_DEPOSIT, oad);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus);
orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData());
}
}
private String handleDed(OrderVehicleCrosstown crosstown, String refundDesc) {
try{
if(null != crosstown.getDedDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class);
for(DedDetailDTO ddd : dddList) {
refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
}
}
}catch (Exception e) {
log.error("crosstown.getDedDetail() crosstown id :"+crosstown.getId() +" 转换失败");
}
return refundDesc;
}
private void handleCrosstownDetail(OrderVehicleCrosstown crosstown, OrderAccountDetail oad) {
try{
if(null != crosstown.getViolateDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getViolateDetail()), DedDetailDTO.class);
for(DedDetailDTO vio : dddList) {
if(OrderViolateEnum.BEFORE.getCode().equals(vio.getType())) {
for(OrderAccountDeduction deduction : oad.getDeductions()) {
if(DeductionTypeEnum.VIOLATE_ADVANCE.getCode().equals(deduction.getType())) {
deduction.setName(vio.getDeductions());
BigDecimal diff = vio.getCost().subtract(deduction.getAmount());
//修改归还押金金额
oad.setDepositAmount(oad.getDepositAmount().subtract(diff));
deduction.setAmount(vio.getCost());
}
}
}
}
}
}catch (Exception e) {
log.error("crosstown.getViolateDetail() crosstown id :"+crosstown.getId() +" 转换失败");
}
}
}
\ No newline at end of file
...@@ -46,248 +46,286 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER; ...@@ -46,248 +46,286 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service @Service
@Slf4j @Slf4j
public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> { public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
@Autowired // @Autowired
ThirdFeign thirdFeign; // ThirdFeign thirdFeign;
//
@Autowired // @Autowired
BaseOrderBiz baseOrderBiz; // BaseOrderBiz baseOrderBiz;
//
@Autowired // @Autowired
OrderRentVehicleBiz orderRentVehicleBiz; // OrderRentVehicleBiz orderRentVehicleBiz;
//
@Autowired // @Autowired
OrderVehicleCrosstownBiz crosstownBiz; // OrderVehicleCrosstownBiz crosstownBiz;
//
@Autowired // @Autowired
OrderViolationBiz orderViolationBiz; // OrderViolationBiz orderViolationBiz;
//
@Autowired // @Autowired
OrderMsgBiz orderMsgBiz; // OrderMsgBiz orderMsgBiz;
//
@Autowired // @Autowired
UserFeign userFeign; // UserFeign userFeign;
//
@Autowired // @Autowired
OrderDepositRefundRecordBiz orderDepositRefundRecordBiz; // OrderDepositRefundRecordBiz orderDepositRefundRecordBiz;
//
/** // /**
* 退还部分押金 // * 退还部分押金
* @param orderMQDTO // * @param orderMQDTO
*/ // */
public void refundPartDeposit(OrderMQDTO orderMQDTO){ // public void refundPartDeposit(OrderMQDTO orderMQDTO){
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); // Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ILLEGAL_RESERVE).getDetail()); // BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ILLEGAL_RESERVE).getDetail());
//
//未退还, 进行挂起保留违章预备金 的退还 // //未退还, 进行挂起保留违章预备金 的退还
if(RefundStatusEnum.NONE.getCode().equals(orderMQDTO.getRefundStatus())) { // if(RefundStatusEnum.NONE.getCode().equals(orderMQDTO.getRefundStatus())) {
Integer crosstownTypeEnum; // Integer crosstownTypeEnum;
DepositRefundStatus depositRefundRecordStatus; // DepositRefundStatus depositRefundRecordStatus;
//判断是否定损过 // //判断是否定损过
if(SYS_TRUE.equals(orderMQDTO.getOrderRentVehicleDetail().getFixedLossStatus())) { // if(SYS_TRUE.equals(orderMQDTO.getOrderRentVehicleDetail().getFixedLossStatus())) {
crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode(); // crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode();
depositRefundRecordStatus = DepositRefundStatus.FIXLOSSREFUNDARRIVAL; // depositRefundRecordStatus = DepositRefundStatus.FIXLOSSREFUNDARRIVAL;
}else { // }else {
crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode(); // crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode();
depositRefundRecordStatus = DepositRefundStatus.REFUNDARRIVAL; // depositRefundRecordStatus = DepositRefundStatus.REFUNDARRIVAL;
} // }
OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{ // OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{
setOrderId(orderMQDTO.getId()); // setOrderId(orderMQDTO.getId());
setType(crosstownTypeEnum); // setType(crosstownTypeEnum);
}}); // }});
//
if(null == crosstown) { // if(null == crosstown) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退款第一部分押金失败,获取不了还车/定损记录,订单号:"+ orderMQDTO.getId())); // throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退款第一部分押金失败,获取不了还车/定损记录,订单号:"+ orderMQDTO.getId()));
} // }
//
if(null == crosstown.getRestDeposit() // if(null == crosstown.getRestDeposit()
|| crosstown.getRestDeposit().subtract(illegalReserve).compareTo(BigDecimal.ZERO) < 0 ){ // || crosstown.getRestDeposit().subtract(illegalReserve).compareTo(BigDecimal.ZERO) < 0 ){
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退第一笔押金剩余金额异常,异常记录为:"+ crosstown.getId())); // throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退第一笔押金剩余金额异常,异常记录为:"+ crosstown.getId()));
} // }
//
//还车扣除款 剩余的 钱,再减去违章预备金 // //还车扣除款 剩余的 钱,再减去违章预备金
BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve); // BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve);
BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve); // BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve);
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString(); // String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
try{ // try{
if(null != crosstown.getDedDetail()) { // if(null != crosstown.getDedDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class); // List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class);
for(DedDetailDTO ddd : dddList) { // for(DedDetailDTO ddd : dddList) {
refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost(); // refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
} // }
} // }
}catch (Exception e) { // }catch (Exception e) {
log.error("crosstown.getDedDetail() crosstown id :"+crosstown.getId() +" 转换失败"); // log.error("crosstown.getDedDetail() crosstown id :"+crosstown.getId() +" 转换失败");
} // }
refundDesc += ")"; // refundDesc += ")";
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), RefundTypeEnum.PART_DEPOSIT); // refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), RefundTypeEnum.PART_DEPOSIT);
//
// DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus); //// DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus);
// depositRefundRecord.setIscomplete(Boolean.TRUE); //// depositRefundRecord.setIscomplete(Boolean.TRUE);
// orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord); //// orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus); // orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus);
orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData()); // orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData());
} // }
} // }
//
public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, RefundTypeEnum refundTypeEnum) { // public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, RefundTypeEnum refundTypeEnum) {
//退款子流程: 订单基础,退款描述,退款金额 // //退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, refundTypeEnum.getCode(), refundStatus); // refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, refundTypeEnum.getCode(), refundStatus);
//设置剩余没有返还的钱 // //设置剩余没有返还的钱
orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{ // orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{
setId(orvd.getId()); // setId(orvd.getId());
setReturnPayResidue(residueAmount); // setReturnPayResidue(residueAmount);
}}); // }});
} // }
//
/** // /**
* 租车(包括旅游)退款流程 // * 租车(包括旅游)退款流程
* @param baseOrder // * @param baseOrder
* @param timeLag 与开始时间的时间差 // * @param timeLag 与开始时间的时间差
* @param dicParentKey // * @param dicParentKey
*/ // */
public BigDecimal rentRefundProcess(BaseOrder baseOrder, Long timeLag, String dicParentKey) { // public BigDecimal rentRefundProcess(BaseOrder baseOrder, Long timeLag, String dicParentKey) {
//计算退款金额 // //计算退款金额
//商品价格 - 优惠券减免的价格 // //商品价格 - 优惠券减免的价格
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount())); // BigDecimal originalRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:"); // StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:");
BigDecimal refundGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder); // BigDecimal refundGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder);
refundGoodsAmount = refundGoodsAmount.setScale(2, RoundingMode.HALF_UP); // refundGoodsAmount = refundGoodsAmount.setScale(2, RoundingMode.HALF_UP);
//
//退款金额 // //退款金额
BigDecimal refundAmount = refundGoodsAmount; // BigDecimal refundAmount = refundGoodsAmount;
//
//退款子流程: 订单基础,退款描述,退款金额 // //退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode()); // refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode());
return refundAmount; // return refundAmount;
} // }
//
/** // /**
* 租车押金退款流程 // * 租车押金退款流程
* @param baseOrder // * @param baseOrder
* @param depositAmount // * @param depositAmount
* @param timeLag 与开始时间的时间差 // * @param timeLag 与开始时间的时间差
* @param dicParentKey // * @param dicParentKey
* @param originalDeductAmount // * @param originalDeductAmount
*/ // */
public BigDecimal rentRefundDepositProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey, BigDecimal originalDeductAmount) { // public BigDecimal rentRefundDepositProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey, BigDecimal originalDeductAmount) {
// 1、押金 + 租金(规则扣除) // // 1、押金 + 租金(规则扣除)
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(depositAmount); // BigDecimal originalRefundAmount = BigDecimal.ZERO.add(depositAmount);
BigDecimal refundAmount = BigDecimal.ZERO.add(depositAmount); // BigDecimal refundAmount = BigDecimal.ZERO.add(depositAmount);
StringBuilder refundDescBuilder = new StringBuilder("取消订单押金退款:"); // StringBuilder refundDescBuilder = new StringBuilder("取消订单押金退款:");
if(null != originalDeductAmount && BigDecimal.ZERO.compareTo(originalDeductAmount) < 0) { // if(null != originalDeductAmount && BigDecimal.ZERO.compareTo(originalDeductAmount) < 0) {
//通过原扣除款 计算剩余款 // //通过原扣除款 计算剩余款
BigDecimal residueAmount = calculateRefund(originalDeductAmount, timeLag, dicParentKey, refundDescBuilder); // BigDecimal residueAmount = calculateRefund(originalDeductAmount, timeLag, dicParentKey, refundDescBuilder);
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP); // residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//
//退款金额 :押金 - (原扣除款 - 剩余款) 即: 押金 - (免费天数对应的钱 - 剩余款) // //退款金额 :押金 - (原扣除款 - 剩余款) 即: 押金 - (免费天数对应的钱 - 剩余款)
refundAmount = originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount)); // refundAmount = originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount));
} // }
//
//触发押金退款 // //触发押金退款
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.DEPOSIT.getCode(), RefundStatusEnum.ALL.getCode()); // refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.DEPOSIT.getCode(), RefundStatusEnum.ALL.getCode());
return refundAmount; // return refundAmount;
} // }
//
public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder) { // public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder) {
BigDecimal refundGoodsAmount = goodsAmount; // BigDecimal refundGoodsAmount = goodsAmount;
//
//根据时间处理goodsAmount // //根据时间处理goodsAmount
//获取出发时间 到现在 距离时间 // //获取出发时间 到现在 距离时间
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue(); // Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
//
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); // Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Set<Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens(); // Set<Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens();
//
for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) { // for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
if(StrUtil.isBlank(dic.getName())) { // if(StrUtil.isBlank(dic.getName())) {
continue; // continue;
} // }
String[] names = dic.getName().split("\\|"); // String[] names = dic.getName().split("\\|");
if(names.length < 2) { // if(names.length < 2) {
continue; // continue;
} // }
//
//符合范围 // //符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){ // if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmount = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{ // refundGoodsAmount = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount // //ga : goodsAmount
set("ga", goodsAmount); // set("ga", goodsAmount);
}})).toString()); // }})).toString());
refundDescBuilder = refundDescBuilder.insert(0, names[1]+ ","); // refundDescBuilder = refundDescBuilder.insert(0, names[1]+ ",");
break; // break;
} // }
} // }
//
return refundGoodsAmount; // return refundGoodsAmount;
} // }
//
/** // /**
* 退款子流程 // * 退款子流程
* @param baseOrder // * @param baseOrder
* @param refundDesc // * @param refundDesc 退款描述
* @param refundAmount // * @param refundAmount 退款金额
* @param refundType // * @param refundType 退款类型
* @param refundStatus // * @param refundStatus 退款状态
*/ // */
public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus) { // public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus) {
String refundTradeNo = null; // String refundTradeNo = null;
//0 小于 退款金额 // //0 小于 退款金额
if(BigDecimal.ZERO.compareTo(refundAmount) < 0) { // if(BigDecimal.ZERO.compareTo(refundAmount) < 0) {
OrderRefundVo orv = new OrderRefundVo(); // OrderRefundVo orv = new OrderRefundVo();
orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue()); // orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
orv.setOrderNo(baseOrder.getNo()); // orv.setOrderNo(baseOrder.getNo());
orv.setRefundDesc(refundDesc+ refundAmount.toString()); // orv.setRefundDesc(refundDesc+ refundAmount.toString());
orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue()); // orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
ObjectRestResponse<String> result = thirdFeign.refund(orv); // ObjectRestResponse<String> result = thirdFeign.refund(orv);
refundTradeNo = result.getData(); // refundTradeNo = result.getData();
if(null == refundTradeNo) { // if(null == refundTradeNo) {
log.error("退款没有refundTradeNo,订单号为:"+ baseOrder.getNo()+ ", 微服务调用结果为"+ JSONUtil.toJsonStr(result)); // log.error("退款没有refundTradeNo,订单号为:"+ baseOrder.getNo()+ ", 微服务调用结果为"+ JSONUtil.toJsonStr(result));
} // }
} // }
//
//记录订单退款记录 // //记录订单退款记录
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType); // Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType);
//
//更新订单的退款状态和退款时间 // //更新订单的退款状态和退款时间
BaseOrder updateBaseOrder = new BaseOrder(); // BaseOrder updateBaseOrder = new BaseOrder();
updateBaseOrder.setId(baseOrder.getId()); // updateBaseOrder.setId(baseOrder.getId());
updateBaseOrder.setRefundStatus(refundStatus); // updateBaseOrder.setRefundStatus(refundStatus);
updateBaseOrder.setRefundTime(System.currentTimeMillis()); // updateBaseOrder.setRefundTime(System.currentTimeMillis());
updateBaseOrder.setVersion(baseOrder.getVersion()); // updateBaseOrder.setVersion(baseOrder.getVersion());
if(SYS_TRUE.equals(flag) && null != refundStatus) { // if(SYS_TRUE.equals(flag) && null != refundStatus) {
BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder); // BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder);
} // }
} // }
//
/** // /**
* 记录订单退款记录 // * 退款子流程
* @param orderId // * @param baseOrder
* @param refundDesc // * @param refundDesc 退款描述
* @param refundAmount // * @param refundAmount 退款金额
* @param refundTradeNo // * @param refundType 退款类型
*/ // * @param refundStatus 退款状态
private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, String refundTradeNo, Integer refundType) { // */
//如果返回的流水为空,则当做失败 // public void refundSubProcessNew(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus) {
Integer refundStatus = SYS_TRUE; // String refundTradeNo = null;
if(StrUtil.isBlank(refundTradeNo)) { // //0 小于 退款金额
refundStatus = SYS_FALSE; // if(BigDecimal.ZERO.compareTo(refundAmount) < 0) {
} // OrderRefundVo orv = new OrderRefundVo();
// orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
//创建订单退款记录 // orv.setOrderNo(baseOrder.getNo());
OrderRefund orderRefund = new OrderRefund(){{ // orv.setRefundDesc(refundDesc+ refundAmount.toString());
setOrderId(orderId); // orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
setRefundTime(System.currentTimeMillis()); // ObjectRestResponse<String> result = thirdFeign.refund(orv);
setTradeNo(refundTradeNo); // refundTradeNo = result.getData();
setRefundType(RefundTypeEnum.ORDER_FUND.getCode()); // if(null == refundTradeNo) {
}}; // log.error("退款没有refundTradeNo,订单号为:"+ baseOrder.getNo()+ ", 微服务调用结果为"+ JSONUtil.toJsonStr(result));
orderRefund.setOriginalRefundAmount(originalRefundAmount); // }
orderRefund.setDeductAmount(originalRefundAmount.subtract(refundAmount)); // }
orderRefund.setRefundAmount(refundAmount); //
orderRefund.setRefundDesc(refundDesc); // //记录订单退款记录
orderRefund.setRefundStatus(refundStatus); // Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType);
orderRefund.setRefundType(refundType); //
insertSelective(orderRefund); // //更新订单的退款状态和退款时间
// BaseOrder updateBaseOrder = new BaseOrder();
return refundStatus; // updateBaseOrder.setId(baseOrder.getId());
} // updateBaseOrder.setRefundStatus(refundStatus);
// updateBaseOrder.setRefundTime(System.currentTimeMillis());
// updateBaseOrder.setVersion(baseOrder.getVersion());
// if(SYS_TRUE.equals(flag) && null != refundStatus) {
// BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder);
// }
// }
//
// /**
// * 记录订单退款记录
// * @param orderId
// * @param refundDesc
// * @param refundAmount
// * @param refundTradeNo
// */
// private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, String refundTradeNo, Integer refundType) {
// //如果返回的流水为空,则当做失败
// Integer refundStatus = SYS_TRUE;
// if(StrUtil.isBlank(refundTradeNo)) {
// refundStatus = SYS_FALSE;
// }
//
// //创建订单退款记录
// OrderRefund orderRefund = new OrderRefund(){{
// setOrderId(orderId);
// setRefundTime(System.currentTimeMillis());
// setTradeNo(refundTradeNo);
// setRefundType(RefundTypeEnum.ORDER_FUND.getCode());
// }};
// orderRefund.setOriginalRefundAmount(originalRefundAmount);
// orderRefund.setDeductAmount(originalRefundAmount.subtract(refundAmount));
// orderRefund.setRefundAmount(refundAmount);
// orderRefund.setRefundDesc(refundDesc);
// orderRefund.setRefundStatus(refundStatus);
// orderRefund.setRefundType(refundType);
// insertSelective(orderRefund);
//
// return refundStatus;
// }
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import cn.hutool.extra.template.Template; ...@@ -5,6 +5,7 @@ import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil; import cn.hutool.extra.template.TemplateUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Maps;
import com.xxfc.platform.order.entity.OrderTemplate; import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.mapper.OrderTemplateMapper; import com.xxfc.platform.order.mapper.OrderTemplateMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -57,4 +58,17 @@ public class OrderTemplateBiz extends BaseBiz<OrderTemplateMapper,OrderTemplate> ...@@ -57,4 +58,17 @@ public class OrderTemplateBiz extends BaseBiz<OrderTemplateMapper,OrderTemplate>
return template.render(map); return template.render(map);
} }
public static void main(String[] args) {
String tempStr = "{\"key\":\"费用明细\", \"val\":\"\", \"consumeAmount\":\"${consumeAmount}\",\"children\":[${children}]}";
Map map = Maps.newHashMap();
map.put("consumeAmount", "");
map.put("children", "{\"test\" : \"1111\" }");
//匹配参数 填充参数
TemplateEngine engine = TemplateUtil.createEngine();
Template template = engine.getTemplate(tempStr);
String result = template.render(new Dict(map));
System.out.println(result);
}
} }
\ No newline at end of file
...@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO; import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
...@@ -13,6 +12,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException; ...@@ -13,6 +12,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.user.UserInfoBiz; import com.xxfc.platform.activity.user.UserInfoBiz;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.contant.enumerate.CrosstownTypeEnum; import com.xxfc.platform.order.contant.enumerate.CrosstownTypeEnum;
import com.xxfc.platform.order.contant.enumerate.DepositRefundStatus; import com.xxfc.platform.order.contant.enumerate.DepositRefundStatus;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
...@@ -34,6 +34,9 @@ import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo; ...@@ -34,6 +34,9 @@ import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.HashedMap; import org.apache.commons.collections4.map.HashedMap;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -63,27 +66,29 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -63,27 +66,29 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
@Autowired @Autowired
private OrderRentVehicleBiz orderRentVehicleBiz; OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired @Autowired
private OrderDepositRefundRecordBiz orderDepositRefundRecordBiz; OrderDepositRefundRecordBiz orderDepositRefundRecordBiz;
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; BaseOrderBiz baseOrderBiz;
@Autowired
OrderItemBiz orderItemBiz;
public OrderVehicleCrosstown get(Integer id) { public OrderVehicleCrosstown get(Integer id) {
return selectById(id); return selectById(id);
} }
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
public List<OrderVehicleCrosstownDto> selectByOrderId(OrderVehicleCrosstownDto orderVehicleCrosstownDto) { public List<OrderVehicleCrosstownDto> selectByOrderId(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
List<OrderVehicleCrosstownDto> list = mapper.selectByOrderId(orderVehicleCrosstownDto); List<OrderVehicleCrosstownDto> list = mapper.selectByOrderId(orderVehicleCrosstownDto);
for (OrderVehicleCrosstownDto value : list) { for (OrderVehicleCrosstownDto value : list) {
if(value != null && value.getOrperaterId() != null && value.getType() != 1) { if (value != null && value.getOrperaterId() != null && value.getType() != 1) {
UserDTO userDTO = userFeign.userinfoByUid(value.getOrperaterId()).getData(); UserDTO userDTO = userFeign.userinfoByUid(value.getOrperaterId()).getData();
if(userDTO != null) { if (userDTO != null) {
CompanyDetail branchCompany = vehicleFeign.getCompanyDetail(userDTO.getCompanyId()).getData(); CompanyDetail branchCompany = vehicleFeign.getCompanyDetail(userDTO.getCompanyId()).getData();
if(branchCompany != null) { if (branchCompany != null) {
value.setCustomerPhone(branchCompany.getVehiceServicePhone()); value.setCustomerPhone(branchCompany.getVehiceServicePhone());
} }
} }
...@@ -148,7 +153,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -148,7 +153,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ObjectRestResponse<OrderVehicleCrosstownDto> add(OrderVehicleCrosstownDto orderVehicleCrosstownDto) { public ObjectRestResponse<OrderVehicleCrosstownDto> add(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
log.info("添加的参数:orderVehicaleCrosstown = {}", orderVehicleCrosstownDto); log.info("交还车参数:orderVehicleCrosstown = {}", orderVehicleCrosstownDto);
UserDTO userDTO = userInfoBiz.getAdminUserInfo(); UserDTO userDTO = userInfoBiz.getAdminUserInfo();
if (userDTO == null) { if (userDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, "token is null or invalid"); return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, "token is null or invalid");
...@@ -163,20 +168,20 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -163,20 +168,20 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId()); OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId());
if(orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) { if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) {
boolean flag = getTodayTime(orderRentVehicleDetail.getEndTime()); boolean flag = getTodayTime(orderRentVehicleDetail.getEndTime());
if (!flag) { if (!flag) {
return ObjectRestResponse.createFailedResult(3502, "今日不是交车日期"); return ObjectRestResponse.createFailedResult(3502, "今日不是交车日期");
} }
if(userDTO.getCompanyId() != orderRentVehicleDetail.getStartCompanyId()) { if (userDTO.getCompanyId() != orderRentVehicleDetail.getStartCompanyId()) {
return ObjectRestResponse.createFailedResult(3501, "无交车权限"); return ObjectRestResponse.createFailedResult(3501, "无交车权限");
} }
} else { } else {
if(userDTO.getCompanyId() != orderRentVehicleDetail.getEndCompanyId()) { if (userDTO.getCompanyId() != orderRentVehicleDetail.getEndCompanyId()) {
return ObjectRestResponse.createFailedResult(3503, "无收车权限"); return ObjectRestResponse.createFailedResult(3503, "无收车权限");
} }
} }
if(baseOrder.getStatus() != -1) { if (baseOrder.getStatus() != -1) {
Vehicle vehicle = null; Vehicle vehicle = null;
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId()); RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
log.info("获取车辆信息返回消息:{}", restResponse.getMessage()); log.info("获取车辆信息返回消息:{}", restResponse.getMessage());
...@@ -186,7 +191,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -186,7 +191,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
if (vehicle == null) { if (vehicle == null) {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode(), ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc()); return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode(), ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc());
} }
if( vehicle.getMileageLastUpdate() != null) { if (vehicle.getMileageLastUpdate() != null) {
//判断车辆公里数 //判断车辆公里数
if (orderVehicleCrosstownDto.getMileage() == null || orderVehicleCrosstownDto.getMileage() <= vehicle.getMileageLastUpdate()) { if (orderVehicleCrosstownDto.getMileage() == null || orderVehicleCrosstownDto.getMileage() <= vehicle.getMileageLastUpdate()) {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getCode(), ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getDesc()); return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getCode(), ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getDesc());
...@@ -204,7 +209,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -204,7 +209,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
vehicleDepartureVo.setDepartureBranchCompanyId(orderRentVehicleDetail.getStartCompanyId()); vehicleDepartureVo.setDepartureBranchCompanyId(orderRentVehicleDetail.getStartCompanyId());
vehicleDepartureVo.setExpectArrivalBranchCompanyId(orderRentVehicleDetail.getEndCompanyId()); vehicleDepartureVo.setExpectArrivalBranchCompanyId(orderRentVehicleDetail.getEndCompanyId());
vehicleDepartureVo.setMileage(orderVehicleCrosstownDto.getMileage()); vehicleDepartureVo.setMileage(orderVehicleCrosstownDto.getMileage());
if(appUserDTO != null) { if (appUserDTO != null) {
vehicleDepartureVo.setUser(appUserDTO.getNickname()); vehicleDepartureVo.setUser(appUserDTO.getNickname());
vehicleDepartureVo.setUserTel(appUserDTO.getUsername()); vehicleDepartureVo.setUserTel(appUserDTO.getUsername());
} else { } else {
...@@ -229,7 +234,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -229,7 +234,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
vehicleArrivalVo.setMileage(orderVehicleCrosstownDto.getMileage()); vehicleArrivalVo.setMileage(orderVehicleCrosstownDto.getMileage());
vehicleArrivalVo.setRecycleMan(userDTO.getName()); vehicleArrivalVo.setRecycleMan(userDTO.getName());
vehicleArrivalVo.setBookRecordId(orderRentVehicleDetail.getBookRecordId()); vehicleArrivalVo.setBookRecordId(orderRentVehicleDetail.getBookRecordId());
if(appUserDTO != null) { if (appUserDTO != null) {
vehicleArrivalVo.setRecycleManTel(appUserDTO.getUsername()); vehicleArrivalVo.setRecycleManTel(appUserDTO.getUsername());
} else { } else {
vehicleArrivalVo.setRecycleManTel("13565235623"); vehicleArrivalVo.setRecycleManTel("13565235623");
...@@ -242,25 +247,42 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -242,25 +247,42 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
} }
Double cost = 0.0; Double cost = 0.0;
//定损扣除费用
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getDedDetail())) { if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getDedDetail())) {
JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail()); JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail());
for (int i = 0; i < jsonArray.size(); i++) { for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString()); JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
if(jsonObject!= null) { if (jsonObject != null) {
cost += Double.parseDouble(jsonObject.getString("cost")); cost += Double.parseDouble(jsonObject.getString("cost"));
} }
} }
} }
BigDecimal amount = new BigDecimal(cost.toString()).divide(new BigDecimal("1"), 2, BigDecimal.ROUND_UP); //延期扣除费用
orderVehicleCrosstownDto.setDeductionCost(amount); if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getViolateDetail())) {
//扣除费用 JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail());
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(amount)); for (int i = 0; i < jsonArray.size(); i++) {
if(orderVehicleCrosstownDto.getRestDeposit().compareTo(getAmount()) == -1) { //剩余金额小于保证金 JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
return ObjectRestResponse.createFailedResult(500,"押金不足,不能交车,请联系客服!"); if (jsonObject != null) {
if (jsonObject.getString("cost") != null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
if (jsonObject.getString("excessCost") != null) {
cost += Double.parseDouble(jsonObject.getString("excessCost"));
}
}
} }
}
orderVehicleCrosstownDto.getViolateDetail();
BigDecimal amount = new BigDecimal(cost.toString()).divide(new BigDecimal("1"), 2, BigDecimal.ROUND_UP);
//出车成功后修改订单状态 //出车成功后修改订单状态
List<OrderVehicleCrosstownDto> oldValue = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto); List<OrderVehicleCrosstownDto> oldValue = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (oldValue.size() == 1) { if (oldValue.size() == 1) {
orderVehicleCrosstownDto.setDeductionCost(oldValue.get(0).getDeductionCost().add(amount));
//扣除费用
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(orderVehicleCrosstownDto.getDeductionCost()));
if (orderVehicleCrosstownDto.getRestDeposit().compareTo(getAmount()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500, "押金不足,不能交车,请联系客服!");
}
BeanUtil.copyProperties(orderVehicleCrosstownDto, oldValue.get(0), CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true)); BeanUtil.copyProperties(orderVehicleCrosstownDto, oldValue.get(0), CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
getOrderLicense(orderVehicleCrosstownDto); getOrderLicense(orderVehicleCrosstownDto);
handleOrderStatus(baseOrder, orderRentVehicleDetail, oldValue.get(0)); handleOrderStatus(baseOrder, orderRentVehicleDetail, oldValue.get(0));
...@@ -271,10 +293,17 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -271,10 +293,17 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
return ObjectRestResponse.succ(oldValue.get(0)); return ObjectRestResponse.succ(oldValue.get(0));
} else if (oldValue.size() <= 0) { } else if (oldValue.size() <= 0) {
orderVehicleCrosstownDto.setDeductionCost(amount);
//扣除费用
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(orderVehicleCrosstownDto.getDeductionCost()));
if (orderVehicleCrosstownDto.getRestDeposit().compareTo(getAmount()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500, "押金不足,不能交车,请联系客服!");
}
getOrderLicense(orderVehicleCrosstownDto); getOrderLicense(orderVehicleCrosstownDto);
orderVehicleCrosstownBiz.insertSelective(orderVehicleCrosstownDto); orderVehicleCrosstownBiz.insertSelective(orderVehicleCrosstownDto);
OrderVehicleCrosstown orderVehicleCrosstown = orderVehicleCrosstownBiz.selectOne(orderVehicleCrosstownDto); OrderVehicleCrosstown orderVehicleCrosstown = orderVehicleCrosstownBiz.selectOne(orderVehicleCrosstownDto);
handleOrderStatus(baseOrder, orderRentVehicleDetail, orderVehicleCrosstown); handleOrderStatus(baseOrder, orderRentVehicleDetail, orderVehicleCrosstown);
orderVehicleCrosstownBiz.updateSelectiveByIdRe(orderVehicleCrosstown);
RestResponse<Vehicle> response = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId()); RestResponse<Vehicle> response = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
if (response.getData() != null) { if (response.getData() != null) {
orderVehicleCrosstownDto.setVehicleNumberPlat(response.getData().getNumberPlate()); orderVehicleCrosstownDto.setVehicleNumberPlat(response.getData().getNumberPlate());
...@@ -286,22 +315,25 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -286,22 +315,25 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
private void handleOrderStatus(BaseOrder baseOrder, OrderRentVehicleDetail orderRentVehicleDetail, OrderVehicleCrosstown orderVehicleCrosstown) { private void handleOrderStatus(BaseOrder baseOrder, OrderRentVehicleDetail orderRentVehicleDetail, OrderVehicleCrosstown orderVehicleCrosstown) {
//交车完成 设置订单状态为出行中 //交车完成 设置订单状态为出行中
BigDecimal totalAmount = new BigDecimal(0); BigDecimal totalAmount = orderRentVehicleDetail.getDeposit();
ObjectRestResponse<OrderPageVO> objectRestResponse = baseOrderBiz.getOrderDetail(baseOrder.getNo());
if (objectRestResponse.getData() != null && objectRestResponse.getData().getOrderRentVehicleDetail() != null) {
//总押金-保留金
totalAmount = objectRestResponse.getData().getOrderRentVehicleDetail().getDeposit();
}
if (baseOrder.getStatus() == OrderStatusEnum.ORDER_TOSTART.getCode()) {//交车 if (baseOrder.getStatus() == OrderStatusEnum.ORDER_TOSTART.getCode()) {//交车
baseOrder.setStatus(OrderStatusEnum.ORDER_WAIT.getCode()); baseOrder.setStatus(OrderStatusEnum.ORDER_WAIT.getCode());
baseOrder = baseOrderBiz.updateSelectiveByIdReT(baseOrder); baseOrder = baseOrderBiz.updateSelectiveByIdReT(baseOrder);
} else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_WAIT.getCode()) { //还车 } else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_WAIT.getCode()) { //还车
if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.ARRIVE.getCode()) {//不定损直接还车 if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.ARRIVE.getCode()) {//不定损直接还车
//添加非定损记录 //添加非定损记录
Integer orderId = baseOrder.getId();
List<OrderVehicleCrosstownDto> list = orderVehicleCrosstownBiz.selectByOrderId(new OrderVehicleCrosstownDto() {{
setOrderId(orderId);
setType(CrosstownTypeEnum.ARRIVE.getCode());
}});
if (list != null && list.size() > 0) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = list.get(0);
OrderVehicleCrosstown orderVehicleCrosstown1 = new OrderVehicleCrosstown();
BeanUtil.copyProperties(orderVehicleCrosstownDto, orderVehicleCrosstown1, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
DepositRefundRecord depositRefundRecord = new DepositRefundRecord(); DepositRefundRecord depositRefundRecord = new DepositRefundRecord();
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost()); depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
depositRefundRecord.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown.getDeductionCost())); depositRefundRecord.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown1.getDeductionCost()));
depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount())); depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount()));
depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId()); depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId());
orderDepositRefundRecordBiz.saveNormalRecord(depositRefundRecord); orderDepositRefundRecordBiz.saveNormalRecord(depositRefundRecord);
...@@ -312,6 +344,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -312,6 +344,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderRentVehicleDetail.setFixedLossStatus(0); orderRentVehicleDetail.setFixedLossStatus(0);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail); orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH); baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH);
}
} else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()) { //定损还车,添加定损记录 } else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()) { //定损还车,添加定损记录
//添加定损记录 //添加定损记录
DepositRefundRecord depositRefundRecord = new DepositRefundRecord(); DepositRefundRecord depositRefundRecord = new DepositRefundRecord();
...@@ -325,6 +358,19 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -325,6 +358,19 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
baseOrderBiz.updateSelectiveByIdReT(baseOrder); baseOrderBiz.updateSelectiveByIdReT(baseOrder);
orderRentVehicleDetail.setFixedLossStatus(1); orderRentVehicleDetail.setFixedLossStatus(1);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail); orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
} else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS_NOW.getCode()) { //直接定损还车
orderVehicleCrosstown.setType(CrosstownTypeEnum.FIXED_LOSS.getCode());
DepositRefundRecord depositRefundRecord = new DepositRefundRecord();
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
depositRefundRecord.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown.getDeductionCost()));
depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount()));
depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId());
orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord);
//修改訂單狀態為已完成
baseOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
baseOrderBiz.updateSelectiveByIdReT(baseOrder);
orderRentVehicleDetail.setFixedLossStatus(1);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
} }
} else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_FIXED_LOSS.getCode()) {//定损后还车 } else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_FIXED_LOSS.getCode()) {//定损后还车
DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUND.getCode()); DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUND.getCode());
...@@ -341,7 +387,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -341,7 +387,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
newValue.setId(null); newValue.setId(null);
orderDepositRefundRecordBiz.save(newValue); orderDepositRefundRecordBiz.save(newValue);
DepositRefundRecord nextValue = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUNDARRIVAL.getCode()); DepositRefundRecord nextValue = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUNDARRIVAL.getCode());
if(nextValue != null) { if (nextValue != null) {
nextValue.setRestAmount(newValue.getRestAmount()); nextValue.setRestAmount(newValue.getRestAmount());
orderDepositRefundRecordBiz.update(nextValue); orderDepositRefundRecordBiz.update(nextValue);
} }
...@@ -354,6 +400,8 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -354,6 +400,8 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
} }
//添加订单驾驶人信息
public void getOrderLicense(OrderVehicleCrosstownDto orderVehicleCrosstownDto) { public void getOrderLicense(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getLicenseIdCard())) { if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getLicenseIdCard())) {
OrderUserLicense orderUserLicense = new OrderUserLicense(); OrderUserLicense orderUserLicense = new OrderUserLicense();
...@@ -377,7 +425,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -377,7 +425,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
public boolean getTodayTime(Long time) { public boolean getTodayTime(Long time) {
long current = System.currentTimeMillis(); long current = System.currentTimeMillis();
if (current <= (time / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset() ) + 24 * 60 * 60 * 1000 -1) { if (current <= (time / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset()) + 24 * 60 * 60 * 1000 - 1) {
return true; return true;
} }
return false; return false;
......
package com.xxfc.platform.order.biz.inner; package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.app.entity.Cofig;
import com.xxfc.platform.app.feign.ConfigFeign; import com.xxfc.platform.app.feign.ConfigFeign;
import com.xxfc.platform.order.biz.OrderAccountBiz;
import com.xxfc.platform.order.biz.OrderItemBiz; import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderRefundBiz; import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.RefundStatusEnum;
import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO; import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.dto.SmsTemplateDTO;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists; import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.HOUR_MINUTE_FORMATTE_HUTOOL;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
/** /**
* 订单退款记录表 * 订单退款记录表
...@@ -71,22 +54,33 @@ public class OrderCalculateBiz { ...@@ -71,22 +54,33 @@ public class OrderCalculateBiz {
@Autowired @Autowired
OrderItemBiz orderItemBiz; OrderItemBiz orderItemBiz;
public InProgressVO inProgressCalculate(BaseOrder baseOrder, OrderItem orderItem, Integer freeDays, Integer useDays) { @Autowired
OrderAccountBiz orderAccountBiz;
public InProgressVO inProgressCalculate(BaseOrder baseOrder, OrderItem orderItem, Integer freeDays, Integer useDays, OrderAccountDetail oad) {
BigDecimal refundAmount = BigDecimal.ZERO;
InProgressVO inProgressVO = new InProgressVO();
inProgressVO.setUsedDays(useDays);
inProgressVO.setUsedfreeDays(freeDays);
inProgressVO.setUsedAmount(orderItem.getUnitPrice().multiply(new BigDecimal(useDays+ "")));
inProgressVO.setUsedFreeDaysAmount(orderItem.getUnitPrice().multiply(new BigDecimal(freeDays+ "")));
//计算:剩余免费天数 //计算:剩余免费天数
Integer backFreeDays = freeDays - useDays; Integer backFreeDays = freeDays - useDays;
//待返还的免费天数
List<String> backCouponNos = Lists.newArrayList();
//剩余天数
Integer residueDays = orderItem.getTotalNum() - useDays;
//过了出发时间取消订单 ,优先使用免费天数 //过了出发时间取消订单 ,优先使用免费天数
if(backFreeDays <= 0) { if(backFreeDays <= 0) {
//大于总天数 只返回押金 //使用天数 小于 总天数
if(useDays >= orderItem.getTotalNum()) { if(useDays < orderItem.getTotalNum()) {
//退押金
//orderRefundBiz.rentRefundDepositProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, freeDayAmount);
}else {
//需要扣除订单费用 //需要扣除订单费用
//判断是否达到优惠券条件 不符合则返还优惠券 //判断是否达到优惠券条件 不符合则返还优惠券
//消费天数
Integer consumeDays = 0 - backFreeDays; Integer consumeDays = 0 - backFreeDays;
//计算使用天数的费用 //计算使用天数的费用
BigDecimal consumeAmount = orderItem.getUnitPrice().multiply(new BigDecimal(consumeDays+"")); BigDecimal consumeAmount = orderItem.getUnitPrice().multiply(new BigDecimal(consumeDays+""));
List<String> backCouponNos = Lists.newArrayList();
List<BigDecimal> couponAmounts = Lists.newArrayList(); List<BigDecimal> couponAmounts = Lists.newArrayList();
for(String tickerNo : baseOrder.getCouponTickerNos().split(",")) { for(String tickerNo : baseOrder.getCouponTickerNos().split(",")) {
BigDecimal couponAmount = activityFeign.use(baseOrder.getUserId(), Lists.newArrayList(tickerNo), baseOrder.getNo(), Coupon.CHANNEL_RENT, consumeAmount, ActivityFeign.TYPE_CHECK); BigDecimal couponAmount = activityFeign.use(baseOrder.getUserId(), Lists.newArrayList(tickerNo), baseOrder.getNo(), Coupon.CHANNEL_RENT, consumeAmount, ActivityFeign.TYPE_CHECK);
...@@ -97,14 +91,60 @@ public class OrderCalculateBiz { ...@@ -97,14 +91,60 @@ public class OrderCalculateBiz {
backCouponNos.add(tickerNo); backCouponNos.add(tickerNo);
} }
} }
for(BigDecimal couponAmount : couponAmounts) {
consumeAmount = consumeAmount.subtract(couponAmount);
}
if(consumeAmount.compareTo(orderItem.getRealAmount()) > 0) {
//消费金额 大于真实的金额 增加额外费用
inProgressVO.setExtraAmount(consumeAmount.subtract(orderItem.getRealAmount()));
// consumeAmount = orderItem
OrderAccountDeduction extraDeduction = orderAccountBiz.initDeduction(inProgressVO.getExtraAmount(), "消费额外费用", DeductionTypeEnum.EXTRA, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(extraDeduction);
}else {
//否则,设置返回钱
refundAmount = refundAmount.add(orderItem.getRealAmount().subtract(consumeAmount));
}
} else {
} }
}else { }else {
//返回剩余免费天数,返回优惠券,订单款 //返回剩余免费天数,返回优惠券,订单款
refundAmount = refundAmount.add(orderItem.getRealAmount());
inProgressVO.setBackFreeDays(backFreeDays);
}
inProgressVO.setRefundOrderAmount(refundAmount);
inProgressVO.setBackCoupons(backCouponNos);
//计算违约金
//residueDays * 身份价格
if(residueDays > 0) {
if(residueDays > 2) {
residueDays = 2;
}
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}else if(residueDays < 0){
//如果订单 出发中 或者 已完成 或者定损中
if(OrderStatusEnum.ORDER_WAIT.equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FINISH.equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FIXED_LOSS.equals(baseOrder.getStatus())) {
Integer overDays = 0 - residueDays;
if(overDays > 2) {
overDays = 2;
}
//超过的天数 * 200% * 单价
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal(2+ "")).multiply(new BigDecimal((overDays + ""))));
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_DELAY, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}
} }
return new InProgressVO(); return inProgressVO;
} }
public InProgressVO inProgressCalculate(BaseOrder baseOrder, Integer useDays) { public InProgressVO inProgressCalculate(BaseOrder baseOrder, Integer useDays) {
...@@ -113,6 +153,15 @@ public class OrderCalculateBiz { ...@@ -113,6 +153,15 @@ public class OrderCalculateBiz {
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum(); Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum();
return inProgressCalculate(baseOrder, orderItem, freeDays, useDays); return inProgressCalculate(baseOrder, orderItem, freeDays, useDays, null);
}
public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, OrderItem orderItem, Integer useDays) {
InProgressVO inProgressVO = inProgressCalculate(baseOrder, orderItem, orvd.getFreeDays(), useDays, oad);
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount()).subtract(inProgressVO.getViolateAmount()));
oad.setOrderAmount(inProgressVO.getRefundOrderAmount());
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setOriginOrderAmount(baseOrder.getRealAmount());
return inProgressVO;
} }
} }
\ No newline at end of file
package com.xxfc.platform.order.biz.inner; package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.*; import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.contant.enumerate.*; import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
...@@ -55,6 +61,12 @@ public class OrderCancelBiz { ...@@ -55,6 +61,12 @@ public class OrderCancelBiz {
@Autowired @Autowired
OrderMsgBiz orderMsgBiz; OrderMsgBiz orderMsgBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
...@@ -67,6 +79,9 @@ public class OrderCancelBiz { ...@@ -67,6 +79,9 @@ public class OrderCancelBiz {
@Autowired @Autowired
ThirdFeign thirdFeign; ThirdFeign thirdFeign;
@Autowired
ActivityFeign activityFeign;
private static Map<Integer, List<Integer>> cancelAble; private static Map<Integer, List<Integer>> cancelAble;
static { static {
cancelAble = new HashMap<Integer, List<Integer>>(); cancelAble = new HashMap<Integer, List<Integer>>();
...@@ -100,6 +115,8 @@ public class OrderCancelBiz { ...@@ -100,6 +115,8 @@ public class OrderCancelBiz {
setVersion(baseOrder.getVersion()); setVersion(baseOrder.getVersion());
}}; }};
BaseOrder hasUpdateOrder = baseOrderBiz.updateSelectiveByIdReT(updateOrder); BaseOrder hasUpdateOrder = baseOrderBiz.updateSelectiveByIdReT(updateOrder);
InProgressVO inProgressVO = null;
OrderAccountDetail oad = new OrderAccountDetail();
//触发退款流程 //触发退款流程
//判断是否已支付 //判断是否已支付
...@@ -110,41 +127,51 @@ public class OrderCancelBiz { ...@@ -110,41 +127,51 @@ public class OrderCancelBiz {
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//原退还押金
BigDecimal freeDayAmount = BigDecimal.ZERO;
//判断是否使用免费天数,并且进行扣款
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{ OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode()); setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
freeDayAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
} //原退还押金
Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum();
BigDecimal freeDayAmount = BigDecimal.ZERO;
//如果超过出发时间,不能取消订单 //如果超过出发时间,不能取消订单
//根据时间处理goodsAmount //根据时间处理goodsAmount
//获取出发时间 到现在 距离时间 //获取出发时间 到现在 距离时间
Long timeLag = orvd.getStartTime() - System.currentTimeMillis(); Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
//后面允许开始时间过后可以取消订单 if(timeLag < 0 ) {
// if(timeLag < 0) { //开始时间当天时间戳
// throw new BaseException(ResultCode.FAILED_CODE, new HashSet<String>(){{ Long beginOfStartDay = DateUtil.beginOfDay(DateUtil.date(orvd.getStartTime())).getTime();
// add("已超过出发时间,不能取消订单"); //计算:使用天数 当前时间 - 开始时间的0时0分0秒
// }}); Long useTimeLag = System.currentTimeMillis() - beginOfStartDay;
// } Integer useDays = new BigDecimal(useTimeLag + "").divide(new BigDecimal((24 * 60 * 60 * 1000)+ "")).setScale(0, BigDecimal.ROUND_UP).intValue();
inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, orderItem, useDays);
//结合
//退款子流程: 订单基础,退款描述,退款金额
orderAccountBiz.refundSubProcess(baseOrder, "", baseOrder.getRealAmount().subtract(orvd.getDeposit()), oad.getDepositAmount().add(oad.getOrderAmount()), AccountTypeEnum.OUT_ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad);
//退款流程 }else {
//退订单款 //没到出车时间
orderRefundBiz.rentRefundProcess(hasUpdateOrder, timeLag, APP_ORDER+ "_"+ RENT_REFUND); //判断是否使用免费天数,并且进行扣款
if(freeDays > 0) {
freeDayAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
//退押金 //违约金封顶 租车身份价 * 2天
orderRefundBiz.rentRefundDepositProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, freeDayAmount); BigDecimal topAmount = orderItem.getUnitPrice().multiply(new BigDecimal(2+ ""));
if(freeDayAmount.compareTo(topAmount) > 0) {
freeDayAmount = freeDayAmount;
}
}
//退款流程
orderAccountBiz.rentRefundProcessCancel(hasUpdateOrder, orderItem.getRealAmount(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, orvd.getDeposit(), freeDayAmount);
}
//已付款的取消订单发送消息 //已付款的取消订单发送消息
try { try {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData(); AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
//处理后台用户提醒短信的发送 //处理后台用户提醒短信的发送
// orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_CANCEL);
orderMsgBiz.handelMsgCancel(orvd, otd, omd, baseOrder, appUserDTO); orderMsgBiz.handelMsgCancel(orvd, otd, omd, baseOrder, appUserDTO);
}catch (Exception e) { }catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
...@@ -154,15 +181,29 @@ public class OrderCancelBiz { ...@@ -154,15 +181,29 @@ public class OrderCancelBiz {
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{ otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
Long timeLag = otd.getStartTime() - System.currentTimeMillis(); Long timeLag = otd.getStartTime() - System.currentTimeMillis();
OrderItem adultItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.TOUR_ADULT.getCode());
setOrderId(baseOrder.getId());
}});
OrderItem childItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.TOUR_CHILD.getCode());
setOrderId(baseOrder.getId());
}});
//判断是省内还是省外 //判断是省内还是省外
String key = TOUR_IN_REFUND; String key = TOUR_IN_REFUND;
if(SYS_TRUE.equals(otd.getIsOutside())) { if(SYS_TRUE.equals(otd.getIsOutside())) {
key = TOUR_REFUND; key = TOUR_REFUND;
} }
//退款流程 //退款流程
orderRefundBiz.rentRefundProcess(hasUpdateOrder, timeLag, APP_ORDER+ "_"+ key); orderAccountBiz.rentRefundProcessCancel(hasUpdateOrder, adultItem.getRealAmount().add(childItem.getRealAmount()), timeLag, APP_ORDER+ "_"+ key, BigDecimal.ZERO, BigDecimal.ZERO);
//站点总人数减少
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, (otd.getTotalNumber() * -1));
} }
} }
...@@ -183,11 +224,20 @@ public class OrderCancelBiz { ...@@ -183,11 +224,20 @@ public class OrderCancelBiz {
//取消租车免费天数使用 //取消租车免费天数使用
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) { if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
int result = userFeign.memberDays(baseOrder.getUserId(), orvd.getFreeDays(), UserFeign.MEMBER_DAYS_WITHDRAW); Integer freeDays = (null == inProgressVO) ? orvd.getFreeDays(): inProgressVO.getBackFreeDays();
int result = userFeign.memberDays(baseOrder.getUserId(), freeDays, UserFeign.MEMBER_DAYS_WITHDRAW);
if(result < 0) { if(result < 0) {
throw new BaseException(ResultCode.FAILED_CODE); throw new BaseException(ResultCode.FAILED_CODE);
} }
} }
//返还优惠券
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
List<String> backCoupons = (null == inProgressVO)? inProgressVO.getBackCoupons(): Convert.convert(List.class, baseOrder.getCouponTickerNos().split(","));
for(String backCoupon : backCoupons) {
activityFeign.cancelUse(backCoupon);
}
}
}else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) { }else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{ otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
......
...@@ -10,6 +10,7 @@ import com.xxfc.platform.order.entity.BaseOrder; ...@@ -10,6 +10,7 @@ import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderVehicleCrosstown; import com.xxfc.platform.order.entity.OrderVehicleCrosstown;
import com.xxfc.platform.order.entity.OrderViolation; import com.xxfc.platform.order.entity.OrderViolation;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary; import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
...@@ -61,6 +62,9 @@ public class RentDepositJobHandler extends IJobHandler { ...@@ -61,6 +62,9 @@ public class RentDepositJobHandler extends IJobHandler {
@Autowired @Autowired
OrderRefundBiz orderRefundBiz; OrderRefundBiz orderRefundBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired @Autowired
OrderMsgBiz orderMsgBiz; OrderMsgBiz orderMsgBiz;
...@@ -120,7 +124,9 @@ public class RentDepositJobHandler extends IJobHandler { ...@@ -120,7 +124,9 @@ public class RentDepositJobHandler extends IJobHandler {
refundAmont = orvd.getReturnPayResidue(); refundAmont = orvd.getReturnPayResidue();
refundDesc += refundAmont.toString(); refundDesc += refundAmont.toString();
} }
orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT); OrderAccountDetail oad = new OrderAccountDetail();
orderAccountBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), AccountTypeEnum.OUT_RESIDUE_DEPOSIT, oad);
//orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), DepositRefundStatus.VIOLATIONARRIVAL); orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), DepositRefundStatus.VIOLATIONARRIVAL);
orderMsgBiz.handelMsgDeposit(orvd, baseOrder, userFeign.userDetailById(baseOrder.getUserId()).getData()); orderMsgBiz.handelMsgDeposit(orvd, baseOrder, userFeign.userDetailById(baseOrder.getUserId()).getData());
} }
......
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderAccount;
import tk.mybatis.mapper.common.Mapper;
/**
* 订单帐目
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
*/
public interface OrderAccountMapper extends Mapper<OrderAccount> {
}
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.mqhandler; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.mqhandler;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import com.xxfc.platform.order.biz.OrderAccountBiz;
import com.xxfc.platform.order.biz.OrderRefundBiz; import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -27,6 +28,9 @@ public class RefundMQHandler { ...@@ -27,6 +28,9 @@ public class RefundMQHandler {
@Autowired @Autowired
OrderRefundBiz orderRefundBiz; OrderRefundBiz orderRefundBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
/** /**
* 退款 * 退款
* @param * @param
...@@ -42,7 +46,7 @@ public class RefundMQHandler { ...@@ -42,7 +46,7 @@ public class RefundMQHandler {
String msg = new String(message.getBody(), "UTF-8"); String msg = new String(message.getBody(), "UTF-8");
OrderMQDTO orderMQDTO = JSONUtil.toBean(msg, OrderMQDTO.class); OrderMQDTO orderMQDTO = JSONUtil.toBean(msg, OrderMQDTO.class);
orderRefundBiz.refundPartDeposit(orderMQDTO); orderAccountBiz.refundPartDeposit(orderMQDTO);
executorService.shutdown(); executorService.shutdown();
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG); Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
......
...@@ -214,6 +214,14 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -214,6 +214,14 @@ public class BackStageOrderController extends CommonBaseController implements Us
dto.setEndTime(new Date().getTime()); dto.setEndTime(new Date().getTime());
} }
} }
List<Integer> userIds = new ArrayList<>();
if(StringUtils.isNotBlank(dto.getKeywords())) {
List<Integer> list = userFeign.getUserIdByUsername(dto.getKeywords());
if(list != null) {
userIds.addAll(list);
}
}
dto.setUserIds(userIds);
UserDTO userDTO = getAdminUserInfo(); UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) { if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>()); return ObjectRestResponse.succ(new PageDataVO<>());
......
...@@ -311,6 +311,11 @@ public class BaseOrderController extends CommonBaseController implements UserRes ...@@ -311,6 +311,11 @@ public class BaseOrderController extends CommonBaseController implements UserRes
private List<String> vehicleIds; private List<String> vehicleIds;
//订单用户ID列表
private List<Integer> userIds;
//订单用户手机号或订单用户真实姓名
private String keywords;
/** /**
* 车牌号 * 车牌号
*/ */
......
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderAccountBiz;
import com.xxfc.platform.order.entity.OrderAccount;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("orderAccount")
public class OrderAccountController extends BaseController<OrderAccountBiz,OrderAccount> {
}
\ No newline at end of file
...@@ -72,43 +72,43 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -72,43 +72,43 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
switch (orderTypeEnum) { switch (orderTypeEnum) {
case RENT_VEHICLE: case RENT_VEHICLE:
orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount()) // orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis() // , orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ RENT_REFUND // , DictionaryKey.APP_ORDER+ "_"+ RENT_REFUND
, refundDescBuilder); // , refundDescBuilder);
OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail(); // OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
Long timeLag = orvd.getStartTime() - System.currentTimeMillis(); // Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
//原退还押金 // //原退还押金
BigDecimal originalDeductAmount = BigDecimal.ZERO; // BigDecimal originalDeductAmount = BigDecimal.ZERO;
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(orvd.getDeposit()); // BigDecimal originalRefundAmount = BigDecimal.ZERO.add(orvd.getDeposit());
//判断是否使用免费天数,并且进行扣款 // //判断是否使用免费天数,并且进行扣款
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) { // if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
refundDescBuilder = new StringBuilder(""); // refundDescBuilder = new StringBuilder("");
OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{ // OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode()); // setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(orderPageVO.getId()); // setOrderId(orderPageVO.getId());
}}); // }});
originalDeductAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ "")); // originalDeductAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
} // }
BigDecimal residueAmount = orderRefundBiz.calculateRefund(originalDeductAmount, timeLag, APP_ORDER+ "_"+ RENT_REFUND, refundDescBuilder); // BigDecimal residueAmount = orderRefundBiz.calculateRefund(originalDeductAmount, timeLag, APP_ORDER+ "_"+ RENT_REFUND, refundDescBuilder);
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP); // residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//
//押金剩余款 :押金 - (原扣除款 - 剩余款) // //押金剩余款 :押金 - (原扣除款 - 剩余款)
//退款金额 :订单剩余款 + 押金剩余款 // //退款金额 :订单剩余款 + 押金剩余款
orderRefundAmount = orderRefundAmount.add(originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount))); // orderRefundAmount = orderRefundAmount.add(originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount)));
break; break;
case TOUR: case TOUR:
//判断是省内还是省外 //判断是省内还是省外
String key = TOUR_IN_REFUND; // String key = TOUR_IN_REFUND;
if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) { // if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
key = TOUR_REFUND; // key = TOUR_REFUND;
} // }
orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount()) // orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
, orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis() // , orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ key // , DictionaryKey.APP_ORDER+ "_"+ key
, refundDescBuilder); // , refundDescBuilder);
break; // break;
default: default:
break; break;
} }
......
...@@ -219,6 +219,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -219,6 +219,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal damageSafeAmount = BigDecimal.ZERO; BigDecimal damageSafeAmount = BigDecimal.ZERO;
// BigDecimal modelAmount = BigDecimal.ZERO; // BigDecimal modelAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO; BigDecimal couponAmount = BigDecimal.ZERO;
String couponDesc = "";
Integer vehicleDayNum = 0; Integer vehicleDayNum = 0;
Integer freeDayNum = 0; Integer freeDayNum = 0;
...@@ -314,6 +315,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -314,6 +315,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(","))); detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(",")));
detail.getOrder().setHasDiscount(SYS_TRUE); detail.getOrder().setHasDiscount(SYS_TRUE);
vehicleOrderItem.handleCouponAmount(couponAmount); vehicleOrderItem.handleCouponAmount(couponAmount);
couponDesc += activityFeign.info(detail.getTickerNo().get(0)).getTitle();
} }
} }
...@@ -340,6 +342,11 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -340,6 +342,11 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setModelAmount(vehicleOrderItem.getUnitPrice()); rvp.setModelAmount(vehicleOrderItem.getUnitPrice());
rvp.setVehicleDayNum(vehicleDayNum); rvp.setVehicleDayNum(vehicleDayNum);
rvp.setFreeDayNum(freeDayNum);
rvp.setFreeAmount(vehicleOrderItem.getCutAmount());
rvp.setBuyVehicleAmount(vehicleOrderItem.getBuyAmount());
rvp.setCouponDesc(couponDesc);
//设置收费明细 //设置收费明细
costDetail(rvp, handleChildren(detail, vehicleDayNum)); costDetail(rvp, handleChildren(detail, vehicleDayNum));
return rvp; return rvp;
...@@ -389,6 +396,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -389,6 +396,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) { if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) {
childrenStr.append(",${tem_0104}"); childrenStr.append(",${tem_0104}");
} }
if(detail.getFreeDays() > 0) {
childrenStr.append(",${tem_0105}");
}
if(StrUtil.isNotBlank(detail.getOrder().getCouponTickerNos())) { if(StrUtil.isNotBlank(detail.getOrder().getCouponTickerNos())) {
childrenStr.append(",${tem_9901}"); childrenStr.append(",${tem_9901}");
} }
...@@ -407,6 +417,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -407,6 +417,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
OrderTemplate template = orderTemplateBiz.selectById(OrderCostEnum.RentVehicle.getCode()); OrderTemplate template = orderTemplateBiz.selectById(OrderCostEnum.RentVehicle.getCode());
template.setTemplate(orderTemplateBiz.result(template.getTemplate(), new HashMap(){{ template.setTemplate(orderTemplateBiz.result(template.getTemplate(), new HashMap(){{
put("children", children); put("children", children);
put("vehicleAmount", vo.getVehicleAmount());
put("realAmount", vo.getRealAmount());
}})); }}));
String result = orderTemplateBiz.result(template, Dict.parse(vo)); String result = orderTemplateBiz.result(template, Dict.parse(vo));
vo.setCostDetail(result); vo.setCostDetail(result);
...@@ -433,4 +445,5 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -433,4 +445,5 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.setVehicleId(orr.getData().getVehicleId()); detail.setVehicleId(orr.getData().getVehicleId());
detail.setBookRecordId(orr.getData().getId()); detail.setBookRecordId(orr.getData().getId());
} }
} }
...@@ -182,7 +182,7 @@ ...@@ -182,7 +182,7 @@
and b.user_id = #{userId} and b.user_id = #{userId}
</if> </if>
<if test="status != null and status == -1"> <if test="status != null and status == -1">
AND b.status in (6,-1) AND b.status = -1
and b.refund_status in (0,2) and b.refund_status in (0,2)
</if> </if>
<if test="status != null and status != -1"> <if test="status != null and status != -1">
......
//package com.xxfc.platform.universal.fastservice.api;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.github.wxiaoqi.security.common.util.HTTPSUtils;
//import com.github.wxiaoqi.security.common.util.process.SystemConfig;
//import com.xxfc.platform.universal.fastservice.dto.EventNotifyRequestDto;
//import com.xxfc.platform.universal.fastservice.dto.RequestBodyDto;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import java.util.HashMap;
//import java.util.Map;
//
//@Slf4j
//@Service
//public class FastServiceApi {
//
// public String getAccessToken(String code) {
// RequestBodyDto requestBodyDto = new RequestBodyDto(SystemConfig.HUAWEI_FAST_SERVICE_GRANT_TYPE_AUTH,
// SystemConfig.HUAWEI_FAST_SERVICE_CLIENT_ID,
// SystemConfig.HUAWEI_FAST_SERVICE_CLIENT_SECRET,
// code,
// SystemConfig.HUAWEI_FAST_SERVICE_REDIRECT_URI);
// String paramString = requestBodyDto.getParamMap();
// log.info("获取token参数列表: param = {}", paramString);
// Map<String, String> headers = new HashMap<>();
// headers.put("Content-Type", "application/x-www-form-urlencoded");
// try {
// String result = HTTPSUtils.post(SystemConfig.HUAWEI_FAST_SERVICE_GET_TOKEN, paramString, headers);
// log.info("获取token返回结果: result = {}", result);
// return result;
// } catch (Exception e) {
// log.info("获取token返回失败");
// e.printStackTrace();
// }
// return null;
// }
//
// public String refreshAccessToken(String refreshToken) {
// RequestBodyDto requestBodyDto = new RequestBodyDto(SystemConfig.HUAWEI_FAST_SERVICE_GRANT_TYPE_REFRESH_TOKEN,
// refreshToken,
// SystemConfig.HUAWEI_FAST_SERVICE_CLIENT_ID,
// SystemConfig.HUAWEI_FAST_SERVICE_CLIENT_SECRET
// );
// String paramString = requestBodyDto.getParamMap();
// Map<String, String> headers = new HashMap<>();
// headers.put("Content-Type", "application/x-www-form-urlencoded");
// try {
// String result = HTTPSUtils.post(SystemConfig.HUAWEI_FAST_SERVICE_GET_TOKEN, paramString, headers);
// log.info("刷新token返回结果: result = {}", result);
// return result;
// } catch (Exception e) {
// log.info("刷新token返回失败");
// e.printStackTrace();
// }
// return null;
// }
// public String getOpenId(String accessToken) {
// RequestBodyDto requestBodyDto = new RequestBodyDto(SystemConfig.HUAWEI_FAST_SERVICE_NSP_SVC,
// SystemConfig.HUAWEI_FAST_SERVICE_OPEN_ID,
// accessToken
// );
// String paramString = requestBodyDto.getParamMap();
// log.info("获取openId参数列表: param = {}", paramString);
// Map<String, String> headers = new HashMap<>();
// headers.put("Content-Type", "application/x-www-form-urlencoded");
// try {
// String result = HTTPSUtils.post(SystemConfig.HUAWEI_FAST_SERVICE_GET_OPENID, paramString, headers);
// log.info("获取openId返回结果: result = {}", result);
// return result;
// } catch (Exception e) {
// log.info("获取openId返回失败");
// e.printStackTrace();
// }
// return null;
// }
//
// public String eventNotify(EventNotifyRequestDto eventNotifyRequestDto) {
// Map<String, String> headers = new HashMap<>();
// headers.put("x-appid", SystemConfig.HUAWEI_FAST_SERVICE_CLIENT_ID);
// headers.put("Authorization", eventNotifyRequestDto.getOAuthToken().getAccessToken());
// headers.put("Content-Type", "application/json");
// headers.put("Accept", "application/json");
// String paramString = JSONObject.toJSONString(eventNotifyRequestDto);
// log.info("事件通知参数列表: param = {}", paramString);
// try {
// String result = HTTPSUtils.post(SystemConfig.HUAWEI_FAST_SERVICE_EVENT_NOTIFY, paramString, headers);
// log.info("事件通知返回: result = {}", result);
// return result;
// } catch (Exception e) {
// log.info("事件通知返回失败");
// e.printStackTrace();
// }
// return null;
// }
//
// public static void main(String[] args) {
// FastServiceApi fastServiceApi = new FastServiceApi();
//
// }
//}
package com.xxfc.platform.universal.fastservice.dto;
import lombok.Data;
/**
* 快服务事件通知参数实体
*/
@Data
public class EventNotifyRequestDto {
private String requestTime; // String(17) M 请求报文的发送时间,格式:yyyyMMddHHmmssSSS(UTC)
private String requestId;// String M 事件唯一ID。在消息是否重传、以及撤销时作唯一识别标识。如果重传,则需要保证重传消息的requestId与原消息的requestId一致,服务端会对重复请求进行过滤处理。其他情况,则需要保证每次requestId不同。可以使用UUID作为requestId;Pattern: [a-zA-Z0-9\-]{1,64}。
private String openId; //String(512) M 华为分配的,第三方帐号与华为帐号的关联ID。
private String eventName; // String(100) M 事件名称,由开发者定义,在事件卡片规则中关联到某个卡片;需要保证事件名称在同一个appid下是唯一的。
private String parameters; //String(255) O 事件的参数,由开发者定义,华为快服务智慧平台透传给卡片页面。 Json格式,key不能以_、$和hag_开始,不要使用for, if, show, tid等保留字。
private String effectiveTime; //String(17) M 事件的生效时间,如酒店入住时间;UTC时区,精确到毫秒,格式:yyyyMMddHHmmssSSS。
private String expireTime; //String(17) M 事件的失效时间,超过该时间后,事件不再通知用户,UTC时区,精确到毫秒,格式:yyyyMMddHHmmssSSS。
private String abilityId; //String(128) O 通知的服务ID,开发者可以在华为快服务智慧平台的开发者控制台上获取。
private OAuthToken oAuthToken; //OAuthToken O 开发者在账号绑定完成后,如果快应用服务器需要对用户的快应用请求进行鉴权,则需要给用户分配AccessToken/RefreshToken信息;如果快应用服务器需要刷新保存在华为快服务智慧平台的用户AccessToken/RefreshToken,也通过该参数。
}
package com.xxfc.platform.universal.fastservice.dto;
import lombok.Data;
@Data
public class OAuthToken {
private String accessToken; //String(512) M 快应用服务器遵循OAuth2.0规范,分配的用户AccessToken。
private Long tokenExpire; // Long M 用户AccessToken的有效期,单位为秒,过期后,华为快服务智慧平台会使用refreshToken向快应用服务器重新申请。
private String refreshToken; // String(512) M 快应用服务器遵循OAuth2.0规范提供的,用于刷新AccessToken的标识。
private String tokenType = "bearer"; // String(64) O 传递Token的字段,默认为 bearer。
}
package com.xxfc.platform.universal.fastservice.dto;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.net.URLEncoder;
@Data
public class RequestBodyDto {
private String grantType;
private String refreshToken;
private String clientId;
private String clientSecret;
private String code;
private String redirectUri;
private String nspSvc;
private String openId;
private String accessToken;
public RequestBodyDto(String grantType, String refreshToken, String clientId, String clientSecret, String code, String redirectUri, String nspSvc, String openId, String accessToken) {
this.grantType = grantType;
this.refreshToken = refreshToken;
this.clientId = clientId;
this.clientSecret = clientSecret;
this.code = code;
this.redirectUri = redirectUri;
this.nspSvc = nspSvc;
this.openId = openId;
this.accessToken = accessToken;
}
public RequestBodyDto(String grantType, String clientId, String clientSecret, String code, String redirectUri) {
this.grantType = grantType;
this.clientId = clientId;
this.clientSecret = clientSecret;
this.code = code;
this.redirectUri = redirectUri;
}
public RequestBodyDto(String grantType, String refreshToken, String clientId, String clientSecret) {
this.grantType = grantType;
this.refreshToken = refreshToken;
this.clientId = clientId;
this.clientSecret = clientSecret;
}
public RequestBodyDto(String nspSvc, String openId, String accessToken) {
this.nspSvc = nspSvc;
this.openId = openId;
this.accessToken = accessToken;
}
public String getParamMap(){
StringBuilder stringBuilder = new StringBuilder();
if(StringUtils.isNotBlank(this.grantType)) {
stringBuilder.append("granType = ");
stringBuilder.append( URLEncoder.encode(this.grantType));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.refreshToken)) {
stringBuilder.append("refresh_token = ");
stringBuilder.append( URLEncoder.encode(this.refreshToken));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.clientId)) {
stringBuilder.append("client_id = ");
stringBuilder.append( URLEncoder.encode(this.clientId));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.clientSecret)) {
stringBuilder.append("client_secret = ");
stringBuilder.append( URLEncoder.encode(this.clientSecret));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.code)) {
stringBuilder.append("code = ");
stringBuilder.append( URLEncoder.encode(this.code));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.redirectUri)) {
stringBuilder.append("redirect_uri = ");
stringBuilder.append( URLEncoder.encode(this.redirectUri));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.nspSvc)) {
stringBuilder.append("nsp_svc = ");
stringBuilder.append( URLEncoder.encode(this.nspSvc));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.openId)) {
stringBuilder.append("open_id = ");
stringBuilder.append( URLEncoder.encode(this.openId));
stringBuilder.append("&");
}
if(StringUtils.isNotBlank(this.accessToken)) {
stringBuilder.append("access_token = ");
stringBuilder.append( URLEncoder.encode(this.accessToken));
stringBuilder.append("&");
}
return stringBuilder.toString();
}
}
...@@ -18,6 +18,11 @@ public class VehicleBookRecordQueryVo extends PageParam { ...@@ -18,6 +18,11 @@ public class VehicleBookRecordQueryVo extends PageParam {
*/ */
private String numberPlate; private String numberPlate;
/**
* 车牌和车辆编号的关键字
*/
private String keywords;
/** /**
* 所属分支机构(id) * 所属分支机构(id)
*/ */
......
...@@ -44,6 +44,8 @@ public class VehiclePlanDto extends PageParam { ...@@ -44,6 +44,8 @@ public class VehiclePlanDto extends PageParam {
*/ */
private Integer useType; private Integer useType;
private String keywords;
/** /**
* 车型id * 车型id
*/ */
......
...@@ -3,6 +3,7 @@ package com.xxfc.platform.vehicle.biz; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.vehicle.biz;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.ace.cache.annotation.Cache; import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear; import com.ace.cache.annotation.CacheClear;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
...@@ -393,4 +394,8 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany ...@@ -393,4 +394,8 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
pageDataVO.setTotalCount(dataVO.getTotalCount()); pageDataVO.setTotalCount(dataVO.getTotalCount());
return pageDataVO; return pageDataVO;
} }
public List<JSONObject> getList(){
return mapper.getList();
}
} }
...@@ -2,6 +2,7 @@ package com.xxfc.platform.vehicle.biz; ...@@ -2,6 +2,7 @@ package com.xxfc.platform.vehicle.biz;
import com.ace.cache.annotation.CacheClear; import com.ace.cache.annotation.CacheClear;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.RandomUtil; import com.github.wxiaoqi.security.common.util.RandomUtil;
...@@ -25,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -25,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -124,6 +126,36 @@ public class CompanyBaseBiz extends BaseBiz<CompanyBaseMapper, CompanyBase> { ...@@ -124,6 +126,36 @@ public class CompanyBaseBiz extends BaseBiz<CompanyBaseMapper, CompanyBase> {
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
//临时数据同步5(添加车辆)
public ObjectRestResponse synchro5(){
List<JSONObject> list= branchCompanyBiz.getList();
Integer number=10000;
if (list.size()>0){
for (JSONObject obj:list){
Integer code= obj.getInteger("code");
if (code==null||code==0){
continue;
}
Example example=new Example(Vehicle.class);
example.createCriteria().andEqualTo("code",code);
List<Vehicle> vehicles=vehicleBiz.selectByExample(example);
int num=0;
for (Vehicle vehicle:vehicles){
num++;
if (num==1){
continue;
}
number++;
vehicle.setCode(number);
vehicleBiz.updateSelectiveById(vehicle);
}
}
}
return ObjectRestResponse.succ();
}
public String getNumberPlate(int number){ public String getNumberPlate(int number){
String str=number+""; String str=number+"";
......
...@@ -643,7 +643,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR ...@@ -643,7 +643,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
if (vehicleBookRecord == null) { if (vehicleBookRecord == null) {
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc()); return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
} }
//已通过审核的可以取消预定 // //已通过审核的可以取消预定
// if (!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())) { // if (!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())) {
// return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode()); // return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
// } // }
......
package com.xxfc.platform.vehicle.mapper; package com.xxfc.platform.vehicle.mapper;
import com.alibaba.fastjson.JSONObject;
import com.xxfc.platform.vehicle.entity.BranchCompany; import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.pojo.dto.BranchCompanyListDTO; import com.xxfc.platform.vehicle.pojo.dto.BranchCompanyListDTO;
import com.xxfc.platform.vehicle.pojo.vo.BranchCompanyListVO; import com.xxfc.platform.vehicle.pojo.vo.BranchCompanyListVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.additional.idlist.SelectByIdListMapper; import tk.mybatis.mapper.additional.idlist.SelectByIdListMapper;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -17,4 +19,8 @@ public interface BranchCompanyMapper extends Mapper<BranchCompany>, SelectByIdLi ...@@ -17,4 +19,8 @@ public interface BranchCompanyMapper extends Mapper<BranchCompany>, SelectByIdLi
List<Integer> findCompanyIdsByAreaId(@Param("areaId") Integer areaId); List<Integer> findCompanyIdsByAreaId(@Param("areaId") Integer areaId);
List<BranchCompanyListDTO > findBranchCompanys(@Param("provinceCode") Integer provinceCode,@Param("cityCode") Integer cityCode); List<BranchCompanyListDTO > findBranchCompanys(@Param("provinceCode") Integer provinceCode,@Param("cityCode") Integer cityCode);
@Select("SELECT `code`,count(id) cd FROM `vehicle` WHERE is_del=0 and number_plate LIKE '%测试%' GROUP BY code HAVING cd>=2")
List<JSONObject> getList();
} }
\ No newline at end of file
...@@ -33,8 +33,8 @@ public class CompanyController extends BaseController<CompanyBaseBiz> { ...@@ -33,8 +33,8 @@ public class CompanyController extends BaseController<CompanyBaseBiz> {
@ApiOperation("同步股权3") @ApiOperation("同步股权3")
@PostMapping("synchro3") @PostMapping("synchro3")
public ObjectRestResponse<String> synchro3() { public ObjectRestResponse synchro3() {
return baseBiz.synchro3(); return baseBiz.synchro5();
} }
......
...@@ -482,9 +482,6 @@ ...@@ -482,9 +482,6 @@
<if test="status != null"> <if test="status != null">
and v1.status = #{status} and v1.status = #{status}
</if> </if>
<if test="code !=null">
and v1.code=#{code}
</if>
<if test="companyIds != null and companyIds.size > 0"> <if test="companyIds != null and companyIds.size > 0">
and v1.park_branch_company_id in and v1.park_branch_company_id in
<foreach collection="companyIds" item="id" open="(" separator="," close=")"> <foreach collection="companyIds" item="id" open="(" separator="," close=")">
...@@ -508,9 +505,6 @@ ...@@ -508,9 +505,6 @@
<if test="status != null"> <if test="status != null">
and v2.status = #{status} and v2.status = #{status}
</if> </if>
<if test="code !=null">
and v2.code=#{code}
</if>
<if test="companyIds != null and companyIds.size > 0"> <if test="companyIds != null and companyIds.size > 0">
and v2.park_branch_company_id in and v2.park_branch_company_id in
<foreach collection="companyIds" item="id" open="(" separator="," close=")"> <foreach collection="companyIds" item="id" open="(" separator="," close=")">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment