Commit ab8bd8ee authored by jiaorz's avatar jiaorz

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

parents 050ab55e 56b4b783
package com.xxfc.platform.order.bo;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -32,10 +30,47 @@ public class CompanyPerformanceBo {
private BigDecimal rentVehilceAmount;
private BigDecimal travelAmount;
private BigDecimal noDeductibleAmount;
private BigDecimal depositAmount;
private Integer rentDays;
private BigDecimal extralAmount;
private Integer departureNum;
private Integer arrivalNum;
private Date startDate;
private Date endDate;
public BigDecimal getMemberAmount() {
return memberAmount==null?BigDecimal.ZERO:memberAmount;
}
public BigDecimal getRentVehilceAmount() {
return rentVehilceAmount==null?BigDecimal.ZERO:rentVehilceAmount;
}
public BigDecimal getTravelAmount() {
return travelAmount==null?BigDecimal.ZERO:travelAmount;
}
public BigDecimal getNoDeductibleAmount() {
return noDeductibleAmount==null?BigDecimal.ZERO:noDeductibleAmount;
}
public BigDecimal getDepositAmount() {
return depositAmount==null?BigDecimal.ZERO:depositAmount;
}
public Integer getRentDays() {
return rentDays==null?0:rentDays;
}
public BigDecimal getExtralAmount() {
return extralAmount==null?BigDecimal.ZERO:extralAmount;
}
public Integer getDepartureNum() {
return departureNum==null?0:departureNum;
}
public Integer getArrivalNum() {
return arrivalNum==null?0:arrivalNum;
}
}
package com.xxfc.platform.order.bo;
import cn.hutool.json.JSONObject;
import com.xxfc.platform.order.contant.enumerate.AccountTypeEnum;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/27 16:10
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class FeeTypeBo implements Serializable {
private static final long serialVersionUID = 1L;
private BigDecimal noDeductibleRefundAmount = BigDecimal.ZERO;
private BigDecimal noDeductibleAmount = BigDecimal.ZERO;
private BigDecimal totalAmount = BigDecimal.ZERO;
private BigDecimal orderRefundAmount = BigDecimal.ZERO;
private BigDecimal depositAmount = BigDecimal.ZERO;
private BigDecimal depositRefundAmount = BigDecimal.ZERO;
private BigDecimal lateFeeAmount = BigDecimal.ZERO;
private BigDecimal breakRulesRegulationAmount = BigDecimal.ZERO;
private BigDecimal lossSpecifiedAmount = BigDecimal.ZERO;
private BigDecimal extraAmount = BigDecimal.ZERO;
}
package com.xxfc.platform.order.contant.enumerate;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.xxfc.platform.order.bo.FeeTypeBo;
import com.xxfc.platform.order.entity.OrderReceivedStatisticsBase;
import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.dto.OrderDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.assertj.core.util.Lists;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.WeekFields;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author libin
......@@ -19,74 +26,207 @@ import java.util.*;
* @description
* @data 2019/11/14 14:28
*/
public enum StatisticsStatusEnum {
public enum StatisticsStatusEnum {
;
public static final int DEFAULT_COMPANY=1;
public static final int ORDER_MEMBER_TYPE=3;
public static final int ORDER_RENT_VEHICLE_TYPE=1;
public static final int ORDER_TOUR_TYPE=2;
public static final int NO_PAY_WAY=0;
public static final Integer DEFAULT_SQL_SIZE=1000;
public static final String ORDER_AMOUNT="order_amount";
public static final String LATEFEE_AMOUNT="late_fee";
public static final String ORDER_REFUND_AMOUNT="order_refund_amount";
public static final String ORDER_DEPOSIT_AMOUNT="order_deposit_amount";
public static final String COMPANY_DEFAULT="欣新房车控股集团";
public static final String NO_DEDUCTIBLE_AMOUNT="damageSafeAmount";
public static final String PARMAM_JSON="paramJson";
public static final int DAMAGE_SAFE=1;
public static final int DEFAULT_COMPANY = 1;
public static final int ORDER_MEMBER_TYPE = 3;
public static final int ORDER_RENT_VEHICLE_TYPE = 1;
public static final int ORDER_TOUR_TYPE = 2;
public static final int NO_PAY_WAY = 0;
public static final Integer DEFAULT_SQL_SIZE = 1000;
public static final String COMPANY_DEFAULT = "欣新房车控股集团";
public static final String NO_DEDUCTIBLE_AMOUNT = "damageSafeAmount";
public static final String PARMAM_JSON = "paramJson";
public static final int DAMAGE_SAFE = 1;
public static List<String> orderStates;
public static List<String> orderOrigins;
public static List<String> orderPayWays;
static {
// 0 未支付 1 已支付
orderStates = Lists.newArrayList("0","1");
// 0 未支付 1 已支付
orderStates = Lists.newArrayList("0", "1");
// 1 app 2 小程序 3 其他
orderOrigins = Lists.newArrayList("1","2","3");
orderOrigins = Lists.newArrayList("1", "2", "3");
// 1 微信 2 支付宝 0不需要支付(使用了优惠券之类的)或未支付
orderPayWays = Lists.newArrayList("1","2","0");
orderPayWays = Lists.newArrayList("1", "2", "0");
}
public static List<String> statisticsSateGroupWithCompanys(List<Integer> companyIdList){
public static List<String> statisticsSateGroupWithCompanys(List<Integer> companyIdList) {
List<String> orderStatisticsStateGroups = new ArrayList<>();
List<String> stateGroup = statisticsStateGroup();
for (String stgp : stateGroup) {
for (Integer companyId : companyIdList) {
// 公司id-订单来源-支付方式-订单状态
orderStatisticsStateGroups.add(String.format("%d-%s",companyId,stgp));
// 公司id-订单来源-支付方式-订单状态
orderStatisticsStateGroups.add(String.format("%d-%s", companyId, stgp));
}
}
return orderStatisticsStateGroups;
}
public static List<String> statisticsStateGroup(){
public static List<String> statisticsStateGroup() {
List<String> orderStatisticsStateGroups = new ArrayList<>();
for (String orderOrigin : orderOrigins) {
for (String orderPayWay : orderPayWays) {
for (String orderState : orderStates) {
//订单来源-支付方式-订单状态
orderStatisticsStateGroups.add(String.format("%s-%s-%s",orderOrigin,orderPayWay,orderState));
orderStatisticsStateGroups.add(String.format("%s-%s-%s", orderOrigin, orderPayWay, orderState));
}
}
}
return orderStatisticsStateGroups;
}
public static List<String> getOtherStatisticsStateGroup(List<Integer> companyIdList,List<String> statisticsStates){
List<String> stateGroupList = CollectionUtils.isEmpty(companyIdList)?statisticsStateGroup():statisticsSateGroupWithCompanys(companyIdList);
public static List<String> getOtherStatisticsStateGroup(List<Integer> companyIdList, List<String> statisticsStates) {
List<String> stateGroupList = CollectionUtils.isEmpty(companyIdList) ? statisticsStateGroup() : statisticsSateGroupWithCompanys(companyIdList);
stateGroupList.removeAll(statisticsStates);
return stateGroupList;
}
public static<T extends OrderReceivedStatisticsBase> T wrapStatisticsObject(Date date, String stateGroup, Map<Integer,String> companyMap, T targetObj){
LocalDate localDate = LocalDate.from(new Date().toInstant().atZone(ZoneId.systemDefault()));
/**
* 订单状态组合处理
*
* @param stisticsActiveState
* @param orderDTOS
* @return
*/
public static Map<Boolean, Map<String, List<OrderDTO>>> processOrdersWithState(List<String> stisticsActiveState, List<OrderDTO> orderDTOS) {
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = orderDTOS.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", Objects.isNull(x.getCompanyId())?DEFAULT_COMPANY:x.getCompanyId(),
x.getOrderOrigin(),
x.getPayWay() == null ? NO_PAY_WAY : x.getPayWay()
, x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
}).collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.toList())));
return stateGroupMap == null ? Collections.EMPTY_MAP : stateGroupMap;
}
/**
* 订单账目状态组合处理
* @param stisticsActiveState
* @param orderAccountBoList
* @return
*/
public static Map<String, List<OrderAccountBo>> processOrderAccountsWithState(List<String> stisticsActiveState, List<OrderAccountBo> orderAccountBoList) {
return orderAccountBoList.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", Objects.isNull(x.getCompanyId())?DEFAULT_COMPANY:x.getCompanyId(),
x.getOrderOrigin(),
x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(),
x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList()));
}
/**
* 获取账目消费
*
* @param orderAccountBos
* @return
*/
public static FeeTypeBo getFeeTyBoByOrderAccounts(List<OrderAccountBo> orderAccountBos) {
FeeTypeBo feeTypeBo = new FeeTypeBo();
for (OrderAccountBo orderAccountBo : orderAccountBos) {
//账目详情
OrderAccountDetail accountDetailEntity = orderAccountBo.getAccountDetailEntity();
//是否买免赔
boolean hasDamageSafe = Objects.nonNull(orderAccountBo.getDamageSafe()) && (orderAccountBo.getDamageSafe() == StatisticsStatusEnum.DAMAGE_SAFE);
if (orderAccountBo.getAccountType().equals(AccountTypeEnum.IN_ORDER_PAY.getCode())) {
//订单押金
feeTypeBo.setDepositAmount(feeTypeBo.getDepositAmount().add(accountDetailEntity.getDepositAmount()));
if (hasDamageSafe) {
BigDecimal dameSafeAmount = getDameSafeAmount(orderAccountBo.getData());
feeTypeBo.setNoDeductibleAmount(feeTypeBo.getNoDeductibleAmount().add(dameSafeAmount));
}
//订单金额(不包含免赔和押金)
feeTypeBo.setTotalAmount(feeTypeBo.getTotalAmount().add(accountDetailEntity.getOrderAmount()).subtract(feeTypeBo.getNoDeductibleAmount()));
} else {
//退款订单押金
feeTypeBo.setDepositRefundAmount(feeTypeBo.getDepositRefundAmount().add(accountDetailEntity.getDepositAmount()));
//退款详细账目
List<OrderAccountDeduction> deductions = accountDetailEntity.getDeductions();
//其它消费明细(租车表详情)
JSONObject data = orderAccountBo.getData();
//免赔
if (hasDamageSafe) {
//账目类型是201 取消订单款且消费明细没有
if (orderAccountBo.getAccountType().equals(AccountTypeEnum.OUT_ORDER_FUND.getCode()) && CollectionUtils.isEmpty(deductions)) {
BigDecimal dameSafeAmount = getDameSafeAmount(data);
feeTypeBo.setNoDeductibleRefundAmount(feeTypeBo.getNoDeductibleRefundAmount().add(dameSafeAmount));
}
}
//遍历消费明细
for (OrderAccountDeduction deduction : deductions) {
BigDecimal deductionAmount = deduction.getAmount();
//违约金
if (DeductionTypeEnum.lateFeeCode.contains(deduction.getType())) {
feeTypeBo.setLateFeeAmount(feeTypeBo.getLateFeeAmount().add(deductionAmount));
//免赔 提前取消违约金
if (deduction.getType().equals(DeductionTypeEnum.VIOLATE_CANCEL.getCode())) {
if (hasDamageSafe) {
BigDecimal dameSafeAmount = getDameSafeAmount(data);
feeTypeBo.setNoDeductibleRefundAmount(feeTypeBo.getNoDeductibleRefundAmount().add(dameSafeAmount));
}
}
}
//违章
if (DeductionTypeEnum.breakRulesRegulationCode.contains(deduction.getType())) {
feeTypeBo.setBreakRulesRegulationAmount(feeTypeBo.getBreakRulesRegulationAmount().add(deductionAmount));
}
//定损
if (DeductionTypeEnum.lossSpecifiedCode.contains(deduction.getType())) {
feeTypeBo.setLossSpecifiedAmount(feeTypeBo.getLossSpecifiedAmount().add(deductionAmount));
}
//其他消费
if (DeductionTypeEnum.consumerCode.contains(deduction.getType())) {
BigDecimal extendAmount = deductionAmount.subtract(accountDetailEntity.getOriginOrderAmount());
if (extendAmount.doubleValue() > 0) {
feeTypeBo.setExtraAmount(feeTypeBo.getExtraAmount().add(extendAmount));
}
}
}
//退款订单金额(不包含免赔和押金)
feeTypeBo.setOrderRefundAmount(feeTypeBo.getOrderRefundAmount().add(accountDetailEntity.getOrderAmount()).subtract(feeTypeBo.getNoDeductibleRefundAmount()));
}
}
return feeTypeBo;
}
/**
* 获取免赔金额
*
* @param data
* @return
*/
public static BigDecimal getDameSafeAmount(JSONObject data) {
if (!data.isEmpty()) {
Object paramJson = data.get(StatisticsStatusEnum.PARMAM_JSON);
JSONObject jsonObject = JSONUtil.parseObj(paramJson);
BigDecimal safeAmount = jsonObject.get(StatisticsStatusEnum.NO_DEDUCTIBLE_AMOUNT, BigDecimal.class);
return safeAmount == null ? BigDecimal.ZERO : safeAmount;
}
return BigDecimal.ZERO;
}
/**
* 创建默认对象
*
* @param date 统计日期
* @param stateGroup 状态
* @param companyMap 公司map
* @param targetObj 目标对象
* @param <T> 目标对象类型
* @return
*/
public static <T extends OrderReceivedStatisticsBase> T wrapStatisticsObject(Date date, String stateGroup, Map<Integer, String> companyMap, T targetObj) {
LocalDate localDate = LocalDate.from(date.toInstant().atZone(ZoneId.systemDefault()));
String year = String.valueOf(localDate.getYear());
String month = String.format("%s%d", year, localDate.getMonthValue());
String weekOfYear = String.format("%s%d", year,localDate.get(WeekFields.of(Locale.CHINESE).weekOfYear()));
String weekOfYear = String.format("%s%d", year, localDate.get(WeekFields.of(Locale.CHINESE).weekOfYear()));
String[] status = stateGroup.split("-");
targetObj.setCrtTime(new Date());
targetObj.setCompanyId(Integer.valueOf(status[0]));
String companyName = Objects.isNull(companyMap)?COMPANY_DEFAULT: StringUtils.hasText(companyMap.get(targetObj.getCompanyId()))?companyMap.get(targetObj.getCompanyId()):COMPANY_DEFAULT;
String companyName = Objects.isNull(companyMap) ? COMPANY_DEFAULT : StringUtils.hasText(companyMap.get(targetObj.getCompanyId())) ? companyMap.get(targetObj.getCompanyId()) : COMPANY_DEFAULT;
targetObj.setCompanyName(companyName);
targetObj.setHasPay(Integer.valueOf(status[3]));
targetObj.setOrderOrigin(Integer.valueOf(status[1]));
......@@ -103,4 +243,24 @@ public enum StatisticsStatusEnum {
targetObj.setStateGroup(stateGroup);
return targetObj;
}
/**
* 批量插入数据 mysql sql语句默认不能超过4M
*
* @param orderReceivedStatistics
*/
public static <T> void insertReceivedStatisticsBatch(List<T> orderReceivedStatistics, InsertListMapper<T> mapper) {
int orderSize = orderReceivedStatistics.size();
int sqlAdq = orderSize / StatisticsStatusEnum.DEFAULT_SQL_SIZE;
int sqlMod = orderSize % StatisticsStatusEnum.DEFAULT_SQL_SIZE;
sqlAdq = sqlMod == 0 ? sqlAdq : sqlAdq + 1;
for (int i = 0; i < sqlAdq; i++) {
int fromIndex = StatisticsStatusEnum.DEFAULT_SQL_SIZE * i;
int toIndex = StatisticsStatusEnum.DEFAULT_SQL_SIZE * (i + 1);
toIndex = toIndex > orderSize ? orderSize : toIndex;
List<T> orderRentVehicleReceivedStatisticsList = orderReceivedStatistics.subList(fromIndex, toIndex);
mapper.insertList(orderRentVehicleReceivedStatisticsList);
}
}
}
......@@ -21,7 +21,6 @@ import java.math.BigDecimal;
public class OrderMemberReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 普通会员订单总额
*/
......
package com.xxfc.platform.order.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -18,6 +19,7 @@ import java.math.BigDecimal;
*/
@Data
@Table(name = "order_received_statistics")
@ApiModel("订单统计")
public class OrderReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable {
private static final long serialVersionUID = 1L;
......@@ -25,14 +27,38 @@ public class OrderReceivedStatistics extends OrderReceivedStatisticsBase impleme
@ApiModelProperty("会员费")
private BigDecimal memberAmount;
@Column(name = "member_refund_amount")
@ApiModelProperty("会员退款费")
private BigDecimal memberRefundAmout;
@Column(name = "member_quantity")
@ApiModelProperty("会员订单量")
private Integer memberQuantity;
@Column(name = "travel_amount")
@ApiModelProperty("旅游费")
private BigDecimal travelAmount;
@Column(name = "travel_refund_amount")
@ApiModelProperty("旅游退款费")
private BigDecimal travelRefundAmount;
@Column(name = "travel_quantity")
@ApiModelProperty("旅游订单量")
private Integer travelQuantity;
@Column(name = "rent_vehicle_amount")
@ApiModelProperty("租车费")
private BigDecimal rentVehicleAmount;
@Column(name = "rent_vehicle_refund_amount")
@ApiModelProperty("租车退款费")
private BigDecimal rentVehicleRefundAmount;
@Column(name = "rent_vehicle_quantity")
@ApiModelProperty("租车订单量")
private Integer rentVehicleQuantity;
@Column(name = "no_deductible_amount")
@ApiModelProperty("不计免赔费")
private BigDecimal noDeductibleAmount;
......
......@@ -29,7 +29,7 @@ public class CompanyPerformanceFindDTO extends PageParam {
@ApiModelProperty("统计方式 1:日 2:周 3:月")
@NotNull(message = "统计方式不能为null")
private Integer statisticalWay;
private String companyName;
private Integer companyId;
}
......@@ -86,113 +86,113 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.ILLEGAL_TYPE;
@Slf4j
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements UserRestInterface {
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Autowired
OrderTourDetailBiz orderTourDetailBiz;
@Autowired
OrderTourDetailBiz orderTourDetailBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderVehicleCrosstownBiz orderVehicleCrosstownBiz;
@Autowired
OrderVehicleCrosstownBiz orderVehicleCrosstownBiz;
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired
VehicleFeign vehicleFeign;
@Autowired
VehicleFeign vehicleFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired
TourFeign tourFeign;
@Autowired
TourFeign tourFeign;
@Autowired
UserFeign userFeign;
@Autowired
UserFeign userFeign;
@Autowired
MQSenderFeign mqSenderFeign;
@Autowired
MQSenderFeign mqSenderFeign;
@Autowired
OrderMsgBiz orderMsgBiz;
@Autowired
OrderMsgBiz orderMsgBiz;
@Autowired
ActivityFeign activityFeign;
@Autowired
ActivityFeign activityFeign;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap) {
return mapper.pageByParm(paramMap);
}
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap) {
return mapper.pageByParm(paramMap);
}
public List<OrderListVo> listOrder(Map<String, Object> paramMap) {
return mapper.listOrder(paramMap);
List<OrderListVo> orderListVos = mapper.listOrder(paramMap);
return orderListVos;
}
public List<OrderPageVO> getRentVehicle(Map<String, Object> paramMap) {
return mapper.getRentVehicle(paramMap);
}
public List<OrderPageVO> getTourList(Map<String, Object> paramMap) {
return mapper.getTourList(paramMap);
}
public List<OrderPageVO> getRentVehicle(Map<String, Object> paramMap) {
return mapper.getRentVehicle(paramMap);
}
public PageDataVO<MemberOrderBo> findMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO) {
return PageDataVO.pageInfo(memberOrderFindDTO.getPage(), memberOrderFindDTO.getLimit(), () -> mapper.findMemberOrders(memberOrderFindDTO));
}
public List<OrderPageVO> getTourList(Map<String, Object> paramMap) {
return mapper.getTourList(paramMap);
}
public List<MemberOrderBo> findMemberOrders(MemberOrderFindDTO memberOrderFindDTO) {
return mapper.findMemberOrders(memberOrderFindDTO);
}
// public List<MemberOrderBo>
public PageDataVO<MemberOrderBo> findMemberOrderPage(MemberOrderFindDTO memberOrderFindDTO){
return PageDataVO.pageInfo(memberOrderFindDTO.getPage(),memberOrderFindDTO.getLimit(),()->mapper.findMemberOrders(memberOrderFindDTO));
}
/**
* 获取订单详情
*
* @param no
* @return
*/
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no, UserDTO userDTO) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if (orderPageVo.getStatus() <= 3 && orderPageVo.getStatus() != 2 && orderPageVo.getStatus() != -1) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_DETAIL_IS_NOT_EXIST.getCode(), ResCode.ORDER_DETAIL_IS_NOT_EXIST.getDesc());
}
AppUserDTO appUserVo = userFeign.userDetailById(orderPageVo.getUserId()).getData();
if (appUserVo != null) {
orderPageVo.setTelephone(appUserVo.getUsername());
orderPageVo.setUsername(appUserVo.getRealname());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
if (orderPageVo.getOrderRentVehicleDetail() != null) {
public List<MemberOrderBo> findMemberOrders(MemberOrderFindDTO memberOrderFindDTO) {
return mapper.findMemberOrders(memberOrderFindDTO);
}
if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) {
return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc());
}
if (userDTO.getCompanyId() == orderPageVo.getOrderRentVehicleDetail().getEndCompanyId()) {
orderPageVo.setUserCompanyStatus(true);
}
if (orderPageVo.getStatus() == 4) { //未交车
// public List<MemberOrderBo>
/**
* 获取订单详情
*
* @param no
* @return
*/
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no, UserDTO userDTO) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if(orderPageVo.getStatus() <= 3 && orderPageVo.getStatus() != 2 && orderPageVo.getStatus() != -1) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_DETAIL_IS_NOT_EXIST.getCode(), ResCode.ORDER_DETAIL_IS_NOT_EXIST.getDesc());
}
AppUserDTO appUserVo = userFeign.userDetailById(orderPageVo.getUserId()).getData();
if(appUserVo != null) {
orderPageVo.setTelephone(appUserVo.getUsername());
orderPageVo.setUsername(appUserVo.getRealname());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) {
return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc());
}
if(userDTO.getCompanyId() == orderPageVo.getOrderRentVehicleDetail().getEndCompanyId()) {
orderPageVo.setUserCompanyStatus(true);
}
if (orderPageVo.getStatus() == 4) { //未交车
// boolean flag = getTodayTime(orderPageVo.getOrderRentVehicleDetail().getStartTime());
// if (!flag) {
// return ObjectRestResponse.createFailedResult(3501, "今日不是交车日期");
......@@ -236,23 +236,22 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
}
/**
* 后台获取订单详情
*
* @param no
* @param userDTO
* @return
*/
/**
* 后台获取订单详情
* @param no
* @param userDTO
* @return
*/
public ObjectRestResponse<OrderPageVO> orderDetail(String no, UserDTO userDTO) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
AppUserDTO appUserVo = userFeign.userDetailById(orderPageVo.getUserId()).getData();
if (appUserVo != null) {
if(appUserVo != null) {
orderPageVo.setTelephone(appUserVo.getUsername());
orderPageVo.setUsername(appUserVo.getRealname());
orderPageVo.setPositionName(appUserVo.getPositionName());
orderPageVo.setPositionName(appUserVo.getPositionName());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
......@@ -262,7 +261,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) {
return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc());
}
if (userDTO.getCompanyId() == orderPageVo.getOrderRentVehicleDetail().getEndCompanyId()) {
if(userDTO.getCompanyId() == orderPageVo.getOrderRentVehicleDetail().getEndCompanyId()) {
orderPageVo.setUserCompanyStatus(true);
}
if (orderPageVo.getStatus() == 4) { //未交车
......@@ -302,7 +301,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
orderPageVo.setIllegalReserve(illegalReserve);
orderPageVo.setItems(orderItemBiz.selectList(new OrderItem() {{
orderPageVo.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(orderPageVo.getId());
setType(104);
}}));
......@@ -310,23 +309,23 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
}
//获取两个日期之间的天数(不包含头尾)
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 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 int getDaysBetweenDateTimeHasStartEnd(DateTime startDay, DateTime endDay) {
int a = 0;
for (DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusHours(1)) {
a++;
}
return a;
}
//获取两个日期之间的天数(包含头尾)
public int getDaysBetweenDateTimeHasStartEnd(DateTime startDay, DateTime endDay) {
int a = 0;
for (DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusHours(1)) {
a++;
}
return a;
}
// public static void main(String[] args) {
// DateTime dateTime = DateTime.parse("2019-09-20 12:00:00", DEFAULT_DATE_TIME_FORMATTER);
......@@ -337,13 +336,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
// System.out.println(a);
// }
public void updateCrossRefund(OrderPageVO orderPageVO) {
//计算延期费用
DedDetailDTO dedDetailDTO = new DedDetailDTO();
//提前还车,结束时间大于当前时间
Long nowTime = System.currentTimeMillis();
Long endTime = orderPageVO.getOrderRentVehicleDetail().getEndTime();
Long startTime = orderPageVO.getOrderRentVehicleDetail().getStartTime();
public void updateCrossRefund(OrderPageVO orderPageVO) {
//计算延期费用
DedDetailDTO dedDetailDTO = new DedDetailDTO();
//提前还车,结束时间大于当前时间
Long nowTime = System.currentTimeMillis();
Long endTime = orderPageVO.getOrderRentVehicleDetail().getEndTime();
Long startTime = orderPageVO.getOrderRentVehicleDetail().getStartTime();
//设置使用天数
int userUsedDay = orderCalculateBiz.getIncludeDays(startTime, nowTime);
......@@ -451,377 +450,370 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
}
/**
* 初始化违约金实体
*
* @param dedDetailDTO
* @param type
* @param cost
* @param stringBuilder
*/
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 = "延期还车违约金";
} else if (type == OrderViolateEnum.CHANGE.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.CHANGE.getCode());
detailName = "更换还车公司";
} else if (type == OrderViolateEnum.DELAY_VEHICLE.getCode()) {
dedDetailDTO.setType(1);
detailName = "延长还车";
/**
* 初始化违约金实体
* @param dedDetailDTO
* @param type
* @param cost
* @param stringBuilder
*/
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 = "延期还车违约金";
} else if (type == OrderViolateEnum.CHANGE.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.CHANGE.getCode());
detailName = "更换还车公司";
}
//900元+违约金(¥900x2天=)1800元
dedDetailDTO.setDeductions(stringBuilder.toString());
dedDetailDTO.setCost(cost);
dedDetailDTO.setId(1);
dedDetailDTO.setStatusIndex(1);
dedDetailDTO.setStatusName(detailName);
}
//900元+违约金(¥900x2天=)1800元
dedDetailDTO.setDeductions(stringBuilder.toString());
dedDetailDTO.setCost(cost);
dedDetailDTO.setId(1);
dedDetailDTO.setStatusIndex(1);
dedDetailDTO.setStatusName(detailName);
}
/**
* 获取驾驶人驾照
*
* @param orderPageVo
*/
public void getUserLicense(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstown = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (orderVehicleCrosstown != null && orderVehicleCrosstown.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstown.get(0).getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
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());
}
}
}
}
if (StringUtils.isBlank(orderPageVo.getDedDetailDTO())) {
updateCrossRefund(orderPageVo);
}
orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
}
/**
* 获取驾驶人驾照
* @param orderPageVo
*/
public void getUserLicense(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstown = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (orderVehicleCrosstown != null && orderVehicleCrosstown.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstown.get(0).getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
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());
}
}
}
}
if (StringUtils.isBlank(orderPageVo.getDedDetailDTO())) {
updateCrossRefund(orderPageVo);
}
orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
}
//后台获取用户驾驶信息
public void getUserLicense1(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstown = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (orderVehicleCrosstown != null && orderVehicleCrosstown.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstown.get(0).getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
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);
}
//后台获取用户驾驶信息
public void getUserLicense1(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstown = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (orderVehicleCrosstown != null && orderVehicleCrosstown.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstown.get(0).getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
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);
}
/**
* 获取驾驶人信息
*
* @param orderPageVo
*/
public void getDriverInfo(OrderPageVO orderPageVo) {
List<VehicleUserLicense> vehicleUserLicenses = Lists.newArrayList();
String myDriverIds = orderPageVo.getOrderRentVehicleDetail().getMyDriverIds();
if (StringUtils.isNotBlank(myDriverIds)) {
if (myDriverIds.contains(",")) {
String[] ids = myDriverIds.split(",");
try {
//目前暂定一个驾驶人,后期需要更改再此更改
RestResponse<VehicleUserLicense> restResponse = vehicleFeign.getOne(Integer.parseInt(ids[0]));
log.info(restResponse.getMessage());
if (restResponse.getData() != null) {
vehicleUserLicenses.add(restResponse.getData());
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
} else {
try {
vehicleUserLicenses.add(vehicleFeign.getOne(Integer.parseInt(myDriverIds.trim())).getData());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
orderPageVo.setVehicleUserLicenses(vehicleUserLicenses);
}
/**
* 获取驾驶人信息
* @param orderPageVo
*/
public void getDriverInfo(OrderPageVO orderPageVo) {
List<VehicleUserLicense> vehicleUserLicenses = Lists.newArrayList();
String myDriverIds = orderPageVo.getOrderRentVehicleDetail().getMyDriverIds();
if (StringUtils.isNotBlank(myDriverIds)) {
if (myDriverIds.contains(",")) {
String[] ids = myDriverIds.split(",");
try {
//目前暂定一个驾驶人,后期需要更改再此更改
RestResponse<VehicleUserLicense> restResponse = vehicleFeign.getOne(Integer.parseInt(ids[0]));
log.info(restResponse.getMessage());
if (restResponse.getData() != null) {
vehicleUserLicenses.add(restResponse.getData());
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
} else {
try {
vehicleUserLicenses.add(vehicleFeign.getOne(Integer.parseInt(myDriverIds.trim())).getData());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
orderPageVo.setVehicleUserLicenses(vehicleUserLicenses);
}
/**
* 修改订单还车公司
*
* @param orderRentVehicleDetail
* @return
*/
public ObjectRestResponse save(OrderRentVehicleDetail orderRentVehicleDetail) {
if (orderRentVehicleDetail == null || orderRentVehicleDetail.getId() == null) {
return ObjectRestResponse.paramIsEmpty();
}
log.info("更新订单还车地点》》》 orderRentVehicleDetail = {}", orderRentVehicleDetail.toString());
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, ResultCode.getMsg(ResultCode.RSTOKEN_EXPIRED_CODE));
}
/**
* 修改订单还车公司
* @param orderRentVehicleDetail
* @return
*/
public ObjectRestResponse save(OrderRentVehicleDetail orderRentVehicleDetail) {
if (orderRentVehicleDetail == null || orderRentVehicleDetail.getId() == null) {
return ObjectRestResponse.paramIsEmpty();
}
log.info("更新订单还车地点》》》 orderRentVehicleDetail = {}", orderRentVehicleDetail.toString());
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, ResultCode.getMsg(ResultCode.RSTOKEN_EXPIRED_CODE));
}
StringBuilder stringBuilder = new StringBuilder();
OrderRentVehicleDetail oldValue = orderRentVehicleBiz.selectById(orderRentVehicleDetail.getId());
if (oldValue == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
stringBuilder.append("修改订单和预定记录还车公司成功, 订单ID:");
stringBuilder.append(oldValue.getOrderId());
stringBuilder.append("; 原还车公司ID: ");
stringBuilder.append(oldValue.getEndCompanyId());
stringBuilder.append("; 更新后还车公司ID: ");
stringBuilder.append(orderRentVehicleDetail.getEndCompanyId());
stringBuilder.append("; 操作人ID:");
stringBuilder.append(userDTO.getId());
stringBuilder.append("; 操作人账号:");
stringBuilder.append(userDTO.getUsername());
//添加修改记录实体
BookRecordUpdateLog bookRecordUpdateLog = new BookRecordUpdateLog();
bookRecordUpdateLog.setBookRecordId(oldValue.getBookRecordId());
bookRecordUpdateLog.setOldRetCompanyId(oldValue.getEndCompanyId());
bookRecordUpdateLog.setNewRetCompanyId(orderRentVehicleDetail.getEndCompanyId());
bookRecordUpdateLog.setOperaterId(userDTO.getId());
bookRecordUpdateLog.setOperaterName(userDTO.getName());
bookRecordUpdateLog.setOrderId(oldValue.getOrderId());
bookRecordUpdateLog.setCreateTime(new Date());
BeanUtil.copyProperties(orderRentVehicleDetail, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
CompanyDetail companyDetail = vehicleFeign.getCompanyDetail(orderRentVehicleDetail.getEndCompanyId()).getData();
if (companyDetail != null) {
oldValue.setEndCity(companyDetail.getAddrCity());
oldValue.setEndAddr(companyDetail.detailAddr());
}
oldValue.setEndCompanyId(orderRentVehicleDetail.getEndCompanyId());
orderRentVehicleBiz.updateSelectiveByIdRe(oldValue);
ObjectRestResponse objectRestResponse = vehicleFeign.update(bookRecordUpdateLog);
if (objectRestResponse != null && objectRestResponse.getRel()) {
log.info(stringBuilder.toString());
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createFailedResult(1355, "修改失败!");
}
StringBuilder stringBuilder = new StringBuilder();
OrderRentVehicleDetail oldValue = orderRentVehicleBiz.selectById(orderRentVehicleDetail.getId());
if(oldValue == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
stringBuilder.append("修改订单和预定记录还车公司成功, 订单ID:");
stringBuilder.append( oldValue.getOrderId());
stringBuilder.append("; 原还车公司ID: ");
stringBuilder.append(oldValue.getEndCompanyId());
stringBuilder.append("; 更新后还车公司ID: ");
stringBuilder.append(orderRentVehicleDetail.getEndCompanyId());
stringBuilder.append("; 操作人ID:");
stringBuilder.append(userDTO.getId());
stringBuilder.append("; 操作人账号:");
stringBuilder.append(userDTO.getUsername());
//添加修改记录实体
BookRecordUpdateLog bookRecordUpdateLog = new BookRecordUpdateLog();
bookRecordUpdateLog.setBookRecordId(oldValue.getBookRecordId());
bookRecordUpdateLog.setOldRetCompanyId(oldValue.getEndCompanyId());
bookRecordUpdateLog.setNewRetCompanyId(orderRentVehicleDetail.getEndCompanyId());
bookRecordUpdateLog.setOperaterId(userDTO.getId());
bookRecordUpdateLog.setOperaterName(userDTO.getName());
bookRecordUpdateLog.setOrderId(oldValue.getOrderId());
bookRecordUpdateLog.setCreateTime(new Date());
BeanUtil.copyProperties(orderRentVehicleDetail, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
CompanyDetail companyDetail = vehicleFeign.getCompanyDetail(orderRentVehicleDetail.getEndCompanyId()).getData();
if(companyDetail != null) {
oldValue.setEndCity(companyDetail.getAddrCity());
oldValue.setEndAddr(companyDetail.detailAddr());
}
oldValue.setEndCompanyId(orderRentVehicleDetail.getEndCompanyId());
orderRentVehicleBiz.updateSelectiveByIdRe(oldValue);
ObjectRestResponse objectRestResponse = vehicleFeign.update(bookRecordUpdateLog);
if (objectRestResponse!= null && objectRestResponse.getRel()) {
log.info(stringBuilder.toString());
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createFailedResult(1355, "修改失败!");
}
/**
* 获取订单详情,包含驾驶人信息,违约金等信息
*
* @param no
* @return
*/
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (orderPageVo.getStatus() == 4) { //未交车
/**
* 获取订单详情,包含驾驶人信息,违约金等信息
* @param no
* @return
*/
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (orderPageVo.getStatus() == 4) { //未交车
// boolean flag = getTodayTime(orderPageVo.getOrderRentVehicleDetail().getStartTime());
// if (!flag) {
// return ObjectRestResponse.createFailedResult(3501, "今日不是交车日期");
// }
getDriverInfo(orderPageVo);
} else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车
getDriverInfo(orderPageVo);
getUserLicense(orderPageVo);
}
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderPageVo.getOrderRentVehicleDetail().getVehicleId());
if (restResponse.getData() != null) {
orderPageVo.setVehicalNumberPlat(restResponse.getData().getNumberPlate());
}
} else if (orderPageVo.getOrderTourDetail() != null) {
if (StringUtils.isNotBlank(orderPageVo.getOrderTourDetail().getTourUserIds())) {
List<TourUser> list = tourFeign.getTourUsers(orderPageVo.getOrderTourDetail().getTourUserIds()).getData();
orderPageVo.getOrderTourDetail().setUserVoList(list == null || list.size() <= 0 ? new ArrayList<>() : list);
}
}
//设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
orderPageVo.setIllegalReserve(illegalReserve);
orderPageVo.setItems(orderItemBiz.selectList(new OrderItem() {{
setOrderId(orderPageVo.getId());
}}));
return ObjectRestResponse.succ(orderPageVo);
}
/**
* 支付回调处理
*
* @param orderNo
* @param tradeNo
*/
@Transactional
public void payNotifyHandle(String orderNo, String tradeNo, Integer type, Integer payWay) {
OrderRentVehicleDetail orvd = new OrderRentVehicleDetail();
OrderTourDetail otd = new OrderTourDetail();
OrderMemberDetail omd = new OrderMemberDetail();
BaseOrder baseOrder = this.selectOne(new BaseOrder() {{
setNo(orderNo);
}});
if (OrderStatusEnum.ORDER_UNPAY.getCode().equals(baseOrder.getStatus()) && baseOrder.getHasPay().equals(SYS_FALSE)) {
BaseOrder updateOrder = new BaseOrder() {{
setId(baseOrder.getId());
setOutTradeNo(tradeNo);
setHasPay(SYS_TRUE);
setPayTime(System.currentTimeMillis());
setPayOrigin(type);
setPayWay(payWay);
setVersion(baseOrder.getVersion());
}};
//订单账款类
OrderAccountDetail oad = new OrderAccountDetail();
oad.setOriginOrderAmount(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
//账单的的orderAmount 对应 的是商品金额
oad.setOrderAmount(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
//如果是会员订单,则触发会员效益
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
//直接设置订单完成
updateOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
omd = orderMemberDetailBiz.selectOne(new OrderMemberDetail() {{
setOrderId(baseOrder.getId());
}});
//触发会员效益
UserMemberDTO userMemberDTO = new UserMemberDTO() {{
setUserId(baseOrder.getUserId());
setIsBind(ISBIND_BIND);
}};
userMemberDTO.setMemberLevel(omd.getMemberLevel());
userMemberDTO.setRentFreeDays(omd.getRentFreeNum());
userMemberDTO.setTotalNumber(omd.getRentFreeNum());
userMemberDTO.setDiscount(omd.getRebate());
ObjectRestResponse orr = userFeign.buyMember(userMemberDTO);
log.info("orr.getStatus() : " + orr.getStatus());
} else if (OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId());
}});
//账款设置押金
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setDepositAmount(orvd.getDeposit());
//车辆预定审核通过
RestResponse<Integer> result = vehicleFeign.rentProveVehicleBooking(orvd.getBookRecordId());
//确认免费天数
if (orvd.getFreeDays() > 0) {
userFeign.memberDays(baseOrder.getUserId(), orvd.getFreeDays(), UserFeign.MEMBER_DAYS_CONFIRM);
}
} else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
otd = orderTourDetailBiz.selectOne(new OrderTourDetail() {{
setOrderId(baseOrder.getId());
}});
//站点总人数添加
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
}
try {
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 {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
getDriverInfo(orderPageVo);
} else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车
getDriverInfo(orderPageVo);
getUserLicense(orderPageVo);
}
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderPageVo.getOrderRentVehicleDetail().getVehicleId());
if (restResponse.getData() != null) {
orderPageVo.setVehicalNumberPlat(restResponse.getData().getNumberPlate());
}
} else if (orderPageVo.getOrderTourDetail() != null) {
if(StringUtils.isNotBlank(orderPageVo.getOrderTourDetail().getTourUserIds())) {
List<TourUser> list = tourFeign.getTourUsers(orderPageVo.getOrderTourDetail().getTourUserIds()).getData();
orderPageVo.getOrderTourDetail().setUserVoList(list == null || list.size() <= 0 ? new ArrayList<>() : list);
}
}
//设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
orderPageVo.setIllegalReserve(illegalReserve);
orderPageVo.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(orderPageVo.getId());
}}));
return ObjectRestResponse.succ(orderPageVo);
}
//处理App用户提醒短信的发送
/**
* 支付回调处理
*
* @param orderNo
* @param tradeNo
*/
@Transactional
public void payNotifyHandle(String orderNo, String tradeNo, Integer type, Integer payWay) {
OrderRentVehicleDetail orvd = new OrderRentVehicleDetail();
OrderTourDetail otd = new OrderTourDetail();
OrderMemberDetail omd = new OrderMemberDetail();
BaseOrder baseOrder = this.selectOne(new BaseOrder() {{
setNo(orderNo);
}});
if (OrderStatusEnum.ORDER_UNPAY.getCode().equals(baseOrder.getStatus()) && baseOrder.getHasPay().equals(SYS_FALSE)) {
BaseOrder updateOrder = new BaseOrder() {{
setId(baseOrder.getId());
setOutTradeNo(tradeNo);
setHasPay(SYS_TRUE);
setPayTime(System.currentTimeMillis());
setPayOrigin(type);
setPayWay(payWay);
setVersion(baseOrder.getVersion());
}};
//订单账款类
OrderAccountDetail oad = new OrderAccountDetail();
oad.setOriginOrderAmount(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
//账单的的orderAmount 对应 的是商品金额
oad.setOrderAmount(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
//如果是会员订单,则触发会员效益
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
//直接设置订单完成
updateOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
omd = orderMemberDetailBiz.selectOne(new OrderMemberDetail() {{
setOrderId(baseOrder.getId());
}});
//触发会员效益
UserMemberDTO userMemberDTO = new UserMemberDTO() {{
setUserId(baseOrder.getUserId());
setIsBind(ISBIND_BIND);
}};
userMemberDTO.setMemberLevel(omd.getMemberLevel());
userMemberDTO.setRentFreeDays(omd.getRentFreeNum());
userMemberDTO.setTotalNumber(omd.getRentFreeNum());
userMemberDTO.setDiscount(omd.getRebate());
ObjectRestResponse orr = userFeign.buyMember(userMemberDTO);
log.info("orr.getStatus() : " + orr.getStatus());
} else if (OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId());
}});
//账款设置押金
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setDepositAmount(orvd.getDeposit());
//车辆预定审核通过
RestResponse<Integer> result = vehicleFeign.rentProveVehicleBooking(orvd.getBookRecordId());
//确认免费天数
if (orvd.getFreeDays() > 0) {
userFeign.memberDays(baseOrder.getUserId(), orvd.getFreeDays(), UserFeign.MEMBER_DAYS_CONFIRM);
}
} else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
otd = orderTourDetailBiz.selectOne(new OrderTourDetail() {{
setOrderId(baseOrder.getId());
}});
//站点总人数添加
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
}
try {
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 {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
//处理App用户提醒短信的发送
// orderMsgBiz.handelAppUserMsg(orvd, omd, baseOrder, appUserDTO);
orderMsgBiz.handelMsgPayNew(orvd, otd, omd, baseOrder, appUserDTO);
orderMsgBiz.handelMsgPayNew(orvd, otd, omd, baseOrder, appUserDTO);
//处理后台用户提醒短信的发送
//处理后台用户提醒短信的发送
// orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_PAY);
sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_PAY);
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_FINISH);
}
}
} else {
log.error(" order has payed , orderNo:{}, tradeNo:{} ", orderNo, tradeNo);
}
}
sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_PAY);
if(OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_FINISH);
}
}
} else {
log.error(" order has payed , orderNo:{}, tradeNo:{} ", orderNo, tradeNo);
}
}
public void sendOrderMq(OrderRentVehicleDetail orvd, OrderTourDetail otd, OrderMemberDetail omd, BaseOrder baseOrder, Integer sign) {
//发送队列消息
OrderMQDTO orderMQDTO = BeanUtil.toBean(baseOrder, OrderMQDTO.class);
orderMQDTO.setOrderRentVehicleDetail(orvd);
orderMQDTO.setOrderTourDetail(otd);
orderMQDTO.setOrderMemberDetail(omd);
public void sendOrderMq(OrderRentVehicleDetail orvd, OrderTourDetail otd, OrderMemberDetail omd, BaseOrder baseOrder, Integer sign) {
//发送队列消息
OrderMQDTO orderMQDTO = BeanUtil.toBean(baseOrder, OrderMQDTO.class);
orderMQDTO.setOrderRentVehicleDetail(orvd);
orderMQDTO.setOrderTourDetail(otd);
orderMQDTO.setOrderMemberDetail(omd);
//获取item
orderMQDTO.setItems(orderItemBiz.selectList(new OrderItem() {{
setOrderId(baseOrder.getId());
}}));
//获取item
orderMQDTO.setItems(orderItemBiz.selectList(new OrderItem() {{
setOrderId(baseOrder.getId());
}}));
sendQueue(orderMQDTO, sign);
}
sendQueue(orderMQDTO, sign);
}
@Override
public void updateSelectiveById(BaseOrder entity) {
super.updateSelectiveById(entity);
}
@Override
public void updateSelectiveById(BaseOrder entity) {
super.updateSelectiveById(entity);
}
/**
* 更新(不成功抛异常)
*
* @param baseOrder
* @return
*/
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder) {
return updateSelectiveByIdReT(baseOrder, false);
}
/**
* 更新(不成功抛异常)
*
* @param baseOrder
* @return
*/
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder) {
return updateSelectiveByIdReT(baseOrder, false);
}
/**
* 更新(不成功抛异常)
*
* @param baseOrder
* @return
*/
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder, boolean needVersion) {
if (needVersion) {
baseOrder.setVersion(selectById(baseOrder.getId()).getVersion());
}
if (updateSelectiveByIdRe(baseOrder) > 0) {
return selectById(baseOrder.getId());
} else {
log.error(StrUtil.format("数据更新失败:baseOrder: {}", JSONUtil.toJsonStr(baseOrder)));
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
}
/**
* 更新(不成功抛异常)
*
* @param baseOrder
* @return
*/
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder, boolean needVersion) {
if (needVersion) {
baseOrder.setVersion(selectById(baseOrder.getId()).getVersion());
}
if (updateSelectiveByIdRe(baseOrder) > 0) {
return selectById(baseOrder.getId());
} else {
log.error(StrUtil.format("数据更新失败:baseOrder: {}", JSONUtil.toJsonStr(baseOrder)));
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
}
// /**
......@@ -837,89 +829,88 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
// }
// }
public boolean getTodayTime(Long time) {
Long startTime = getDayStart();
if (time >= startTime && time <= startTime + 24 * 60 * 60 * 1000 - 1) {
return true;
}
return false;
}
public boolean getTodayTime(Long time) {
Long startTime = getDayStart();
if (time >= startTime && time <= startTime + 24 * 60 * 60 * 1000 - 1) {
return true;
}
return false;
}
public static Long getDayStart() {
long current = System.currentTimeMillis();
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
return zero;
}
public static Long getDayStart() {
long current = System.currentTimeMillis();
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
return zero;
}
private void sendQueue(OrderMQDTO orderMQDTO, Integer sign) {
try {
orderMQDTO.setSign(sign);
SendMsgDTO sendMsgDTO = new SendMsgDTO() {{
setExchange(ORDER_TOPIC);
}};
sendMsgDTO.setJson(JSONUtil.toJsonStr(orderMQDTO));
switch (sign) {
case 2:
sendMsgDTO.setRoutKey(KEY_ORDER_CANCEL);
break;
case 4:
sendMsgDTO.setRoutKey(KEY_ORDER_PAY);
break;
case 6:
sendMsgDTO.setRoutKey(KEY_ORDER_FINLISH);
break;
case 101:
sendMsgDTO.setRoutKey(KEY_ORDER_PART_DEPOSIT);
break;
default:
break;
}
mqSenderFeign.postSendMessage(sendMsgDTO);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
private void sendQueue(OrderMQDTO orderMQDTO, Integer sign) {
try {
orderMQDTO.setSign(sign);
SendMsgDTO sendMsgDTO = new SendMsgDTO(){{
setExchange(ORDER_TOPIC);
}};
sendMsgDTO.setJson(JSONUtil.toJsonStr(orderMQDTO));
switch (sign) {
case 2:
sendMsgDTO.setRoutKey(KEY_ORDER_CANCEL);
break;
case 4:
sendMsgDTO.setRoutKey(KEY_ORDER_PAY);
break;
case 6:
sendMsgDTO.setRoutKey(KEY_ORDER_FINLISH);
break;
case 101:
sendMsgDTO.setRoutKey(KEY_ORDER_PART_DEPOSIT);
break;
default:
break;
}
mqSenderFeign.postSendMessage(sendMsgDTO);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public Query initQuery(String no) {
QueryOrderDetailDTO qodd = new QueryOrderDetailDTO();
//qodd.setCrtUser(Integer.valueOf(BaseContextHandler.getUserID()));
qodd.setUserId(Integer.valueOf(BaseContextHandler.getUserID()));
qodd.setNo(no);
qodd.setLimit(1);
qodd.setPage(1);
Query query = new Query(qodd);
return query;
}
public Query initQuery(String no) {
QueryOrderDetailDTO qodd = new QueryOrderDetailDTO();
//qodd.setCrtUser(Integer.valueOf(BaseContextHandler.getUserID()));
qodd.setUserId(Integer.valueOf(BaseContextHandler.getUserID()));
qodd.setNo(no);
qodd.setLimit(1);
qodd.setPage(1);
Query query = new Query(qodd);
return query;
}
@Override
public UserFeign getUserFeign() {
return userFeign;
}
@Override
public UserFeign getUserFeign() {
return userFeign;
}
/**
* 订单查询类
*/
@Data
public static class QueryOrderDetailDTO extends QueryOrderDTO {
private String no;
}
/**
* 订单查询类
*/
@Data
public static class QueryOrderDetailDTO extends QueryOrderDTO {
private String no;
}
/**
* 获取退还优惠卷
*
* @param orderId
*/
public List<Coupon> getReturnCouponByOrderId(Integer orderId) {
BaseOrder baseOrder = mapper.selectByPrimaryKey(orderId);
String backCoupon = baseOrder.getBackCoupon();
if (StringUtils.isNotBlank(backCoupon)) {
String[] couponArray = backCoupon.split(",");
return activityFeign.couponsByTickerNoList(Lists.newArrayList(couponArray));
}
return Lists.newArrayList();
}
/**
* 获取退还优惠卷
* @param orderId
*/
public List<Coupon> getReturnCouponByOrderId(Integer orderId) {
BaseOrder baseOrder = mapper.selectByPrimaryKey(orderId);
String backCoupon = baseOrder.getBackCoupon();
if (StringUtils.isNotBlank(backCoupon)) {
String[] couponArray = backCoupon.split(",");
return activityFeign.couponsByTickerNoList(Lists.newArrayList(couponArray));
}
return Lists.newArrayList();
}
public List<OrderDTO> selectOrdersByTypeAndTime(List<Integer> types,Integer hasPay, Date startDate, Date endDate) {
public List<OrderDTO> selectOrdersByTypeAndTime(List<Integer> types, Integer hasPay, Date startDate, Date endDate) {
List<OrderDTO> orderDTOS = mapper.selectOrdersByTypeAndTime(types,hasPay,startDate,endDate);
return CollectionUtils.isEmpty(orderDTOS)?Collections.EMPTY_LIST:orderDTOS;
}
......
......@@ -2,22 +2,24 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.bo.CompanyPerformanceBo;
import com.xxfc.platform.order.contant.enumerate.ReceivedStatisticsEnum;
import com.xxfc.platform.order.pojo.dto.CompanyPerformanceFindDTO;
import com.xxfc.platform.order.bo.CompanyPerformanceBo;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.*;
/**
* @author libin
......@@ -30,9 +32,131 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CompanyPerformanceBiz {
private final OrderReceivedStatisticsBiz orderReceivedStatisticsBiz;
private final VehicleFeign vehicleFeign;
private final OrderReceivedStatisticsBiz orderReceivedStatisticsBiz;
private final VehicleFeign vehicleFeign;
/**
* 导出数据
*
* @param companyPerformanceFindDTO
* @param outputStream
*/
public void exportOrderReceivedStatisticsData(CompanyPerformanceFindDTO companyPerformanceFindDTO, ServletOutputStream outputStream) throws IOException {
//1.查询数据
PageDataVO<CompanyPerformanceBo> pageDataVO = selectCompanyPerformancePage(companyPerformanceFindDTO);
List<CompanyPerformanceBo> data = pageDataVO.getData();
//excel相关
XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
XSSFSheet sheet = hssfWorkbook.createSheet("公司业绩统计报表");
Row headerRow = sheet.createRow(0);
CellStyle headerCellStyle = createHeaderCellStyle(hssfWorkbook);
String[] headerValue = {"时间", "公司", "会员费", "租车费","押金","不计免赔费", "旅游费", "租借天数", "出车服务次数", "收车服务次数"};
createHeader(headerRow, 0, headerValue, headerCellStyle);
for (int i = 0; i < headerValue.length; i++) {
sheet.setColumnWidth(i, 24 * 256);
}
//设置数据
CellStyle generalCellStyle = createGeneralCellStyle(hssfWorkbook);
List<String[]> companyStatisticsData = getCompanyStatisticsData(data, companyPerformanceFindDTO.getStatisticalWay());
createCompnayStatisticsCellData(sheet, 1, generalCellStyle, companyStatisticsData);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private void createCompnayStatisticsCellData(Sheet sheet, int startRowIndex, CellStyle cellStyle, List<String[]> staffStatisticsData) {
for (String[] data : staffStatisticsData) {
Row row = sheet.createRow(startRowIndex++);
createCellCount(row, 0, data, cellStyle);
}
}
private void createCellCount(Row row, int CellStartIndex, String[] data, CellStyle cellStyle) {
for (int i = CellStartIndex, y = 0; y < data.length; i++, y++) {
Cell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(data[y]);
}
}
private List<String[]> getCompanyStatisticsData(List<CompanyPerformanceBo> companyPerformanceBos, Integer statisticalWay) {
List<String[]> data = new ArrayList<>(companyPerformanceBos.size());
for (int i = 0; i < companyPerformanceBos.size(); i++) {
String[] companyData = getData(companyPerformanceBos.get(i), statisticalWay);
data.add(companyData);
}
return data;
}
private String[] getData(CompanyPerformanceBo companyPerformanceBo, Integer statisticalWay) {
String dateStr = "";
if (statisticalWay == ReceivedStatisticsEnum.DAY.getWayCode()) {
dateStr = DateUtil.format(companyPerformanceBo.getDate(),"yyyy.MM.dd");
}
if (statisticalWay == ReceivedStatisticsEnum.WEEK.getWayCode()) {
String startDateStr = DateUtil.format(companyPerformanceBo.getStartDate(), "yyyy.MM.dd");
String endDateStr = DateUtil.format(companyPerformanceBo.getEndDate(), "yyyy.MM.dd");
dateStr=String.format("%s~%s",startDateStr,endDateStr);
}
if (statisticalWay == ReceivedStatisticsEnum.MONTH.getWayCode()) {
dateStr = String.format("%d.%s",companyPerformanceBo.getYear(),companyPerformanceBo.getMonth().replace(companyPerformanceBo.getYear()+"",""));
}
return new String[]{
dateStr,
companyPerformanceBo.getCompanyName(),
companyPerformanceBo.getMemberAmount().toString(),
companyPerformanceBo.getRentVehilceAmount().toString(),
companyPerformanceBo.getDepositAmount().toString(),
companyPerformanceBo.getNoDeductibleAmount().toString(),
companyPerformanceBo.getTravelAmount().toString(),
String.valueOf(companyPerformanceBo.getRentDays()),
String.valueOf(companyPerformanceBo.getDepartureNum()),
String.valueOf(companyPerformanceBo.getArrivalNum())};
}
private void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle) {
for (int i = 0; i < header.length; i++) {
Cell cell = row.createCell(cellStartIndex);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex += 1;
}
}
private CellStyle createGeneralCellStyle(XSSFWorkbook hssfWorkbook) {
CellStyle cellStyleGeneral = createHeaderCellStyle(hssfWorkbook);
cellStyleGeneral.setWrapText(true);
XSSFFont generalFont = createFont(hssfWorkbook);
generalFont.setBold(false);
cellStyleGeneral.setFont(generalFont);
return cellStyleGeneral;
}
private CellStyle createHeaderCellStyle(XSSFWorkbook hssfWorkbook) {
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setLocked(false);
XSSFFont headerFont = createFont(hssfWorkbook);
cellStyleHeader.setFont(headerFont);
return cellStyleHeader;
}
private XSSFFont createFont(XSSFWorkbook hssfWorkbook) {
XSSFFont font = hssfWorkbook.createFont();
font.setFontName("黑体");
font.setBold(true);
return font;
}
/**
* 分页查询公司业绩
*
* @param companyPerformanceFindDTO
* @return
*/
public PageDataVO<CompanyPerformanceBo> selectCompanyPerformancePage(CompanyPerformanceFindDTO companyPerformanceFindDTO) {
Map<Integer, String> companyMap = vehicleFeign.findCompanyMap();
......@@ -73,4 +197,5 @@ public class CompanyPerformanceBiz {
}
return pageDataVO;
}
}
......@@ -4,8 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -660,7 +658,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
* @return
*/
public List<OrderAccountBo> selectByTypeAndDate(Integer orderType, Date startDate, Date endDate) {
List<OrderAccountBo> accountBos = mapper.selectOrderAccountByOrderTypeAndStartTimeAndEndTime(orderType,startDate.getTime(),endDate.getTime());
List<OrderAccountBo> accountBos = mapper.selectOrderAccountByOrderTypeAndStartTimeAndEndTime(orderType,startDate.getTime(),endDate.getTime());
return CollectionUtils.isEmpty(accountBos)? Collections.EMPTY_LIST:accountBos;
}
......@@ -671,7 +669,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
* @param staffUserIds
* @return
*/
public List<OrderAccountBo> selectByDateAndStatffIds(Date startDate, Date endDate, List<Integer> staffUserIds) {
public List<OrderAccountBo> selectByDateAndStatffIds(Date startDate, Date endDate,List<Integer> staffUserIds) {
List<OrderAccountBo> orderAccountBos = mapper.selectByDateAndStatffIds(startDate,endDate,staffUserIds);
return CollectionUtils.isNotEmpty(orderAccountBos)?Collections.EMPTY_LIST:orderAccountBos;
}
......
......@@ -4,16 +4,13 @@ import cn.hutool.core.util.ObjectUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.enumconstant.LevelEnum;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.bo.FeeTypeBo;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
import com.xxfc.platform.order.entity.OrderMemberReceivedStatistics;
import com.xxfc.platform.order.mapper.OrderMemberReceivedStatisticsMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
......@@ -37,10 +34,9 @@ import java.util.stream.Collectors;
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceivedStatisticsMapper, OrderMemberReceivedStatistics>{
public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceivedStatisticsMapper, OrderMemberReceivedStatistics> {
private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz orderAccountBiz;
private final int PAY_ORDER = 101;
/**
* 会员统计查询
......@@ -55,142 +51,113 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
/**
* 会员统计处理
*
* @param startDate 开始时间
* @param endDate 结束时间
* @param startDate 开始时间
* @param endDate 结束时间
* @param companyMap 公司
*/
public List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics(Date startDate, Date endDate,Map<Integer,String> companyMap) {
public List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics(Date startDate, Date endDate, Map<Integer, String> companyMap) {
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>(18);
List<String> stisticsActiveState = new ArrayList<>();
//根据时间范围查询出会员单
List<OrderDTO> orders = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_MEMBER_TYPE), null,startDate, endDate);
List<OrderDTO> orders = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_MEMBER_TYPE),null, startDate, endDate);
//数据处理 状态组合 按支付状态分组 而后按组合状态
Map<Boolean, Map<String, Map<LevelEnum, List<OrderDTO>>>> stateGroupMap = orders.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", Objects.isNull(x.getCompanyId())?StatisticsStatusEnum.DEFAULT_COMPANY:x.getCompanyId(),
x.getOrderOrigin(), Objects.isNull(x.getPayWay()) ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(),
x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
})
.collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.groupingBy(OrderDTO::getLevelEnum, Collectors.toList()))));
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = StatisticsStatusEnum.processOrdersWithState(stisticsActiveState, orders);
//订单账目信息
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_MEMBER_TYPE, startDate, endDate);
//账目数据处理 状态组合
Map<String, Map<LevelEnum, List<OrderAccountBo>>> orderAccountMap = orderAccountBoList.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", Objects.isNull(x.getCompanyId())?StatisticsStatusEnum.DEFAULT_COMPANY:x.getCompanyId(), x.getOrderOrigin(),
Objects.isNull(x.getPayWay()) ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(),
x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.groupingBy(OrderAccountBo::getLevelEnum, Collectors.toList())));
Map<String, List<OrderAccountBo>> orderAccountMap = StatisticsStatusEnum.processOrderAccountsWithState(stisticsActiveState, orderAccountBoList);
//已经支付单
Set<Map.Entry<String, Map<LevelEnum, List<OrderAccountBo>>>> ordersSet = orderAccountMap.entrySet();
for (Map.Entry<String, Map<LevelEnum, List<OrderAccountBo>>> orderEntry : ordersSet) {
Set<Map.Entry<String, List<OrderAccountBo>>> ordersSet = orderAccountMap.entrySet();
for (Map.Entry<String, List<OrderAccountBo>> orderEntry : ordersSet) {
MemberLevelStatistics memberLevelStatistics = new MemberLevelStatistics();
//状态key
String orderKey = orderEntry.getKey();
Map<LevelEnum, List<OrderAccountBo>> orderMemberLevelMap = orderEntry.getValue();
//创建默认的会员统计对象
OrderMemberReceivedStatistics orderMemberReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
//设置相关默认值
StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey, companyMap, orderMemberReceivedStatistics);
//按会员等级分组
Map<LevelEnum, List<OrderAccountBo>> orderMemberLevelMap = orderEntry.getValue().stream().collect(Collectors.groupingBy(OrderDTO::getLevelEnum, Collectors.toList()));
Set<Map.Entry<LevelEnum, List<OrderAccountBo>>> ordermemberLevelentries = orderMemberLevelMap.entrySet();
MemberLevelStatistics memberLevelStatistics = new MemberLevelStatistics();
//遍历
for (Map.Entry<LevelEnum, List<OrderAccountBo>> orderMemberLevelEntry : ordermemberLevelentries) {
Integer totalQuantity = stateGroupMap==null?0:stateGroupMap.get(Boolean.TRUE).get(orderKey) == null ? 0 : stateGroupMap.get(Boolean.TRUE).get(orderKey).size();
//对应状态的订单量
Integer totalQuantity = stateGroupMap == null ?
0 : stateGroupMap.get(Boolean.TRUE).get(orderKey) == null ?
0 : stateGroupMap.get(Boolean.TRUE).get(orderKey).size();
//处理支付金额(支付、退款、违约金)
wrapMemberLevelStatistics(orderMemberLevelEntry.getKey(), orderMemberLevelEntry.getValue(), totalQuantity, memberLevelStatistics);
}
OrderMemberReceivedStatistics orderMemberReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey,companyMap,new OrderMemberReceivedStatistics());
//对应的金额或订单量的复制
BeanUtils.copyProperties(memberLevelStatistics, orderMemberReceivedStatistics);
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
}
//未支付单
Map<String, Map<LevelEnum, List<OrderDTO>>> noPayOrdersMap = stateGroupMap==null?Collections.EMPTY_MAP:stateGroupMap.get(Boolean.FALSE)==null?Collections.EMPTY_MAP:stateGroupMap.get(Boolean.FALSE);
List<OrderMemberReceivedStatistics> noPayOrderMemberReceivedStatisticsList = createOrderMemberReceivedStatisticsList(startDate,noPayOrdersMap,companyMap);
Map<String, List<OrderDTO>> noPayOrdersMap = stateGroupMap == null ?
Collections.EMPTY_MAP : stateGroupMap.get(Boolean.FALSE) == null ?
Collections.EMPTY_MAP : stateGroupMap.get(Boolean.FALSE);
List<OrderMemberReceivedStatistics> noPayOrderMemberReceivedStatisticsList = createNoPayOrderMemberReceivedStatisticsList(startDate, noPayOrdersMap, companyMap);
orderMemberReceivedStatisticsList.addAll(noPayOrderMemberReceivedStatisticsList);
//创建剩余状态数据
List<OrderMemberReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState,companyMap);
List<OrderMemberReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyMap);
orderMemberReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存
insertMemberReceivedStatisticsBatch(orderMemberReceivedStatisticsList);
StatisticsStatusEnum.insertReceivedStatisticsBatch(orderMemberReceivedStatisticsList, mapper);
return orderMemberReceivedStatisticsList;
}
/**
* memberLevelStatistics 对象包装
*
* @param levelEnum 会员等级
* @param orderAccountBos 账目对象
* @param totalQuantity 对应等级的单量
* @param levelEnum 会员等级
* @param orderAccountBos 账目对象
* @param totalQuantity 对应等级的单量
* @param memberLevelStatistics
* @return
*/
private MemberLevelStatistics wrapMemberLevelStatistics(LevelEnum levelEnum, List<OrderAccountBo> orderAccountBos, Integer totalQuantity, MemberLevelStatistics memberLevelStatistics) {
Map<String,BigDecimal> orderFeeMap = getOrderAmountAndLateFeeAmount(orderAccountBos);
memberLevelStatistics.setLateFeeAmount(orderFeeMap.get(StatisticsStatusEnum.LATEFEE_AMOUNT));
memberLevelStatistics.setOrderRefundAmount(orderFeeMap.get(StatisticsStatusEnum.ORDER_REFUND_AMOUNT));
return wrapMemberLevelStatistics(levelEnum,orderFeeMap.get(StatisticsStatusEnum.ORDER_AMOUNT),totalQuantity,memberLevelStatistics);
}
/**
* 获取收入
*
* @param orderAccountBos
* @return
*/
private Map<String,BigDecimal> getOrderAmountAndLateFeeAmount(List<OrderAccountBo> orderAccountBos) {
Map<String,BigDecimal> orderAndLateMap = new HashMap<>();
//订单金额
BigDecimal totalOrderAmount = BigDecimal.ZERO;
//续约金额
BigDecimal totalLateFeeAmount = BigDecimal.ZERO;
//订单退款金额
BigDecimal totalOrderRefundAmount = BigDecimal.ZERO;
if (CollectionUtils.isEmpty(orderAccountBos)) {
return orderAndLateMap;
}
for (OrderAccountBo orderAccountBo : orderAccountBos) {
OrderAccountDetail accountDetailEntity = orderAccountBo.getAccountDetailEntity();
if (orderAccountBo.getAccountType() == PAY_ORDER) {
totalOrderAmount = totalOrderAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
} else {
totalOrderRefundAmount = totalOrderRefundAmount.add(accountDetailEntity.getOrderAmount());
List<OrderAccountDeduction> deductions = accountDetailEntity.getDeductions();
for (OrderAccountDeduction deduction : deductions) {
Integer type = deduction.getType();
if (DeductionTypeEnum.lateFeeCode.contains(type)){
totalLateFeeAmount = totalLateFeeAmount.add(deduction.getAmount());
}
}
}
}
orderAndLateMap.put(StatisticsStatusEnum.ORDER_AMOUNT,totalOrderAmount);
orderAndLateMap.put(StatisticsStatusEnum.LATEFEE_AMOUNT,totalLateFeeAmount);
orderAndLateMap.put(StatisticsStatusEnum.ORDER_REFUND_AMOUNT,totalOrderRefundAmount);
return orderAndLateMap;
//获取账目各种费用
FeeTypeBo feeTypeBo = StatisticsStatusEnum.getFeeTyBoByOrderAccounts(orderAccountBos);
BeanUtils.copyProperties(feeTypeBo, memberLevelStatistics);
return wrapMemberLevelStatistics(levelEnum, feeTypeBo.getTotalAmount(), totalQuantity, memberLevelStatistics);
}
/**
* @param startDate 时间
* @param noPayOrdersMap 未支付单map
* @param companyMap 公司map
* @return
*/
private List<OrderMemberReceivedStatistics> createOrderMemberReceivedStatisticsList(Date startDate, Map<String, Map<LevelEnum, List<OrderDTO>>> noPayOrdersMap,Map<Integer,String> companyMap) {
private List<OrderMemberReceivedStatistics> createNoPayOrderMemberReceivedStatisticsList(Date startDate, Map<String, List<OrderDTO>> noPayOrdersMap, Map<Integer, String> companyMap) {
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>();
if (noPayOrdersMap == null || noPayOrdersMap.isEmpty()) {
return orderMemberReceivedStatisticsList;
}
Set<Map.Entry<String, Map<LevelEnum, List<OrderDTO>>>> noPayOrderSet = noPayOrdersMap.entrySet();
for (Map.Entry<String, Map<LevelEnum, List<OrderDTO>>> noPayOrderEntry : noPayOrderSet) {
Set<Map.Entry<String, List<OrderDTO>>> noPayOrderSet = noPayOrdersMap.entrySet();
for (Map.Entry<String, List<OrderDTO>> noPayOrderEntry : noPayOrderSet) {
MemberLevelStatistics memberLevelStatistics = new MemberLevelStatistics();
//获取状态
String noPayOrderStateGroup = noPayOrderEntry.getKey();
Map<LevelEnum, List<OrderDTO>> noPayOrderEntryValue = noPayOrderEntry.getValue();
OrderMemberReceivedStatistics orderMemberReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderStateGroup,companyMap,new OrderMemberReceivedStatistics());
Set<Map.Entry<LevelEnum, List<OrderDTO>>> noPayOrderEntries = noPayOrderEntryValue.entrySet();
//创建默认的会员订单统计对象
OrderMemberReceivedStatistics orderMemberReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
//设置默认属性值
StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderStateGroup, companyMap, orderMemberReceivedStatistics);
//会员订单按等级分组
Map<LevelEnum, List<OrderDTO>> noPayOrderEntryMap = noPayOrderEntry.getValue().stream().collect(Collectors.groupingBy(OrderDTO::getLevelEnum, Collectors.toList()));
Set<Map.Entry<LevelEnum, List<OrderDTO>>> noPayOrderEntries = noPayOrderEntryMap.entrySet();
//遍历等级分组map
for (Map.Entry<LevelEnum, List<OrderDTO>> orderEntry : noPayOrderEntries) {
//处理金额(支付金额,订单量)
wrapOrderMemberReceivedStatistics(orderEntry.getValue(), orderEntry.getKey(), memberLevelStatistics);
}
//复制对象属性值(对应的等级金额和订单量)
BeanUtils.copyProperties(memberLevelStatistics, orderMemberReceivedStatistics);
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
}
......@@ -204,29 +171,35 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
* @return
*/
private MemberLevelStatistics wrapOrderMemberReceivedStatistics(List<OrderDTO> orders, LevelEnum levelEnum, MemberLevelStatistics memberLevelStatistics) {
//会员单对应等级的总量
orders = CollectionUtils.isEmpty(orders) ? Collections.EMPTY_LIST : orders;
BigDecimal totalAmount = orders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
return wrapMemberLevelStatistics(levelEnum,totalAmount,orders.size(),memberLevelStatistics);
//会员单对应等级的总金额
BigDecimal totalAmount = orders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
return wrapMemberLevelStatistics(levelEnum, totalAmount, orders.size(), memberLevelStatistics);
}
/**
* memberLevelStatistics 对象包装
* @param levelEnum
* @param amount
* @param quantity
*
* @param levelEnum 会员等级
* @param amount 订单总额
* @param quantity 订单量
* @param memberLevelStatistics
* @return
*/
private MemberLevelStatistics wrapMemberLevelStatistics(LevelEnum levelEnum,BigDecimal amount,Integer quantity,MemberLevelStatistics memberLevelStatistics){
private MemberLevelStatistics wrapMemberLevelStatistics(LevelEnum levelEnum, BigDecimal amount, Integer quantity, MemberLevelStatistics memberLevelStatistics) {
switch (levelEnum) {
//普通会员
case GENERAL:
memberLevelStatistics.setToalCommonAmmount(amount);
memberLevelStatistics.setTotalCommonQuantity(quantity);
break;
//黄金会员
case GOLD:
memberLevelStatistics.setTotalGoldAmount(amount);
memberLevelStatistics.setTotalGoldQuantity(quantity);
break;
//钻石会员
case DIAMOND:
memberLevelStatistics.setTotalDiamondAmmount(amount);
memberLevelStatistics.setTotalDiamondQuantity(quantity);
......@@ -242,19 +215,19 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
*
* @param startDate 时间
* @param statisticsStateGroups 状态组合 集合
* @param companyMap 公司
* @param companyMap 公司
* @return
*/
private List<OrderMemberReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, List<String> statisticsStateGroups,Map<Integer,String> companyMap) {
private List<OrderMemberReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, List<String> statisticsStateGroups, Map<Integer, String> companyMap) {
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>();
//获取剩余状态组合
List<Integer> companyIds = Objects.isNull(companyMap)?Collections.EMPTY_LIST: Lists.newArrayList(companyMap.keySet());
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds,statisticsStateGroups);
List<Integer> companyIds = Objects.isNull(companyMap) ? Collections.EMPTY_LIST : Lists.newArrayList(companyMap.keySet());
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds, statisticsStateGroups);
//创建会员克隆统计对象
OrderMemberReceivedStatistics orderMemberReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
//统计对象的生成
otherStatisticsStateGroup.stream().peek(stateGroup -> {
OrderMemberReceivedStatistics orderMemberReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup,companyMap,
OrderMemberReceivedStatistics orderMemberReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, companyMap,
ObjectUtil.clone(orderMemberReceivedStatistics));
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatisticsClone);
}).count();
......@@ -268,8 +241,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
*/
private OrderMemberReceivedStatistics createDefaultOrderMemberReceivedStatistics() {
OrderMemberReceivedStatistics orderMemberReceivedStatistics = new OrderMemberReceivedStatistics();
orderMemberReceivedStatistics.setTotalAmount(BigDecimal.ZERO);
orderMemberReceivedStatistics.setTotalQuantity(0);
orderMemberReceivedStatistics.setTotalCommonQuantity(0);
orderMemberReceivedStatistics.setToalCommonAmmount(BigDecimal.ZERO);
orderMemberReceivedStatistics.setTotalGoldQuantity(0);
......@@ -279,15 +250,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
return orderMemberReceivedStatistics;
}
/**
* 批量插入
*
* @param orderMemberReceivedStatistics
*/
public void insertMemberReceivedStatisticsBatch(List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics) {
mapper.insertList(orderMemberReceivedStatistics);
}
@Data
@NoArgsConstructor
private class MemberLevelStatistics {
......@@ -316,16 +278,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
*/
private BigDecimal orderRefundAmount = BigDecimal.ZERO;
/**
* 非会员费
*/
private BigDecimal totalNonMemberAmount;
/**
* 非会员费
*/
private BigDecimal totalMemberAmount;
public BigDecimal getTotalAmount() {
return toalCommonAmmount.add(totalGoldAmount).add(totalDiamondAmmount);
}
......
......@@ -28,7 +28,6 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -56,16 +55,18 @@ public class OrderReceivedStatisticsBiz extends BaseBiz<OrderReceivedStatisticsM
/**
* 公司业绩(按日统计)
*
* @param companyPerformanceFindDTO
* @return
*/
public PageDataVO<CompanyPerformanceBo> selectCompanyPerformanceWithDayPage(CompanyPerformanceFindDTO companyPerformanceFindDTO) {
return PageDataVO.pageInfo(companyPerformanceFindDTO.getPage(), companyPerformanceFindDTO.getLimit(),
return PageDataVO.pageInfo(companyPerformanceFindDTO.getPage(), companyPerformanceFindDTO.getLimit(),
() -> mapper.selectCompanyPerformanceWithDay(companyPerformanceFindDTO));
}
/**
* 公司业绩(按月统计)
*
* @param companyPerformanceFindDTO
* @return
*/
......@@ -76,6 +77,7 @@ public class OrderReceivedStatisticsBiz extends BaseBiz<OrderReceivedStatisticsM
/**
* 公司业绩(按周统计)
*
* @param companyPerformanceFindDTO
* @return
*/
......@@ -237,34 +239,58 @@ public class OrderReceivedStatisticsBiz extends BaseBiz<OrderReceivedStatisticsM
for (Map.Entry<String, List<OrderRentVehicleReceivedStatistics>> rentVehicleEntry : rentVehicleSet) {
String stateGroup = rentVehicleEntry.getKey();
List<OrderRentVehicleReceivedStatistics> rentVehicleEntryValue = rentVehicleEntry.getValue();
OrderRentVehicleReceivedStatistics orderRentVehicle = rentVehicleEntryValue.get(0);
//创建默认的订单统计对象并设置默认值
OrderReceivedStatistics orderReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(date, stateGroup, Collections.EMPTY_MAP, ObjectUtil.clone(orderReceivedStatistics));
//租车单
OrderRentVehicleReceivedStatistics orderRentVehicle = rentVehicleEntryValue.get(0);
//会员单
OrderMemberReceivedStatistics orderMember = memberMap.get(stateGroup).get(0);
//旅游单
OrderTourReceivedStatistics orderTour = tourMap.get(stateGroup).get(0);
//公司id
orderReceivedStatisticsClone.setCompanyId(orderRentVehicle.getCompanyId());
//公司名称
orderReceivedStatisticsClone.setCompanyName(orderRentVehicle.getCompanyName());
OrderMemberReceivedStatistics orderMember = memberMap.get(stateGroup).get(0);
OrderTourReceivedStatistics orderTour = tourMap==null?null:tourMap.get(stateGroup)==null?null:tourMap.get(stateGroup).get(0);
orderReceivedStatisticsClone.setExtraAmount(orderRentVehicle.getExtraAmount());
orderReceivedStatisticsClone.setLossSpecifiedAmount(orderRentVehicle.getLossSpecifiedAmount());
//押金
orderReceivedStatisticsClone.setDepositAmount(orderRentVehicle.getDepositAmount());
//退款押金
orderReceivedStatisticsClone.setDepositRefundAmount(orderRentVehicle.getDepositRefundAmount());
//定损
orderReceivedStatisticsClone.setLossSpecifiedAmount(orderRentVehicle.getLossSpecifiedAmount());
//违章
orderReceivedStatisticsClone.setBreakRulesRegulationAmount(orderRentVehicle.getBreakRulesRegulationAmount());
//免赔退款金额
orderReceivedStatisticsClone.setNoDeductibleRefundAmount(orderRentVehicle.getNoDeductibleRefundAmount());
//免赔金额
orderReceivedStatisticsClone.setNoDeductibleAmount(orderRentVehicle.getNoDeductibleAmount());
orderReceivedStatisticsClone.setTravelAmount(orderTour == null?BigDecimal.ZERO:orderTour.getTotalAmount());
//旅游订单总额
orderReceivedStatisticsClone.setTravelAmount(orderTour.getTotalAmount());
orderReceivedStatisticsClone.setTravelRefundAmount(orderTour.getOrderRefundAmount());
//会员订单总额
orderReceivedStatisticsClone.setMemberAmount(orderMember.getTotalAmount());
orderReceivedStatisticsClone.setMemberRefundAmout(orderMember.getOrderRefundAmount());
//租车订单总额
orderReceivedStatisticsClone.setRentVehicleAmount(orderRentVehicle.getTotalAmount());
BigDecimal totalAmount = orderRentVehicle.getTotalAmount().add(orderTour == null?BigDecimal.ZERO:orderTour.getTotalAmount()).add(orderMember.getTotalAmount());
BigDecimal totalRefundAmount = orderRentVehicle.getOrderRefundAmount().add(orderTour==null?BigDecimal.ZERO:orderTour.getOrderRefundAmount()).add(orderMember.getOrderRefundAmount());
BigDecimal lateFeeAmount = orderRentVehicle.getLateFeeAmount().add(orderTour==null?BigDecimal.ZERO:orderTour.getLateFeeAmount()).add(orderMember.getLateFeeAmount());
Integer totalQuantity = orderRentVehicle.getTotalQuantity() + (orderTour == null?0:orderTour.getTotalQuantity()) + orderMember.getTotalQuantity();
orderReceivedStatisticsClone.setRentVehicleRefundAmount(orderRentVehicle.getOrderRefundAmount());
//合计订单总额
BigDecimal totalAmount = orderRentVehicle.getTotalAmount().add(orderTour.getTotalAmount()).add(orderMember.getTotalAmount());
//合计订单退款总额
BigDecimal totalRefundAmount = orderRentVehicle.getOrderRefundAmount().add(orderTour.getOrderRefundAmount()).add(orderMember.getOrderRefundAmount());
//合计订单违约金
BigDecimal lateFeeAmount = orderRentVehicle.getLateFeeAmount().add(orderTour.getLateFeeAmount()).add(orderMember.getLateFeeAmount());
//合计额外费用
BigDecimal totalExtraAmount = orderRentVehicle.getExtraAmount().add(orderMember.getExtraAmount()).add(orderTour.getExtraAmount());
//会员订单量
orderReceivedStatisticsClone.setMemberQuantity(orderMember.getTotalQuantity());
//旅游订单量
orderReceivedStatisticsClone.setTravelQuantity(orderTour.getTotalQuantity());
//租车订单量
orderReceivedStatisticsClone.setRentVehicleQuantity(orderRentVehicle.getTotalQuantity());
//合计订单量
Integer totalQuantity = orderRentVehicle.getTotalQuantity() + (orderTour.getTotalQuantity()) + orderMember.getTotalQuantity();
orderReceivedStatisticsClone.setExtraAmount(totalExtraAmount);
orderReceivedStatisticsClone.setLateFeeAmount(lateFeeAmount);
orderReceivedStatisticsClone.setTotalAmount(totalAmount);
orderReceivedStatisticsClone.setOrderRefundAmount(totalRefundAmount);
......@@ -272,30 +298,8 @@ public class OrderReceivedStatisticsBiz extends BaseBiz<OrderReceivedStatisticsM
orderReceivedStatisticsList.add(orderReceivedStatisticsClone);
}
insertReceivedStatisticsBatch(orderReceivedStatisticsList);
}
/**
* 批量插入数据 mysql sql语句默认不能超过4M
*
* @param orderReceivedStatistics
*/
public void insertReceivedStatisticsBatch(List<OrderReceivedStatistics> orderReceivedStatistics) {
orderReceivedStatistics.sort(Comparator.comparing(OrderReceivedStatistics::getCompanyId));
int orderSize = orderReceivedStatistics.size();
int sqlAdq = orderSize / StatisticsStatusEnum.DEFAULT_SQL_SIZE;
int sqlMod = orderSize % StatisticsStatusEnum.DEFAULT_SQL_SIZE;
sqlAdq = sqlMod == 0 ? sqlAdq : sqlAdq + 1;
for (int i = 0; i < sqlAdq; i++) {
int fromIndex = StatisticsStatusEnum.DEFAULT_SQL_SIZE * i;
int toIndex = StatisticsStatusEnum.DEFAULT_SQL_SIZE * (i + 1);
toIndex = toIndex > orderSize ? orderSize : toIndex;
List<OrderReceivedStatistics> orderRentVehicleReceivedStatisticsList = orderReceivedStatistics.subList(fromIndex, toIndex);
mapper.insertList(orderRentVehicleReceivedStatisticsList);
}
//保存
StatisticsStatusEnum.insertReceivedStatisticsBatch(orderReceivedStatisticsList, mapper);
}
/**
......
package com.xxfc.platform.order.biz;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.bo.FeeTypeBo;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics;
import com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.function.Supplier;
import java.util.stream.Stream;
/**
* 租车订单统计
......@@ -34,10 +32,8 @@ import java.util.stream.Collectors;
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehicleReceivedStatisticsMapper, OrderRentVehicleReceivedStatistics> {
private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz orderAccountBiz;
private final int PAY_ORDER = 101;
/**
* 租车统计查询
......@@ -52,187 +48,108 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
/**
* 租车统计处理
*
* @param startDate 开始时间
* @param endDate 结束时间
* @param startDate 开始时间
* @param endDate 结束时间
* @param companyMap 公司
*/
public List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics(Date startDate, Date endDate,Map<Integer,String> companyMap) {
public List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics(Date startDate, Date endDate, Map<Integer, String> companyMap) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
List<String> stisticsActiveState = new ArrayList<>();
//根据租车订单类型 时间查询
List<OrderDTO> orderDTOS = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE),null, startDate, endDate);
//数据处理 状态组合 按支付状态分组 而后按组合状态
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = orderDTOS.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(),
x.getOrderOrigin(),
x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY:x.getPayWay()
,x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
})
.collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.toList())));
//数据处理 状态组合 按支付状态分组 而后按组合状态
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = StatisticsStatusEnum.processOrdersWithState(stisticsActiveState, orderDTOS);
//订单账目信息
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE,startDate, endDate);
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE, startDate, endDate);
//账目数据处理 状态组合
Map<String, List<OrderAccountBo>> ordersMap = orderAccountBoList.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(),
x.getOrderOrigin(),
x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY:x.getPayWay(),
x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList()));
Map<String, List<OrderAccountBo>> ordersMap = StatisticsStatusEnum.processOrderAccountsWithState(stisticsActiveState, orderAccountBoList);
//已经支付单
//遍历已经支付单
Set<Map.Entry<String, List<OrderAccountBo>>> ordersSet = ordersMap.entrySet();
for (Map.Entry<String, List<OrderAccountBo>> orderEntry : ordersSet) {
String orderKey = orderEntry.getKey();
List<OrderAccountBo> orderAccountBos = orderEntry.getValue();
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey,companyMap,new OrderRentVehicleReceivedStatistics());
//订单总金额
BigDecimal totalOrderAmount = BigDecimal.ZERO;
//订单总押金
BigDecimal totalDepositAmount = BigDecimal.ZERO;
//总违约金
BigDecimal totalLateFeeAmount = BigDecimal.ZERO;
//订单退款总金额
BigDecimal totalOrderRefundAmount = BigDecimal.ZERO;
//订单押金退款总金额
BigDecimal totalDepositRefundAmount = BigDecimal.ZERO;
//订单违章总金额
BigDecimal totalBreakRulesRegulationAmount = BigDecimal.ZERO;
//订单定损金总金额
BigDecimal totalLossSpecifiedAmount = BigDecimal.ZERO;
//不计免赔金额
BigDecimal damageSafeAmount = BigDecimal.ZERO;
//不计免赔金额退款
BigDecimal refundDamageSafeAmount = BigDecimal.ZERO;
//其它费用
BigDecimal totalExtendAmount = BigDecimal.ZERO;
for (OrderAccountBo orderAccountBo : orderAccountBos) {
OrderAccountDetail accountDetailEntity = orderAccountBo.getAccountDetailEntity();
if (orderAccountBo.getAccountType() == PAY_ORDER) {
totalOrderAmount = totalOrderAmount.add(accountDetailEntity.getOrderAmount());
totalDepositAmount = totalDepositAmount.add(accountDetailEntity.getDepositAmount());
if (Objects.nonNull(orderAccountBo.getDamageSafe()) && (orderAccountBo.getDamageSafe() == StatisticsStatusEnum.DAMAGE_SAFE)){
JSONObject data = orderAccountBo.getData();
if (!data.isEmpty()) {
Object paramJson = data.get(StatisticsStatusEnum.PARMAM_JSON);
JSONObject jsonObject = JSONUtil.parseObj(paramJson);
BigDecimal safeAmount = jsonObject.get(StatisticsStatusEnum.NO_DEDUCTIBLE_AMOUNT, BigDecimal.class);
damageSafeAmount = damageSafeAmount.add(safeAmount);
}
}
} else {
totalOrderRefundAmount = totalOrderRefundAmount.add(accountDetailEntity.getOrderAmount());
totalDepositRefundAmount = totalDepositRefundAmount.add(accountDetailEntity.getDepositAmount());
List<OrderAccountDeduction> deductions = accountDetailEntity.getDeductions();
for (OrderAccountDeduction deduction : deductions) {
if (DeductionTypeEnum.lateFeeCode.contains(deduction.getType())){
totalLateFeeAmount = totalLateFeeAmount.add(deduction.getAmount());
if (deduction.getType().equals(DeductionTypeEnum.VIOLATE_CANCEL.getCode())){
if (Objects.nonNull(orderAccountBo.getDamageSafe()) && (orderAccountBo.getDamageSafe() == StatisticsStatusEnum.DAMAGE_SAFE)){
JSONObject data = orderAccountBo.getData();
if(!data.isEmpty()) {
Object paramJson = data.get(StatisticsStatusEnum.PARMAM_JSON);
JSONObject jsonObject = JSONUtil.parseObj(paramJson);
BigDecimal safeAmount = jsonObject.get(StatisticsStatusEnum.NO_DEDUCTIBLE_AMOUNT, BigDecimal.class);
refundDamageSafeAmount = refundDamageSafeAmount.add(safeAmount);
}
}
}
}
if (DeductionTypeEnum.breakRulesRegulationCode.contains(deduction.getType())){
totalBreakRulesRegulationAmount = totalBreakRulesRegulationAmount.add(deduction.getAmount());
}
if (DeductionTypeEnum.lossSpecifiedCode.contains(deduction.getType())){
totalLossSpecifiedAmount = totalLossSpecifiedAmount.add(deduction.getAmount());
}
if (DeductionTypeEnum.consumerCode.contains(deduction.getType())){
BigDecimal extendAmount = deduction.getAmount().subtract(accountDetailEntity.getOriginOrderAmount());
totalExtendAmount = totalExtendAmount.add(extendAmount);
}
}
}
}
orderRentVehicleReceivedStatistics.setNoDeductibleRefundAmount(refundDamageSafeAmount);
orderRentVehicleReceivedStatistics.setNoDeductibleAmount(damageSafeAmount);
orderRentVehicleReceivedStatistics.setTotalAmount(totalOrderAmount);
orderRentVehicleReceivedStatistics.setDepositAmount(totalDepositAmount);
orderRentVehicleReceivedStatistics.setLateFeeAmount(totalLateFeeAmount);
orderRentVehicleReceivedStatistics.setOrderRefundAmount(totalOrderRefundAmount);
orderRentVehicleReceivedStatistics.setDepositRefundAmount(totalDepositRefundAmount);
orderRentVehicleReceivedStatistics.setBreakRulesRegulationAmount(totalBreakRulesRegulationAmount);
orderRentVehicleReceivedStatistics.setLossSpecifiedAmount(totalLossSpecifiedAmount);
Integer totalQuantity = stateGroupMap ==null?0:stateGroupMap.get(Boolean.TRUE)==null?0:stateGroupMap.get(Boolean.TRUE).get(orderKey)==null?0:stateGroupMap.get(Boolean.TRUE).get(orderKey).size();
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey, companyMap,orderRentVehicleReceivedStatistics);
//账目处理
FeeTypeBo feeTypeBo = StatisticsStatusEnum.getFeeTyBoByOrderAccounts(orderAccountBos);
BeanUtils.copyProperties(feeTypeBo, orderRentVehicleReceivedStatistics);
//订单量
Integer totalQuantity = stateGroupMap == null ?
0 : stateGroupMap.get(Boolean.TRUE) == null ?
0 : stateGroupMap.get(Boolean.TRUE).get(orderKey) == null ?
0 : stateGroupMap.get(Boolean.TRUE).get(orderKey).size();
orderRentVehicleReceivedStatistics.setTotalQuantity(totalQuantity);
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics);
}
//未支付单
Map<String, List<OrderDTO>> noPayOrderRentvehicleMap = stateGroupMap == null?Collections.EMPTY_MAP:stateGroupMap.get(Boolean.FALSE)==null?Collections.EMPTY_MAP:stateGroupMap.get(Boolean.FALSE);
List<OrderRentVehicleReceivedStatistics> noPayOrderRentVehicleStatisticsList = createNoPayOrderRentVehicleStatisticsList(startDate,noPayOrderRentvehicleMap,companyMap);
Map<String, List<OrderDTO>> noPayOrderRentvehicleMap = stateGroupMap == null ?
Collections.EMPTY_MAP : stateGroupMap.get(Boolean.FALSE) == null ?
Collections.EMPTY_MAP : stateGroupMap.get(Boolean.FALSE);
List<OrderRentVehicleReceivedStatistics> noPayOrderRentVehicleStatisticsList = createNoPayOrderRentVehicleStatisticsList(startDate, noPayOrderRentvehicleMap, companyMap);
orderRentVehicleReceivedStatisticsList.addAll(noPayOrderRentVehicleStatisticsList);
//创建剩余状态组合的租车统计对象
List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate,stisticsActiveState, companyMap);
List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyMap);
orderRentVehicleReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存
insertMemberReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList);
StatisticsStatusEnum.insertReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList,mapper);
return orderRentVehicleReceivedStatisticsList;
}
/**
*
* @param startDate 时间
* @param startDate 时间
* @param noPayOrdersMap 未支付单map
* @param companyMap 公司map
* @return
*/
private List<OrderRentVehicleReceivedStatistics> createNoPayOrderRentVehicleStatisticsList(Date startDate,Map<String, List<OrderDTO>> noPayOrdersMap,Map<Integer,String> companyMap) {
private List<OrderRentVehicleReceivedStatistics> createNoPayOrderRentVehicleStatisticsList(Date startDate, Map<String, List<OrderDTO>> noPayOrdersMap, Map<Integer, String> companyMap) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
if (noPayOrdersMap==null || noPayOrdersMap.isEmpty()){
if (noPayOrdersMap == null || noPayOrdersMap.isEmpty()) {
return orderRentVehicleReceivedStatisticsList;
}
Set<Map.Entry<String, List<OrderDTO>>> noPayOrderSet = noPayOrdersMap.entrySet();
//遍历未支付单map
for (Map.Entry<String, List<OrderDTO>> noPayOrderEntry : noPayOrderSet) {
String noPayOrderStateGroup = noPayOrderEntry.getKey();
//某种状态组合的租车单
List<OrderDTO> noPayOrders = noPayOrderEntry.getValue();
List<BigDecimal> damageSafeAmountList = new ArrayList<>();
BigDecimal totalNoPayAmount = noPayOrders.stream().peek(x->{
//创建默认的租车订单统计对象
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
//设置相关默认值
StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderEntry.getKey(), companyMap, orderRentVehicleReceivedStatistics);
//租车订单流
Supplier<Stream<OrderDTO>> orderDtoStreamSupplier = ()-> noPayOrders.stream();
//总免赔
BigDecimal damageSafeAmount = BigDecimal.ZERO;
//总订单金额(包含免赔,不包含押金)
BigDecimal totalAmount = BigDecimal.ZERO;
//总押金
BigDecimal depositAmount = BigDecimal.ZERO;
//遍历租车单 累计订单总额 总押金 总免赔
for (OrderDTO noPayOrder : noPayOrders) {
//免赔
if (Objects.nonNull(x.getDamageSafe()) && (x.getDamageSafe() == StatisticsStatusEnum.DAMAGE_SAFE)){
JSONObject data = x.getData();
if (!data.isEmpty()) {
Object paramJson = data.get(StatisticsStatusEnum.PARMAM_JSON);
JSONObject jsonObject = JSONUtil.parseObj(paramJson);
BigDecimal safeAmount = jsonObject.get(StatisticsStatusEnum.NO_DEDUCTIBLE_AMOUNT, BigDecimal.class);
damageSafeAmountList.add(safeAmount);
}
boolean hasDamageSafe = Objects.nonNull(noPayOrder.getDamageSafe()) && (noPayOrder.getDamageSafe() == StatisticsStatusEnum.DAMAGE_SAFE);
if (hasDamageSafe) {
damageSafeAmount = damageSafeAmount.add(StatisticsStatusEnum.getDameSafeAmount(noPayOrder.getData()));
}
}).map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderStateGroup,companyMap,new OrderRentVehicleReceivedStatistics());
totalAmount = totalAmount.add(noPayOrder.getRealAmount()).subtract(totalAmount);
depositAmount = depositAmount.add(noPayOrder.getDeposit());
}
BigDecimal damageSafeAmount = damageSafeAmountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
orderRentVehicleReceivedStatistics.setNoDeductibleAmount(damageSafeAmount);
BigDecimal depositAmount = noPayOrders.stream().map(OrderDTO::getDeposit).reduce(BigDecimal.ZERO, BigDecimal::add);
//押金
orderRentVehicleReceivedStatistics.setDepositAmount(depositAmount);
orderRentVehicleReceivedStatistics.setNoDeductibleRefundAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setDepositRefundAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setLossSpecifiedAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setBreakRulesRegulationAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setTotalAmount(totalNoPayAmount.subtract(depositAmount));
BigDecimal totalNoPayAmount = orderDtoStreamSupplier.get().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
//租车费减去 押金和不计免赔费
orderRentVehicleReceivedStatistics.setTotalAmount(totalNoPayAmount.subtract(depositAmount).subtract(damageSafeAmount));
//总订单总量
orderRentVehicleReceivedStatistics.setTotalQuantity(noPayOrders.size());
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics);
}
return orderRentVehicleReceivedStatisticsList;
......@@ -241,56 +158,43 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
/**
* 创建剩余状态数据
*
* @param startDate 时间
* @param statisticsStateGroups 状态组合 集合
* @param companyMap 公司
* @param startDate 时间
* @param statisticsStateGroups 状态组合 集合
* @param companyMap 公司
* @return
*/
private List<OrderRentVehicleReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate,
List<String> statisticsStateGroups,
Map<Integer,String> companyMap) {
Map<Integer, String> companyMap) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>(statisticsStateGroups.size());
//获取剩余状态组合
List<Integer> companyIds = Objects.isNull(companyMap)?Collections.EMPTY_LIST:Lists.newArrayList(companyMap.keySet());
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds,statisticsStateGroups);
List<Integer> companyIds = Objects.isNull(companyMap) ? Collections.EMPTY_LIST : Lists.newArrayList(companyMap.keySet());
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds, statisticsStateGroups);
//创建租车统计克隆对象
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = new OrderRentVehicleReceivedStatistics();
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
//统计对象的生成
otherStatisticsStateGroup.stream().map(stateGroup -> {
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup,companyMap,ObjectUtil.cloneByStream(orderRentVehicleReceivedStatistics));
orderRentVehicleReceivedStatisticsClone.setDepositAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setDepositRefundAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setNoDeductibleAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setNoDeductibleRefundAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setLossSpecifiedAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setBreakRulesRegulationAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setTotalAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setTotalQuantity(0);
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, companyMap, ObjectUtil.cloneByStream(orderRentVehicleReceivedStatistics));
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatisticsClone);
return orderRentVehicleReceivedStatisticsClone;
}).count();
return orderRentVehicleReceivedStatisticsList;
}
/**
* 批量插入数据 mysql sql语句默认不能超过4M
* 创建默认的租车订单统计对象
*
* @param orderRentVehicleReceivedStatistics
* @return
*/
public void insertMemberReceivedStatisticsBatch(List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics) {
orderRentVehicleReceivedStatistics.sort(Comparator.comparing(OrderRentVehicleReceivedStatistics::getCompanyId));
int orderSize = orderRentVehicleReceivedStatistics.size();
int sqlAdq = orderSize / StatisticsStatusEnum.DEFAULT_SQL_SIZE;
int sqlMod = orderSize % StatisticsStatusEnum.DEFAULT_SQL_SIZE;
sqlAdq = sqlMod == 0 ? sqlAdq : sqlAdq + 1;
for (int i = 0; i < sqlAdq; i++) {
int fromIndex = StatisticsStatusEnum.DEFAULT_SQL_SIZE * i;
int toIndex = StatisticsStatusEnum.DEFAULT_SQL_SIZE * (i + 1);
toIndex = toIndex > orderSize ? orderSize : toIndex;
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = orderRentVehicleReceivedStatistics.subList(fromIndex, toIndex);
mapper.insertList(orderRentVehicleReceivedStatisticsList);
}
private OrderRentVehicleReceivedStatistics createDefaultOrderMemberReceivedStatistics() {
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = new OrderRentVehicleReceivedStatistics();
orderRentVehicleReceivedStatistics.setDepositAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setDepositRefundAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setNoDeductibleAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setNoDeductibleRefundAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setLossSpecifiedAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatistics.setBreakRulesRegulationAmount(BigDecimal.ZERO);
return orderRentVehicleReceivedStatistics;
}
}
\ No newline at end of file
package com.xxfc.platform.order.biz;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import org.springframework.stereotype.Service;
import cn.hutool.core.util.ObjectUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.bo.FeeTypeBo;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
import com.xxfc.platform.order.entity.OrderTourReceivedStatistics;
import com.xxfc.platform.order.mapper.OrderTourReceivedStatisticsMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
/**
* 旅游订单统计
*
* @author libin
* @email 18178966185@163.com
* @date 2019-11-08 18:03:42
* @version 1.0 旅游统计
* @description
* @data 2019/11/28 9:57
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class OrderTourReceivedStatisticsBiz extends BaseBiz<OrderTourReceivedStatisticsMapper,OrderTourReceivedStatistics> {
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
public class OrderTourReceivedStatisticsBiz extends BaseBiz<OrderTourReceivedStatisticsMapper, OrderTourReceivedStatistics> {
private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz orderAccountBiz;
public List<OrderTourReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderTourReceivedStatistics(orderReceivedStatisticsFindDTO);
}
/**
* 订单统计批量插入旅游统计表
* zuoyihang
* 2019-11-12
*
* @param startDate 开始时间
* @param endDate 结束时间
*/
public List<OrderTourReceivedStatistics> orderTourInsertStatisticsNew(Date startDate, Date endDate, Map<Integer, String> companyMap) {
List<OrderTourReceivedStatistics> orderTourReceivedStatisticsList = new ArrayList();
List<String> stisticsActiveState = new ArrayList<>();
//根据旅游类型 时间查询
List<OrderDTO> orderDTOS = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_TOUR_TYPE),null, startDate, endDate);
//数据处理 状态组合 按支付状态分组 而后按组合状态
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = StatisticsStatusEnum.processOrdersWithState(stisticsActiveState, orderDTOS);
//订单账目信息
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_TOUR_TYPE, startDate, endDate);
//账目数据整理 状态组合
Map<String, List<OrderAccountBo>> orderMap = StatisticsStatusEnum.processOrderAccountsWithState(stisticsActiveState,orderAccountBoList);
//已经支付订单
Set<Map.Entry<String, List<OrderAccountBo>>> orderSet = orderMap.entrySet();
for (Map.Entry<String, List<OrderAccountBo>> orderEntry : orderSet) {
String orderKey = orderEntry.getKey();
List<OrderAccountBo> orderAccountBos = orderEntry.getValue();
//创建并设置旅游统计对象默认值
OrderTourReceivedStatistics orderTourReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey, companyMap, new OrderTourReceivedStatistics());
//账目处理
FeeTypeBo feeTypeBo = StatisticsStatusEnum.getFeeTyBoByOrderAccounts(orderAccountBos);
//旅游订单量
Integer totalQuantity = stateGroupMap == null ?
0 : stateGroupMap.get(Boolean.TRUE) == null ?
0 : stateGroupMap.get(Boolean.TRUE).get(orderKey) == null ?
0 : stateGroupMap.get(Boolean.TRUE).get(orderKey).size();
orderTourReceivedStatistics.setTotalQuantity(totalQuantity);
//复制对应的金额(订单支付金额、退款金额、违约金)
BeanUtils.copyProperties(feeTypeBo,orderTourReceivedStatistics);
orderTourReceivedStatisticsList.add(orderTourReceivedStatistics);
}
//未支付订单
Map<String, List<OrderDTO>> noPayOrderRentvehicleMap = stateGroupMap == null ?
Collections.EMPTY_MAP : stateGroupMap.get(Boolean.FALSE) == null ?
Collections.EMPTY_MAP : stateGroupMap.get(Boolean.FALSE);
List<OrderTourReceivedStatistics> noPayOrderTourReceivedStatisticsList = createNoPayOrderTourReceivedStatisticsListList(startDate, noPayOrderRentvehicleMap, companyMap);
orderTourReceivedStatisticsList.addAll(noPayOrderTourReceivedStatisticsList);
//创建剩余状态组合旅游统计对象
List<OrderTourReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyMap);
orderTourReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存
StatisticsStatusEnum.insertReceivedStatisticsBatch(orderTourReceivedStatisticsList,mapper);
return orderTourReceivedStatisticsList;
}
/**
*创建未支付
* @param startDate 统计的时间
* @param noPayOrdersMap 未支付单map
* @param companyMap 公司map
*/
private List<OrderTourReceivedStatistics> createNoPayOrderTourReceivedStatisticsListList(Date startDate, Map<String, List<OrderDTO>> noPayOrdersMap, Map<Integer, String> companyMap) {
List<OrderTourReceivedStatistics> orderTourReceivedStatisticsList = new ArrayList<>();
if (noPayOrdersMap == null || noPayOrdersMap.isEmpty()) {
return orderTourReceivedStatisticsList;
}
//遍历未支付单
Set<Map.Entry<String, List<OrderDTO>>> noPayOrderSet = noPayOrdersMap.entrySet();
for (Map.Entry<String, List<OrderDTO>> noPayOrderEntry : noPayOrderSet) {
String noPayOrderStateGroup = noPayOrderEntry.getKey();
List<OrderDTO> noPayOrders = noPayOrderEntry.getValue();
//创建旅游统计对象并设置默认值
OrderTourReceivedStatistics orderTourReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderStateGroup, companyMap, new OrderTourReceivedStatistics());
//订单总金额
BigDecimal totalNoPayAmount = noPayOrders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
orderTourReceivedStatistics.setTotalQuantity(noPayOrders.size());
orderTourReceivedStatistics.setTotalAmount(totalNoPayAmount);
orderTourReceivedStatisticsList.add(orderTourReceivedStatistics);
}
return orderTourReceivedStatisticsList;
}
/**
* 创建剩余状态数据
*
* @param startDate 时间
* @param statisticsStateGroups 状态组合 集合
* @param companyMap 公司ids
* @return
*/
private List<OrderTourReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate,
List<String> statisticsStateGroups,
Map<Integer, String> companyMap) {
List<OrderTourReceivedStatistics> orderTourReceivedStatisticsList = new ArrayList<>();
//获取剩余状态组合
List<Integer> companyIds = Objects.isNull(companyMap) ? Collections.EMPTY_LIST : Lists.newArrayList(companyMap.keySet());
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds, statisticsStateGroups);
//创建租车统计克隆对象
OrderTourReceivedStatistics orderTourReceivedStatistics = new OrderTourReceivedStatistics();
//统计对象的生成
otherStatisticsStateGroup.stream().peek(stateGroup -> {
OrderTourReceivedStatistics orderTourReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, companyMap, ObjectUtil.cloneByStream(orderTourReceivedStatistics));
orderTourReceivedStatisticsList.add(orderTourReceivedStatisticsClone);
}).count();
return orderTourReceivedStatisticsList;
}
}
\ No newline at end of file
......@@ -101,7 +101,7 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
String filePath = ovUpload + realFileRelPath;
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
// FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
return ObjectRestResponse.succ(filePath);
}
......
......@@ -5,13 +5,16 @@ import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.xxfc.platform.order.contant.enumerate.AccountTypeEnum;
import com.xxfc.platform.order.contant.enumerate.BookkeepingTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.pojo.Achievement;
import com.xxfc.platform.order.pojo.QueryCriteria;
import com.xxfc.platform.order.pojo.ReturnOrderAmount;
import com.xxfc.platform.order.pojo.TotalOrderRevenue;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
......@@ -25,7 +28,9 @@ import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 总业绩报表service层
......@@ -40,25 +45,26 @@ public class TotalPerformanceBiz {
/**
* 入账数据统计
* @param queryCriteria 查询条件
* 入账数据统计
*
* @param queryCriteria 查询条件
*/
public TotalOrderRevenue entryStatisticalData(QueryCriteria queryCriteria) {
//获取总数据
TotalOrderRevenue totalOrderRevenue = incomeDataProcessing(queryCriteria);
//设置订单明细并分页
getAchievementPageInfo(totalOrderRevenue,queryCriteria);
return totalOrderRevenue ;
getAchievementPageInfo(totalOrderRevenue, queryCriteria);
return totalOrderRevenue;
}
/**
* 核算总收益
* @return
*
* @param queryCriteria
* @return
*/
private TotalOrderRevenue incomeDataProcessing( QueryCriteria queryCriteria) {
private TotalOrderRevenue incomeDataProcessing(QueryCriteria queryCriteria) {
List<Achievement> achievements = baseOrderBiz.entryStatisticalData(queryCriteria);
if (CollectionUtil.isEmpty(achievements)) {
......@@ -67,37 +73,39 @@ public class TotalPerformanceBiz {
//应收总额
BigDecimal totalReceivables = BigDecimal.ZERO;
//优惠总额
BigDecimal discount=BigDecimal.ZERO;
BigDecimal discount = BigDecimal.ZERO;
//实收总额
BigDecimal actual =BigDecimal.ZERO;
BigDecimal actual = BigDecimal.ZERO;
for (Achievement achievement : achievements) {
totalReceivables=totalReceivables.add(achievement.getOrderAmount());
actual=actual.add(achievement.getRealAmount());
discount=discount.add(achievement.getOrderAmount().subtract(achievement.getRealAmount()));
totalReceivables = totalReceivables.add(achievement.getOrderAmount());
actual = actual.add(achievement.getRealAmount());
discount = discount.add(achievement.getOrderAmount().subtract(achievement.getRealAmount()));
}
return TotalOrderRevenue
.builder()
.orderSum(achievements.size())
.totalReceivables(totalReceivables)
.discount(discount)
.actual(actual)
.build();
return TotalOrderRevenue
.builder()
.orderSum(achievements.size())
.totalReceivables(totalReceivables)
.discount(discount)
.actual(actual)
.build();
}
/**
* 设置支出明细
*
* @param totalOrderRevenue
* @param queryCriteria 条件
* @param queryCriteria 条件
*/
private void getAchievementPageInfo(TotalOrderRevenue totalOrderRevenue, QueryCriteria queryCriteria){
private void getAchievementPageInfo(TotalOrderRevenue totalOrderRevenue, QueryCriteria queryCriteria) {
PageInfo<Achievement> achievementPageInfo = baseOrderBiz.getAchievementPageInfo(queryCriteria);
totalOrderRevenue.setAchievements(achievementPageInfo);
totalOrderRevenue.setAchievements(achievementPageInfo);
}
/**
* 获取支出明细
*
* @param queryCriteria
* @return
*/
......@@ -108,11 +116,12 @@ public class TotalPerformanceBiz {
return Lists.newArrayList();
}
//拆分明细
return splitReturnOrderAmountList(returnOrderAmounts);
return splitReturnOrderAmountList(returnOrderAmounts);
}
/**
* 进行对支出记录拆分,拆分为-押金、订单和违章
*
* @param returnOrderAmounts
* @return
*/
......@@ -125,25 +134,23 @@ public class TotalPerformanceBiz {
BigDecimal depositAmount = accountDetailStr.getDepositAmount();
//订单退还
BigDecimal orderAmount = accountDetailStr.getOrderAmount();
//判断押金退还是否大于0
if ( depositAmount.compareTo(BigDecimal.ZERO)>0) {
ReturnOrderAmount returnOrderAmountClone = ObjectUtil.clone(returnOrderAmount);
//判断是违章还是租车
if (OrderTypeEnum.RENT_VEHICLE.equals(returnOrderAmount.getTypeInt())) {
if (OrderTypeEnum.RENT_VEHICLE.getCode().equals(returnOrderAmount.getTypeInt())&&depositAmount.compareTo(BigDecimal.ZERO) > 0) {
//判断押金退还是否大于0
ReturnOrderAmount returnOrderAmountClone = ObjectUtil.clone(returnOrderAmount);
//判断是违章还是租车
if (AccountTypeEnum.OUT_RESIDUE_DEPOSIT.getCode().equals(returnOrderAmount.getAccountType())) {
returnOrderAmountClone.setRefundInstruction("违章押金");
returnOrderAmountClone.setRefundAmount(accountDetailStr.getDepositAmount());
}else {
} else {
returnOrderAmountClone.setRefundInstruction("租车押金");
returnOrderAmountClone.setRefundAmount(accountDetailStr.getDepositAmount());
}
}
arrayList.add(returnOrderAmountClone);
arrayList.add(returnOrderAmountClone);
}
//判断订单退款是否大于0
if (orderAmount.compareTo(BigDecimal.ZERO)>0) {
if (orderAmount.compareTo(BigDecimal.ZERO) > 0) {
ReturnOrderAmount returnOrderAmountClone = ObjectUtil.clone(returnOrderAmount);
returnOrderAmountClone.setRefundInstruction("订单退款");
returnOrderAmountClone.setRefundAmount(accountDetailStr.getOrderAmount());
......@@ -157,170 +164,189 @@ public class TotalPerformanceBiz {
/**
* 导出入账记录
*
* @param queryCriteria
* @param name
* @param outputStream
*/
public void exportEntry(QueryCriteria queryCriteria, String name, ServletOutputStream outputStream) throws IOException {
XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
XSSFSheet sheet = hssfWorkbook.createSheet("收入");
CellStyle generalCellStyle = createGeneralCellStyle(hssfWorkbook);
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("收入");
CellStyle generalCellStyle = createGeneralCellStyle(wb);
XSSFRow row1 = sheet.createRow(0);
String[] head =new String[]{"下单时间","订单ID","订单类型","应收金额","优惠金额","实收金额","客户姓名","客户手机号","邀约人/身份","要约人手机号","业绩所属公司","支付方式"};
createHeader(row1,0,head,generalCellStyle);
String[] head = new String[]{"下单时间", "订单ID", "订单类型", "应收金额", "优惠金额", "实收金额", "客户姓名", "客户手机号", "邀约人/身份", "要约人手机号", "业绩所属公司", "支付方式"};
createHeader(row1, head, generalCellStyle);
List<Achievement> achievements = baseOrderBiz.entryStatisticalData(queryCriteria);
if (CollectionUtil.isEmpty(achievements)) {
throw new BaseException("无数据");
}
List<String[]> achievementArray =getAchievementArrays(achievements,12);
createCellData(sheet,1,generalCellStyle,achievementArray);
//计算合计
HashMap<Integer, BigDecimal> map = Maps.newHashMap();
List<String[]> achievementArray = getAchievementArrays(achievements, 12,map);
createCellData(sheet, 1, generalCellStyle, achievementArray);
//设置最后一行
int lastRowNum = sheet.getLastRowNum();
XSSFRow rown = sheet.createRow(lastRowNum);
//设置第一列
//设置第一列
XSSFCell cell1 = rown.createCell(0);
cell1.setCellValue("合计");
//第五列求和
int[] cel= new int[]{3,4,5};
sum(sheet, lastRowNum,cel);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
//第五列求和
int[] cel = new int[]{3, 4, 5};
sum(rown, cel,map);
wb.write(outputStream);
wb.close();
}
public void sum(XSSFSheet sheet, int lastRowNum, int[] cel) {
for (int i : cel) {
String colString = CellReference.convertNumToColString(i);
//该求和公式的意思就是:sum(第几列+第几个 : 第几列+需要累计到的第几个单元格位置)
String sumstring = "SUM(" + colString + "2:" + colString + (lastRowNum) + ")";
sheet.getRow(lastRowNum).createCell(i).setCellFormula(sumstring);
public void sum(XSSFRow row, int[] cel, Map<Integer, BigDecimal> map) {
for (int i = 0; i < cel.length; i++) {
// String colString = CellReference.convertNumToColString(i);
// //该求和公式的意思就是:sum(第几列+第几个 : 第几列+需要累计到的第几个单元格位置)
// String sumstring = "SUM(" + colString + "2:" + colString + (lastRowNum) + ")";
// sheet.getRow(lastRowNum).createCell(i).setCellFormula(sumstring);
XSSFCell cell = row.createCell(cel[i]);
cell.setCellValue(map.get(i).toString());
}
}
/**
* 获取入账数组
*
* @param achievements
* @param length
* @return
*/
private List<String[]> getAchievementArrays(List<Achievement> achievements, int length) {
private List<String[]> getAchievementArrays(List<Achievement> achievements, int length, Map<Integer, BigDecimal> map) {
BigDecimal totalReceivable =BigDecimal.ZERO;
BigDecimal totalReality =BigDecimal.ZERO;
BigDecimal totalDiscount =BigDecimal.ZERO;
ArrayList<String[]> arrayList = Lists.newArrayList();
for (Achievement achievement : achievements) {
String [] data= new String[length];
data[0]=achievement.getCrtTime();
data[1]=achievement.getNo();
data[2]=achievement.getType();
data[3]=achievement.getOrderAmount().toString();
data[4]=achievement.getFavorablePrice().toString();
data[5]=achievement.getRealAmount().toString();
data[6]=achievement.getRealname();
data[7]=achievement.getUsername();
data[8]=String.format("%s/%s",achievement.getParentRealname()==null?"":achievement.getParentRealname(),achievement.getPositionName()==null?"":achievement.getPositionName());
data[9]=achievement.getParentUsername();
data[10]=achievement.getCompanyName();
data[11]=achievement.getPayWay();
String[] data = new String[length];
data[0] = achievement.getCrtTime();
data[1] = achievement.getNo();
data[2] = achievement.getType();
data[3] = achievement.getOrderAmount().toString();
totalReceivable=totalReceivable.add(achievement.getOrderAmount());
data[4] = achievement.getFavorablePrice().toString();
totalReality=totalReality.add(achievement.getFavorablePrice());
data[5] = achievement.getRealAmount().toString();
totalDiscount=totalDiscount.add(achievement.getRealAmount());
data[6] = achievement.getRealname();
data[7] = achievement.getUsername();
data[8] = String.format("%s/%s", achievement.getParentRealname() == null ? "" : achievement.getParentRealname(), achievement.getPositionName() == null ? "" : achievement.getPositionName());
data[9] = achievement.getParentUsername();
data[10] = achievement.getCompanyName();
data[11] = achievement.getPayWay();
arrayList.add(data);
}
return arrayList;
}
map.put(0,totalReceivable);
map.put(1,totalReality);
map.put(2,totalDiscount);
return arrayList;
}
/**
* 导出支出
*
* @param queryCriteria
* @param name
* @param outputStream
*/
public void exportAccount(QueryCriteria queryCriteria, String name, ServletOutputStream outputStream) throws IOException {
XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
XSSFSheet sheet = hssfWorkbook.createSheet("支出");
CellStyle generalCellStyle = createGeneralCellStyle(hssfWorkbook);
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("支出");
CellStyle generalCellStyle = createGeneralCellStyle(wb);
XSSFRow row1 = sheet.createRow(0);
String[] head =new String[]{"退款日期","订单ID","订单类型","退还类型","退还押金","客户名","客户手机号"};
createHeader(row1,0,head,generalCellStyle);
String[] head = new String[]{"退款日期", "订单ID", "订单类型", "退还类型", "退还押金", "客户名", "客户手机号"};
createHeader(row1, head, generalCellStyle);
HashMap<String, BigDecimal> map = Maps.newHashMap();
List<ReturnOrderAmount> returnOrderAmounts = outStatisticalData(queryCriteria);
List<String[]> achievementArray =getReturnOrderAmountArrays(returnOrderAmounts,7);
List<String[]> achievementArray = getReturnOrderAmountArrays(returnOrderAmounts, 7,map);
if (CollectionUtil.isEmpty(achievementArray)) {
throw new BaseException("无数据");
}
createCellData(sheet,1,generalCellStyle,achievementArray);
createCellData(sheet, 1, generalCellStyle, achievementArray);
//设置最后一行
int lastRowNum = sheet.getLastRowNum();
XSSFRow rown = sheet.createRow(lastRowNum);
//设置第一列
//设置第一列
XSSFCell cell1 = rown.createCell(0);
cell1.setCellValue("合计");
//第五列求和
String colString = CellReference.convertNumToColString(4);
//该求和公式的意思就是:sum(第几列+第几个 : 第几列+需要累计到的第几个单元格位置)
String sumstring = "SUM(" + colString + "2:" + colString + (lastRowNum) + ")";
sheet.getRow(lastRowNum).createCell(4).setCellFormula(sumstring);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
cell1.setCellStyle(generalCellStyle);
//第五列求和
// String colString = CellReference.convertNumToColString(4);
// //该求和公式的意思就是:sum(第几列+第几个 : 第几列+需要累计到的第几个单元格位置)
// String sumstring = "SUM(" + colString + "2:" + colString + (lastRowNum) + ")";
XSSFCell cell = sheet.getRow(lastRowNum).createCell(4);
cell.setCellValue(map.get("totalRefund").toString());
cell.setCellStyle(generalCellStyle);
wb.write(outputStream);
wb.close();
}
/**
* 获取支出数组
*
* @param returnOrderAmounts
* @param length
* @return
*/
private List<String[]> getReturnOrderAmountArrays(List<ReturnOrderAmount> returnOrderAmounts, int length) {
private List<String[]> getReturnOrderAmountArrays(List<ReturnOrderAmount> returnOrderAmounts, int length,Map<String,BigDecimal> map) {
BigDecimal totalRefund = BigDecimal.ZERO;
ArrayList<String[]> arrayList = Lists.newArrayList();
for (ReturnOrderAmount returnOrderAmount : returnOrderAmounts) {
String [] data= new String[length];
data[0]=returnOrderAmount.getTime();
data[1]=returnOrderAmount.getNo();
data[2]=returnOrderAmount.getType();
data[3]=returnOrderAmount.getRefundInstruction();
data[4]=returnOrderAmount.getRefundAmount().toString();
data[5]=returnOrderAmount.getRealname();
data[6]=returnOrderAmount.getUsername();
String[] data = new String[length];
data[0] = returnOrderAmount.getTime();
data[1] = returnOrderAmount.getNo();
data[2] = returnOrderAmount.getType();
data[3] = returnOrderAmount.getRefundInstruction();
data[4] = returnOrderAmount.getRefundAmount().toString();
totalRefund=totalRefund.add(returnOrderAmount.getRefundAmount());
data[5] = returnOrderAmount.getRealname();
data[6] = returnOrderAmount.getUsername();
arrayList.add(data);
}
map.put("totalRefund",totalRefund);
return arrayList;
}
private CellStyle createGeneralCellStyle(XSSFWorkbook hssfWorkbook){
CellStyle cellStyleGeneral = createHeaderCellStyle(hssfWorkbook);
private CellStyle createGeneralCellStyle(XSSFWorkbook wb) {
CellStyle cellStyleGeneral = createHeaderCellStyle(wb);
cellStyleGeneral.setWrapText(true);
XSSFFont generalFont = createFont(hssfWorkbook);
XSSFFont generalFont = createFont(wb);
generalFont.setBold(false);
cellStyleGeneral.setFont(generalFont);
return cellStyleGeneral;
}
private void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle){
for (int i =0 ;i<header.length;i++){
Cell cell = row.createCell(cellStartIndex);
private void createHeader(Row row, String[] header, CellStyle cellStyle) {
for (int i = 0; i < header.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex+=1;
}
}
private CellStyle createHeaderCellStyle(XSSFWorkbook hssfWorkbook){
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle();
cellStyleHeader.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,#0"));
private CellStyle createHeaderCellStyle(XSSFWorkbook wb) {
XSSFCellStyle cellStyleHeader = wb.createCellStyle();
XSSFDataFormat dataFormat = wb.createDataFormat();
cellStyleHeader.setDataFormat(dataFormat.getFormat("#,##0.00"));
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setLocked(false);
......@@ -329,26 +355,29 @@ public class TotalPerformanceBiz {
cellStyleHeader.setBorderTop(CellStyle.BORDER_THIN);
cellStyleHeader.setBorderRight(CellStyle.BORDER_THIN);
XSSFFont headerFont = createFont(hssfWorkbook);
XSSFFont headerFont = createFont(wb);
cellStyleHeader.setFont(headerFont);
return cellStyleHeader;
}
private XSSFFont createFont(XSSFWorkbook hssfWorkbook){
XSSFFont font = hssfWorkbook.createFont();
private XSSFFont createFont(XSSFWorkbook wb) {
XSSFFont font = wb.createFont();
font.setFontName("黑体");
font.setBold(true);
return font;
}
private void createCellData(Sheet sheet,int startRowIndex,CellStyle cellStyle,List<String[]> memberOrderList){
private void createCellData(Sheet sheet, int startRowIndex, CellStyle cellStyle, List<String[]> memberOrderList) {
for (String[] data : memberOrderList) {
Row row = sheet.createRow(startRowIndex++);
createHeader(row,0,data,cellStyle);
createHeader(row, data, cellStyle);
}
}
}
......@@ -13,12 +13,12 @@ import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -44,7 +44,12 @@ public class OrderReceivedStatisticsJobHandler extends IJobHandler {
public ReturnT<String> execute(String arg) throws Exception {
DateTime yesterday = DateUtil.yesterday();
if (StringUtils.hasText(arg)){
yesterday = DateUtil.parse(arg,"yyyy-MM-dd");
try {
yesterday = DateUtil.parse(arg, "yyyy-MM-dd");
}catch (Exception ex){
XxlJobLogger.log(ex);
yesterday = DateUtil.yesterday();
}
}
Date startDate = DateUtil.beginOfDay(yesterday).toJdkDate();
......@@ -52,7 +57,7 @@ public class OrderReceivedStatisticsJobHandler extends IJobHandler {
Map<Integer, String> companyMap = vehicleFeign.findCompanyMap();
//旅游订单
List<OrderTourReceivedStatistics> orderTourReceivedStatisticsList = Collections.EMPTY_LIST;
List<OrderTourReceivedStatistics> orderTourReceivedStatisticsList = orderTourReceivedStatisticsBiz.orderTourInsertStatisticsNew(startDate,endDate,companyMap);
//租车订单
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = orderRentVehicleReceivedStatisticsBiz.orderRentVehicleReceivedStatistics(startDate, endDate, companyMap);
//会员订单
......
......@@ -12,6 +12,7 @@ import com.xxfc.platform.order.pojo.order.OrderPageVO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -44,9 +45,9 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> {
public List<BgOrderListVo> getAllOrderList(Map<String, Object> paramMap);
List<OrderDTO> selectOrdersByTypeAndTime(@Param("types") List<Integer> types,
@Param("hasPay") Integer hasPay,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
@Param("hasPay") Integer hasPay,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
List<Achievement> selectTotalStatistical(QueryCriteria queryCriteria);
......
......@@ -11,12 +11,12 @@ import tk.mybatis.mapper.common.Mapper;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 订单帐目
*
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
......@@ -25,7 +25,7 @@ public interface OrderAccountMapper extends Mapper<OrderAccount> {
List<OrderAccountDTO> getOrderAccountByOrderType(Term term);
List<ReturnOrderAmount> outStatisticalData(@Param("queryCriteria")QueryCriteria queryCriteria,@Param("startTime") Long startTime,@Param("endTime")Long endTime);
List<ReturnOrderAmount> outStatisticalData(@Param("queryCriteria")QueryCriteria queryCriteria, @Param("startTime") Long startTime, @Param("endTime")Long endTime);
List<OrderAccountBo> selectOrderAccountByOrderTypeAndStartTimeAndEndTime(@Param("orderType") Integer orderType,
@Param("startTime") long startTime,
......
......@@ -2,6 +2,7 @@ package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderTourReceivedStatistics;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
......@@ -13,7 +14,7 @@ import java.util.List;
* @email 18178966185@163.com
* @date 2019-11-08 18:03:42
*/
public interface OrderTourReceivedStatisticsMapper extends Mapper<OrderTourReceivedStatistics> {
public interface OrderTourReceivedStatisticsMapper extends Mapper<OrderTourReceivedStatistics>, InsertListMapper<OrderTourReceivedStatistics> {
List<OrderTourReceivedStatistics> selectOrderTourReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
}
......@@ -11,8 +11,10 @@ import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderTourDetailBiz;
import com.xxfc.platform.order.biz.OrderTourReceivedStatisticsBiz;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.order.entity.OrderTourReceivedStatistics;
import com.xxfc.platform.order.pojo.order.add.AddTourDTO;
import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.TourPriceVO;
......@@ -31,16 +33,21 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
@Controller
@RequestMapping("orderTour")
@IgnoreClientToken
@Api(value="旅游订单",tags={"旅游订单"})
public class OrderTourController extends BaseController<OrderTourDetailBiz,OrderTourDetail> {
@Api(value = "旅游订单", tags = {"旅游订单"})
public class OrderTourController extends BaseController<OrderTourDetailBiz, OrderTourDetail> {
@Autowired
OrderTourService orderTourService;
@Autowired
OrderTourReceivedStatisticsBiz orderTourReceivedStatisticsBiz;
@Autowired
TourFeign tourFeign;
......@@ -50,33 +57,51 @@ public class OrderTourController extends BaseController<OrderTourDetailBiz,Order
@Autowired
UserFeign userFeign;
public AppUserDTO getUserInfo(){
return userFeign.userDetailByToken(userAuthConfig.getToken(request)).getData();
public AppUserDTO getUserInfo() {
return userFeign.userDetailByToken(userAuthConfig.getToken(request)).getData();
}
@RequestMapping(value = "/orderTourStatistics", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "旅游订单统计")
public ObjectRestResponse<OrderTourReceivedStatistics> orderTourStatistics() {
Date today = new Date();//获取今天的日期
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add(Calendar.DAY_OF_MONTH, 1);
Date tomorrow = c.getTime();//这是明天
c.setTime(today);
c.add(Calendar.DAY_OF_MONTH, -1);
Date yesterday = c.getTime();//这是昨天
orderTourReceivedStatisticsBiz.orderTourInsertStatisticsNew(yesterday, tomorrow,null
);
return ObjectRestResponse.succ();
}
@RequestMapping(value = "add",method = RequestMethod.POST)
@RequestMapping(value = "add", method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "确认旅游订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody AddTourDTO vo){
public ObjectRestResponse<BaseOrder> add(@RequestBody AddTourDTO vo) {
TourBO bo = BeanUtil.toBean(vo, TourBO.class);
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())? Arrays.asList(vo.getTickerNos().split(",")):null);
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos()) ? Arrays.asList(vo.getTickerNos().split(",")) : null);
orderTourService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder());
}
@RequestMapping(value = "/calculate-price",method = RequestMethod.GET)
@RequestMapping(value = "/calculate-price", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "价格计算")
@IgnoreUserToken
public ObjectRestResponse<TourPriceVO> calculatePrice(CalculatePriceVO vo){
public ObjectRestResponse<TourPriceVO> calculatePrice(CalculatePriceVO vo) {
TourBO bo = BeanUtil.toBean(vo, TourBO.class);
bo.setAppUserDTO(getUserInfo());
bo.setAdultNum(vo.getNumber());
bo.setChildNum(vo.getChildNumber());
TourGood tourGood = tourFeign.usableGet(bo.getGoodId()).getData();
bo.setTourGood(tourGood);
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())? Arrays.asList(vo.getTickerNos().split(",")):null);
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos()) ? Arrays.asList(vo.getTickerNos().split(",")) : null);
return ObjectRestResponse.succ(orderTourService.calculatePrice(bo));
}
......
......@@ -5,19 +5,28 @@ import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.biz.CompanyPerformanceBiz;
import com.xxfc.platform.order.pojo.dto.CompanyPerformanceFindDTO;
import com.xxfc.platform.order.bo.CompanyPerformanceBo;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.github.wxiaoqi.security.common.exception.BaseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description 公司业绩查询
* @data 2019/11/23 14:32
*/
@Slf4j
@RestController
@RequestMapping("/statistics")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
......@@ -30,4 +39,22 @@ public class CompanyOrderReceivedStatiscsAdminController {
PageDataVO<CompanyPerformanceBo> dataVO = companyPerformanceBiz.selectCompanyPerformancePage(companyPerformanceFindDTO);
return ObjectRestResponse.succ(dataVO);
}
@ApiOperation("导出")
@PostMapping("/export")
public void exportCompanyPerformance(@RequestBody CompanyPerformanceFindDTO companyPerformanceFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-company-statistics.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
companyPerformanceBiz.exportOrderReceivedStatisticsData(companyPerformanceFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
log.error("导出数据失败【{}】",ex);
throw new BaseException("导出数据失败");
}
}
}
......@@ -349,7 +349,7 @@
</select>
<select id="findMemberOrders" resultType="com.xxfc.platform.order.pojo.dto.MemberOrderBo">
select bo.*,omd.member_level AS `memberLevel` from (
select bo.*,omd.member_level AS `memberLevel` from (
SELECT
`id`,
`no` AS `orderNo`,
......@@ -405,25 +405,24 @@
) AS `bo`
INNER JOIN (select * from `order_member_detail` where 1=1
<if test="level!=null">
and `member_level`=#{level}
and `member_level`=#{level}
</if>
) AS `omd` ON omd.order_id=bo.id
ORDER BY bo.`creatTime` DESC
</select>
<select id="selectOrdersByTypeAndTime" resultType="com.xxfc.platform.order.pojo.dto.OrderDTO">
select bo.id,bo.type,bo.status,bo.order_amount,bo.real_amount,bo.order_origin,bo.parent_user_id as `userId`,bo.parent_postion_id as `postionId`,
bo.has_pay,bo.pay_way,omd.memberLevel,IFNULL(IFNULL(orvd.start_company_id,otd.start_company_id),`parent_user_company_id`) AS `companyId`,orvd.deposit,orvd.cost_detail_extend AS `costDetailExtend` from (select `id`,`type`,`status`,`order_amount` AS `orderAmount`, `real_amount`AS
`realAmount`,`order_origin` AS `orderOrigin`, `has_pay` AS `hasPay`,
`pay_way` AS `payWay`
from `base_order` where 1=1
<if test="hasPay!=null">
and `has_pay`=#{hasPay}
</if>
and (`crt_time` between #{startDate} and #{endDate} or `pay_time` between #{startDate} and #{endDate} ) and `type` IN <foreach collection="types"
item="type"
open="(" close=")"
separator=",">
select bo.id,bo.type,bo.status,bo.order_amount,bo.real_amount,bo.order_origin,bo.parent_user_id as `userId`,bo.parent_position_id as `postionId`,
bo.has_pay,bo.pay_way,omd.memberLevel,IFNULL(IFNULL(orvd.start_company_id,otd.start_company_id),`parent_user_company_id`) AS `companyId`,
orvd.deposit,orvd.cost_detail_extend AS `costDetailExtend`
from (select * from `base_order` where 1=1
<if test="hasPay!=null">
and `has_pay`=#{hasPay}
</if>
and (`crt_time` between #{startDate} and #{endDate} or `pay_time` between #{startDate} and #{endDate} ) and `type` IN <foreach collection="types"
item="type"
open="(" close=")"
separator=",">
#{type}
</foreach> ) AS `bo`
LEFT JOIN (select `order_id`,`start_company_id`,`deposit`,`cost_detail_extend` from `order_rent_vehicle_detail`) AS `orvd` ON
......@@ -440,7 +439,6 @@
</foreach>
</select>
<select id="selectTotalStatistical" parameterType="com.xxfc.platform.order.pojo.QueryCriteria"
resultType="com.xxfc.platform.order.pojo.Achievement">
select
......
......@@ -92,38 +92,38 @@
`order_account` AS `oa`
LEFT JOIN `base_order` AS `bo` ON bo.id = oa.order_id
LEFT JOIN `order_rent_vehicle_detail` AS `brvd` ON brvd.order_id=oa.order_id
LEFT JOIN `order_tour_detail` as `otd` ON otd.order_id=oa.order_id
LEFT JOIN `order_tour_detail` AS `otd` ON otd.order_id=oa.order_id
LEFT JOIN `order_member_detail` AS `omd` ON omd.order_id=oa.order_id
WHERE bo.type=#{orderType} AND `oa`.account_status=1 AND oa.`crt_time` BETWEEN #{startTime} AND #{endTime}
WHERE bo.type=#{orderType} AND (`oa`.account_status=1 or(bo.pay_way=0 AND bo.has_pay=1 AND oa.account_status=0)) AND oa.`crt_time` BETWEEN #{startTime} AND #{endTime}
</select>
<select id="selectByDateAndStatffIds" resultType="com.xxfc.platform.order.pojo.account.OrderAccountBo">
oa.*,
bo.id,
bo.`status`,
bo.order_origin,
bo.pay_way,
bo.has_pay,
bo.parent_user_id as `userId`,
bo.parent_position_id as `postionId`,
IFNULL(brvd.start_company_id,IFNULL(otd.start_company_id,bo.parent_user_company_id)) AS `companyId`,
brvd.cost_detail_extend AS `costDetailExtend`,
brvd.damage_safe AS `damageSafe`,
omd.member_level AS `memberLevel`
oa.*,
bo.id,
bo.`status`,
bo.order_origin,
bo.pay_way,
bo.has_pay,
bo.parent_user_id as `userId`,
bo.parent_position_id as `postionId`,
IFNULL(brvd.start_company_id,IFNULL(otd.start_company_id,bo.parent_user_company_id)) AS `companyId`,
brvd.cost_detail_extend AS `costDetailExtend`,
brvd.damage_safe AS `damageSafe`,
omd.member_level AS `memberLevel`
FROM
`order_account` AS `oa`
LEFT JOIN `base_order` AS `bo` ON bo.id = oa.order_id
LEFT JOIN `order_rent_vehicle_detail` AS `brvd` ON brvd.order_id=oa.order_id
LEFT JOIN `order_tour_detail` as `otd` ON otd.order_id=oa.order_id
LEFT JOIN `order_member_detail` AS `omd` ON omd.order_id=oa.order_id
WHERE `oa`.account_status=1
AND oa.`crt_time` BETWEEN #{startDate} AND #{endDate}
<if test="staffUserIds!=null and staffUserIds.size>0">
and bo.id IN <foreach collection="staffUserIds" item="staffId" open="(" close=")" separator=",">
#{staffId}
</foreach>
</if>
`order_account` AS `oa`
LEFT JOIN `base_order` AS `bo` ON bo.id = oa.order_id
LEFT JOIN `order_rent_vehicle_detail` AS `brvd` ON brvd.order_id=oa.order_id
LEFT JOIN `order_tour_detail` as `otd` ON otd.order_id=oa.order_id
LEFT JOIN `order_member_detail` AS `omd` ON omd.order_id=oa.order_id
WHERE `oa`.account_status=1
AND oa.`crt_time` BETWEEN #{startDate} AND #{endDate}
<if test="staffUserIds!=null and staffUserIds.size>0">
and bo.id IN <foreach collection="staffUserIds" item="staffId" open="(" close=")" separator=",">
#{staffId}
</foreach>
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -62,25 +62,28 @@
<select id="selectCompanyPerformanceWithDay" resultType="com.xxfc.platform.order.bo.CompanyPerformanceBo">
SELECT
ors.*,
IFNULL(ovss.departureNum,0),
IFNULL(ovss.rentDays,0),
IFNULL(ovss.arrivalNum,0)
IFNULL(ovss.departureNum,0) as `departureNum`,
IFNULL(ovss.rentDays,0) as `departureNum`,
IFNULL(ovss.arrivalNum,0) as `arrivalNum`
FROM
(
SELECT
`company_id` AS `companyId`,
`year`,
`date`,
SUM(`member_amount` ) AS `memberAmount`,
SUM(`travel_amount` ) AS `travelAmount`,
SUM(`rent_vehicle_amount` ) AS `rentVehilceAmount`
SUM(`member_amount`-`member_refund_amount`) AS `memberAmount`,
SUM(`travel_amount`-`travel_refund_amount` ) AS `travelAmount`,
SUM(`rent_vehicle_amount`-`rent_vehicle_refund_amount`) AS `rentVehilceAmount`,
SUM(`no_deductible_amount` - `no_deductible_refund_amount`) as `noDeductibleAmount`,
SUM(`deposit_amount` - `deposit_refund_amount`) as `depositAmount`
FROM
`order_received_statistics`
WHERE 1=1
`order_received_statistics` WHERE `has_pay`=1
<if test="companyName!=null and companyName!=''">
AND `company_name` LIKE CONCAT('%',#{companyName},'%')
</if>
<if test="companyId!=null">
AND `company_id`=#{companyId}
</if>
<if test="startDate!=null and endDate!=null">
AND `date` BETWEEN #{startDate} AND #{endDate}
</if>
......@@ -109,8 +112,10 @@
IFNULL(SUM( `arrival_num` ),0) AS `arrivalNum`,
IFNULL(SUM( `rent_num` ),0) AS `rentDays`
FROM
`order_vehicle_service_statistics`
WHERE 1=1
`order_vehicle_service_statistics` WHERE 1=1
<if test="companyId!=null">
AND `company_id`=#{companyId}
</if>
<if test="startDate!=null and endDate!=null">
AND `count_date` BETWEEN #{startDate} AND #{endDate}
</if>
......@@ -138,25 +143,28 @@
resultType="com.xxfc.platform.order.bo.CompanyPerformanceBo">
SELECT
ors.*,
IFNULL(ovss.departureNum,0),
IFNULL(ovss.rentDays,0),
IFNULL(ovss.arrivalNum,0)
IFNULL(ovss.departureNum,0) as `departureNum`,
IFNULL(ovss.rentDays,0) as `rentDays`,
IFNULL(ovss.arrivalNum,0) as `arrivalNum`
FROM
(
SELECT
company_id AS `companyId`,
`year`,
`month`,
COALESCE(SUM(`member_amount` ),0) AS `memberAmount`,
COALESCE(SUM(`travel_amount` ),0) AS `travelAmount`,
COALESCE(SUM(`rent_vehicle_amount` ),0) AS `rentVehilceAmount`
SUM(`member_amount`-`member_refund_amount`) AS `memberAmount`,
SUM(`travel_amount`-`travel_refund_amount` ) AS `travelAmount`,
SUM(`rent_vehicle_amount`-`rent_vehicle_refund_amount`) AS `rentVehilceAmount`,
SUM(`no_deductible_amount` - `no_deductible_refund_amount`) as `noDeductibleAmount`,
SUM(`deposit_amount` - `deposit_refund_amount`) as `depositAmount`
FROM
`order_received_statistics`
WHERE 1=1
`order_received_statistics` WHERE `has_pay`=1
<if test="companyName!=null and companyName!=''">
AND `company_name` LIKE CONCAT('%',#{companyName},'%')
</if>
<if test="companyId!=null">
AND `company_id`=#{companyId}
</if>
<if test="startDate!=null and endDate!=null">
AND `date` BETWEEN #{startDate} AND #{endDate}
</if>
......@@ -185,8 +193,10 @@
COALESCE(SUM( `arrival_num` ),0) AS `arrivalNum`,
COALESCE(SUM( `rent_num` ),0) AS `rentDays`
FROM
`order_vehicle_service_statistics`
WHERE 1=1
`order_vehicle_service_statistics` WHERE 1=1
<if test="companyId!=null">
AND `company_id`=#{companyId}
</if>
<if test="startDate!=null and endDate!=null">
AND `count_date` BETWEEN #{startDate} AND #{endDate}
</if>
......@@ -213,25 +223,28 @@
<select id="selectCompanyPerformanceWithWeek" resultType="com.xxfc.platform.order.bo.CompanyPerformanceBo">
SELECT
ors.*,
IFNULL(ovss.departureNum,0),
IFNULL(ovss.rentDays,0),
IFNULL(ovss.arrivalNum,0)
IFNULL(ovss.departureNum,0) as `departureNum`,
IFNULL(ovss.rentDays,0) as `rentDays`,
IFNULL(ovss.arrivalNum,0) as `arrivalNum`
FROM
(
SELECT
company_id AS `companyId`,
`year`,
`week_of_year` AS `weekOfYear`,
COALESCE(SUM(`member_amount` ),0) AS `memberAmount`,
COALESCE(SUM(`travel_amount` ),0) AS `travelAmount`,
COALESCE(SUM(`rent_vehicle_amount` ),0) AS `rentVehilceAmount`
SUM(`member_amount`-`member_refund_amount`) AS `memberAmount`,
SUM(`travel_amount`-`travel_refund_amount` ) AS `travelAmount`,
SUM(`rent_vehicle_amount`-`rent_vehicle_refund_amount`) AS `rentVehilceAmount`,
SUM(`no_deductible_amount` - `no_deductible_refund_amount`) as `noDeductibleAmount`,
SUM(`deposit_amount` - `deposit_refund_amount`) as `depositAmount`
FROM
`order_received_statistics`
WHERE 1=1
`order_received_statistics` WHERE `has_pay`=1
<if test="companyName!=null and companyName!=''">
AND `company_name` LIKE CONCAT('%',#{companyName},'%')
</if>
<if test="companyId!=null">
AND `company_id`=#{companyId}
</if>
<if test="startDate!=null and endDate!=null">
AND `date` BETWEEN #{startDate} AND #{endDate}
</if>
......@@ -262,6 +275,9 @@
FROM
`order_vehicle_service_statistics`
WHERE 1=1
<if test="companyId!=null">
AND `company_id`=#{companyId}
</if>
<if test="startDate!=null and endDate!=null">
AND `count_date` BETWEEN #{startDate} AND #{endDate}
</if>
......
import cn.hutool.core.date.DateUtil;
import com.xxfc.platform.order.OrderApplication;
import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz;
import com.xxfc.platform.order.biz.OrderStatisticsBiz;
import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.jobhandler.BaseOrderStatisticsJobHandler;
import com.xxfc.platform.order.jobhandler.SaffStatisticsJobHandler;
import com.xxfc.platform.order.jobhandler.OrderReceivedStatisticsJobHandler;
import com.xxfc.platform.order.pojo.HomePageOrderData;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.SneakyThrows;
import org.joda.time.DateTime;
import org.junit.Test;
......@@ -15,6 +16,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
/**
* @author libin
......@@ -36,8 +38,17 @@ public class ServiceTest {
private BaseOrderStatisticsJobHandler handler;
@Autowired
private SaffStatisticsJobHandler statisticsJobHandler;
private OrderMemberReceivedStatisticsBiz orderMemberReceivedStatisticsBiz;
@Autowired
private OrderRentVehicleReceivedStatisticsBiz orderRentVehicleReceivedStatisticsBiz;
@Autowired
private OrderReceivedStatisticsJobHandler orderReceivedStatisticsJobHandler;
@Autowired
private OrderTourReceivedStatisticsBiz orderTourReceivedStatisticsBiz;
@Autowired
private VehicleFeign vehicleFeign;
@Test
public void testSchedu(){
......@@ -72,8 +83,8 @@ public class ServiceTest {
@Test
public void test4(){
// HomePageOrderData totalOrder = statisticsBiz.getTotalOrder(null);
// System.out.println(totalOrder);
HomePageOrderData totalOrder = statisticsBiz.getTotalOrder(null,null);
System.out.println(totalOrder);
}
......@@ -83,9 +94,35 @@ public class ServiceTest {
}
@Test
@SneakyThrows
public void testStaffStatisticsJob(){
statisticsJobHandler.execute("");
public void testMemberStatistics(){
Date date = DateTime.parse("2019-11-15").toDate();
Date startDate = DateUtil.beginOfDay(date).toJdkDate();
Date endDate = DateUtil.endOfDay(date).toJdkDate();
Map<Integer, String> companyMap = vehicleFeign.findCompanyMap();
orderMemberReceivedStatisticsBiz.orderMemberReceivedStatistics(startDate,endDate,companyMap);
}
@Test
public void testRentVehicleStatistics(){
Date date = DateTime.parse("2019-11-15").toDate();
Date startDate = DateUtil.beginOfDay(date).toJdkDate();
Date endDate = DateUtil.endOfDay(date).toJdkDate();
Map<Integer, String> companyMap = vehicleFeign.findCompanyMap();
orderRentVehicleReceivedStatisticsBiz.orderRentVehicleReceivedStatistics(startDate,endDate,companyMap);
}
@Test
public void testTourStatistics(){
Date date = DateTime.parse("2019-11-15").toDate();
Date startDate = DateUtil.beginOfDay(date).toJdkDate();
Date endDate = DateUtil.endOfDay(date).toJdkDate();
Map<Integer, String> companyMap = vehicleFeign.findCompanyMap();
orderTourReceivedStatisticsBiz.orderTourInsertStatisticsNew(startDate,endDate,companyMap);
}
@Test
@SneakyThrows
public void testOrderReceivedStatisticsJobHandler(){
orderReceivedStatisticsJobHandler.execute("");
}
}
......@@ -69,8 +69,10 @@ public interface ThirdFeign {
@RequestMapping(value = "/dictionary/getAll4Map", method = RequestMethod.GET)
public ObjectRestResponse<Map<String, Dictionary>> dictionaryGetAll4Map();
@RequestMapping(value = "/dictionary/getAll4Map", method = RequestMethod.GET)
public ObjectRestResponse<Map<String, Dictionary>> getDictionaryUseType();
/* @RequestMapping(value = "/dictionary/getAll4Map", method = RequestMethod.GET)
public ObjectRestResponse<Map<String, Dictionary>> getDictionaryUseType();*/
@PostMapping("/dictionary/type_code")
public Dictionary findDictionaryByTypeAndCode(@RequestParam(value = "type") String type,@RequestParam(value = "code") String code);
......
......@@ -114,12 +114,12 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
return dictionaryMap;
}
public Map<String, Dictionary> getDictionaryUseType() {
/* public Map<String, Dictionary> getDictionaryUseType() {
List<Dictionary> dictionaries = selectListAll();
Map<String, Dictionary> dictionaryMap = dictionaries.parallelStream().collect(Collectors.toMap(dic -> dic.getType() + "_" + dic.getCode()
, Function.identity(), (oldValue, newValue) -> newValue));
return dictionaryMap;
}
}*/
@CacheClear(pre = CACHE_DICTIONARY_PREFIX)
......
package com.xxfc.platform.universal.service;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.xxfc.platform.universal.constant.RedisKey;
import com.xxfc.platform.universal.utils.ImgBase64Util;
......@@ -56,7 +55,7 @@ public class UploadService {
//文件存放路径
String filePath = baseUploadPath + realFileRelPath;
//将文件写入指定位置
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
realFileRelPath=xx_url+SystemConfig.XXMP_URL+realFileRelPath;
return realFileRelPath;
}
......@@ -84,7 +83,7 @@ public class UploadService {
file.mkdirs();
}
String str="/" + no + ".jpg";
String str="/" + no + ".jpg";
realFileRelPath = realFileRelPath+str;
filePath=filePath +str;
//将文件写入指定位置
......
......@@ -27,5 +27,9 @@ public class DepartureLogVo extends VehicleDepartureLog {
*/
private Date actualEndDate;
/**
* 车牌号码
*/
private String numberPlate;
}
......@@ -405,7 +405,7 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
return pageDataVO;
}
public List<JSONObject> getList(){
return mapper.getList();
return mapper.getList();
}
public ObjectRestResponse branchCompans() {
......
......@@ -249,7 +249,7 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
}
if (vehicleBookRecordVo.getBookUser() != null) {
UserDTO userDTO = userFeign.userinfoByUid(vehicleBookRecordVo.getBookUser()).getData();
if(userDTO != null) {
if (userDTO != null) {
BranchCompany branchCompany = branchCompanyBiz.getById(userDTO.getCompanyId());
if (branchCompany != null) {
vehicleBookRecordVo.setUserCompanyName(branchCompany.getName());
......
......@@ -24,7 +24,7 @@ public interface VehicleDepartureLogMapper extends BaseMapper<VehicleDepartureLo
@Param("use") String user,
@Param("startTime") String startTime,
@Param("endTime") String endTime
);
);
List<VehicleDepartureLogVo> selectVoAllNotAllData(@Param("numberPlate") String numberPlate,
@Param("code") Integer code,
......
......@@ -201,7 +201,7 @@ public class BranchCompanyController extends BaseController<BranchCompanyBiz> {
}
@GetMapping("/findByAreaId")
public List<Integer> findCompanyIdsByAreaId(@RequestParam(value = "areaId",required = false) Integer areaId){
public List<Integer> findCompanyIdsByAreaId(@RequestParam(value = "areaId") Integer areaId){
return baseBiz.selectCompanyIdsByAreaId(areaId);
}
......
......@@ -9,6 +9,8 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.vehicle.biz.VehicleBiz;
import com.xxfc.platform.vehicle.biz.VehicleDepartureService;
import com.xxfc.platform.vehicle.common.RestResponse;
......@@ -20,6 +22,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.RESERVE;
import static com.xxfc.platform.universal.constant.DictionaryKey.VEHICE_ORDER;
......@@ -166,7 +169,7 @@ public class VehicleDepartureController {
*/
@GetMapping("findReserveType")
public ObjectRestResponse<OrderPageVO> getOrderDetail() {
Map<String, Dictionary> dictionaryMap = thirdFeign.getDictionaryUseType().getData();
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
String reserveType = dictionaryMap.get(VEHICE_ORDER + "_" + RESERVE).getName();
return ObjectRestResponse.succ(reserveType);
}
......
......@@ -88,21 +88,15 @@
<select id="selectVoAll" resultMap="searchBookRecord">
select vehicle_departure_log.*,vehicle.number_plate,bc2.actual_end_date,bc2.actual_start_date,bc2.book_start_date,bc2.book_end_date,
/* IFNULL(DATEDIFF(vehicle_departure_log.arrival_time,vehicle_departure_log.departure_time),0)*/
CONCAT(IFNULL(floor((unix_timestamp(vehicle_departure_log.arrival_time) -
unix_timestamp(vehicle_departure_log.departure_time)) / 86400),0),'天',
IFNULL(floor(IF((unix_timestamp(vehicle_departure_log.arrival_time) -
unix_timestamp(vehicle_departure_log.departure_time))>86400,(unix_timestamp(vehicle_departure_log.arrival_time)
- unix_timestamp(vehicle_departure_log.departure_time)) MOD
86400/3600,(unix_timestamp(vehicle_departure_log.arrival_time) -
unix_timestamp(vehicle_departure_log.departure_time))/3600)),0),'小时')
CONCAT(IFNULL(floor((unix_timestamp(vehicle_departure_log.arrival_time) - unix_timestamp(vehicle_departure_log.departure_time)) / 86400),0),'天',
IFNULL(floor(IF((unix_timestamp(vehicle_departure_log.arrival_time) - unix_timestamp(vehicle_departure_log.departure_time))>86400,(unix_timestamp(vehicle_departure_log.arrival_time)
- unix_timestamp(vehicle_departure_log.departure_time)) MOD 86400/3600,(unix_timestamp(vehicle_departure_log.arrival_time) - unix_timestamp(vehicle_departure_log.departure_time))/3600)),0),'小时')
as departureDay,bc.name as departureName,bc1.name as arrivalName,
IF((IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0))>0,IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0),0)
as mileage
IF((IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0))>0,IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0),0) as mileage
from vehicle_departure_log
left join vehicle on vehicle_departure_log.vehicle_id = vehicle.id
LEFT JOIN branch_company bc ON vehicle_departure_log.departure_branch_company_id = bc.id
LEFT JOIN branch_company bc1 ON vehicle_departure_log.arrival_branch_company_id = bc1.id
LEFT JOIN vehicle_book_record bc2 ON vehicle_departure_log.book_record_id = bc2.id
<trim prefix="where">
1=1
<if test="numberPlate != null and numberPlate != ''">
......@@ -113,44 +107,32 @@
vehicle_departure_log.departure_time &gt;= str_to_date(#{startTime}, '%Y-%m-%d %H')
</if>
<if test="endTime != null and endTime != ''">
and vehicle_departure_log.arrival_time &gt;= str_to_date(#{endTime}, '%Y-%m-%d %H')
and vehicle_departure_log.arrival_time &gt;= str_to_date(#{endTime}, '%Y-%m-%d %H')
</if>
<if test="code!=null">
and vehicle.code=#{code}
and vehicle.code=#{code}
</if>
<if test="zoneId!=null">
and bc.zone_id=#{zoneId}
and bc.zone_id=#{zoneId}
</if>
<if test="departureId!=null">
and vehicle_departure_log.departure_branch_company_id=#{departureId}
</if>
<if test="use!=null">
and bc2.book_type=#{use}
</if>
<if test="arrivalBranchCompanyId!=null">
and vehicle_departure_log.arrival_branch_company_id=#{arrivalBranchCompanyId}
and vehicle_departure_log.departure_branch_company_id=#{departureId}
</if>
</trim>
order by create_time desc
</select>
<select id="selectVoAllNotAllData" resultMap="searchBookRecord">
select vehicle_departure_log.*,vehicle.number_plate,bc2.actual_end_date,bc2.actual_start_date,bc2.book_start_date,bc2.book_end_date,
<select id="selectVoAllNotAllData" resultType="com.xxfc.platform.vehicle.pojo.VehicleDepartureLogVo">
select vehicle_departure_log.*,vehicle.number_plate,
/*IFNULL(DATEDIFF(vehicle_departure_log.arrival_time,vehicle_departure_log.departure_time),0)*/
CONCAT(IFNULL(floor((unix_timestamp(vehicle_departure_log.arrival_time) -
unix_timestamp(vehicle_departure_log.departure_time)) / 86400),0),'天',
IFNULL(floor(IF((unix_timestamp(vehicle_departure_log.arrival_time) -
unix_timestamp(vehicle_departure_log.departure_time))>86400,(unix_timestamp(vehicle_departure_log.arrival_time)
- unix_timestamp(vehicle_departure_log.departure_time)) MOD
86400/3600,(unix_timestamp(vehicle_departure_log.arrival_time) -
unix_timestamp(vehicle_departure_log.departure_time))/3600)),0),'小时')
CONCAT(IFNULL(floor((unix_timestamp(vehicle_departure_log.arrival_time) - unix_timestamp(vehicle_departure_log.departure_time)) / 86400),0),'天',
IFNULL(floor(IF((unix_timestamp(vehicle_departure_log.arrival_time) - unix_timestamp(vehicle_departure_log.departure_time))>86400,(unix_timestamp(vehicle_departure_log.arrival_time)
- unix_timestamp(vehicle_departure_log.departure_time)) MOD 86400/3600,(unix_timestamp(vehicle_departure_log.arrival_time) - unix_timestamp(vehicle_departure_log.departure_time))/3600)),0),'小时')
as departureDay,bc.name as departureName,bc1.name as arrivalName,
IF((IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0))>0,IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0),0)
as mileage
IF((IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0))>0,IFNULL(vehicle_departure_log.mileage_end,0)-IFNULL(vehicle_departure_log.mileage_start,0),0) as mileage
from vehicle_departure_log
left join vehicle on vehicle_departure_log.vehicle_id = vehicle.id
LEFT JOIN branch_company bc ON vehicle_departure_log.departure_branch_company_id = bc.id
LEFT JOIN branch_company bc1 ON vehicle_departure_log.arrival_branch_company_id = bc1.id
LEFT JOIN vehicle_book_record bc2 ON vehicle_departure_log.book_record_id = bc2.id
<trim prefix="where" suffixOverrides="and">
<if test="numberPlate != null and numberPlate != ''">
vehicle.number_plate = #{numberPlate} and
......@@ -180,24 +162,18 @@
</if>
<if test="endTime != null and endTime != ''">
and vehicle_departure_log.arrival_time >= str_to_date(#{endTime}, '%Y-%m-%d %H')
and vehicle_departure_log.arrival_time >= str_to_date(#{endTime}, '%Y-%m-%d %H')
or TO_DAYS(vehicle_departure_log.arrival_time)=TO_DAYS(str_to_date(#{endTime}, '%Y-%m-%d %H'))
or vehicle_departure_log.arrival_time is null
</if>
<if test="code!=null">
and vehicle.code=#{code}
and vehicle.code=#{code}
</if>
<if test="zoneId!=null">
and bc.zone_id=#{zoneId}
and bc.zone_id=#{zoneId}
</if>
<if test="departureId!=null">
and vehicle_departure_log.departure_branch_company_id=#{departureId}
</if>
<if test="use!=null">
and bc2.book_type=#{use}
</if>
<if test="arrivalBranchCompanyId!=null">
and vehicle_departure_log.arrival_branch_company_id=#{arrivalBranchCompanyId}
and vehicle_departure_log.departure_branch_company_id=#{departureId}
</if>
</trim>
order by create_time desc
......
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