退租检修

This commit is contained in:
mashuai 2024-12-04 17:20:58 +08:00
parent c94f3d2d0a
commit 669ae27f9a
17 changed files with 1763 additions and 8 deletions

View File

@ -17,6 +17,12 @@ public class AreaVo {
@ApiModelProperty(value = "区域id")
private Long areaId;
@ApiModelProperty(value = "区域编码")
private String areaCode;
@ApiModelProperty(value = "区域父级编码")
private String areaParentCode;
@ApiModelProperty(value = "区域名称")
private String areaName;
}

View File

@ -13,7 +13,7 @@ public enum HttpCodeEnum {
LEASE_END_TIME_ERROR(500, "需求截止日期不可小于当天,请修改后重新提交"),
//失败
FAIL(400, "操作失败,请联系管理员"),
FAIL(500, "操作失败,请联系管理员"),
// 登录
LEASE_ORDER_RECEIVED_NOT_DELETE(1002, "已接单状态,不可删除"),
NEED_LOGIN(401, "需要登录后操作"),

View File

@ -0,0 +1,28 @@
package com.bonus.common.biz.enums;
import lombok.Getter;
/**
* @author ma_sh
* @version : 1.0
* 订单状态枚举
*/
@Getter
public enum OrderStatusEnum {
NO_ORDER_PLACED(0, "未下单"),
TO_ORDER_PLACED(1, "已下单"),
ORDER_PENDING_SHIPMENT(2, "待出库"),
ORDER_AWAITING_RECEIPT(3, "待收货"),
ORDER_UNDER_LEASE(4, "租赁中"),
ORDER_TERMINATED(5, "已退租"),
ORDER_FINISHED(6, "已完成");
private final Integer status;
private final String statusName;
OrderStatusEnum(Integer status, String statusName) {
this.status = status;
this.statusName = statusName;
}
}

View File

@ -0,0 +1,88 @@
package com.bonus.material.lease.controller;
import com.bonus.common.core.web.controller.BaseController;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.lease.domain.LeasePriceRecord;
import com.bonus.material.lease.domain.LeaseRecordDto;
import com.bonus.material.lease.domain.LeaseRepair;
import com.bonus.material.lease.domain.LeaseRepairRecord;
import com.bonus.material.lease.service.LeaseRepairRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/12/2 15:33
*/
@Api(value = "退租检修及费用结算控制层")
@RestController
@RequestMapping("/lease-repair")
public class LeaseRepairRecordController extends BaseController {
@Resource
private LeaseRepairRecordService recordService;
/**
* 查询退租检修列表
* @param dto
* @return
*/
@ApiOperation(value = "查询退租检修列表")
@GetMapping("/list")
public AjaxResult list(LeaseRepair dto) {
startPage();
List<LeaseRepair> list = recordService.list(dto);
return AjaxResult.success(getDataTable(list));
}
/**
* 查询退租检修单个详情
* @param dto
* @return
*/
@ApiOperation(value = "查询退租检修单个详情")
@GetMapping("/getById")
public AjaxResult getById(LeaseRepair dto) {
LeaseRecordDto leaseRecordDto = recordService.getById(dto);
return AjaxResult.success(leaseRecordDto);
}
/**
* 新增退租检修
* @param leaseRecordDto
* @return
*/
@ApiOperation(value = "发起退租检修")
@PostMapping("/add")
public AjaxResult add(@RequestBody LeaseRecordDto leaseRecordDto) {
return recordService.add(leaseRecordDto);
}
/**
* 装备费用改价
* @param leasePriceRecord
* @return
*/
@ApiOperation(value = "装备费用改价")
@PostMapping("/changePrice")
public AjaxResult changePrice(@RequestBody LeasePriceRecord leasePriceRecord) {
return recordService.changePrice(leasePriceRecord);
}
/**
* 承租方费用确定
* @param leaseRepairRecord
* @return
*/
@ApiOperation(value = "承租方确认价格")
@PostMapping("/confirmPrice")
public AjaxResult confirmPrice(@RequestBody LeaseRepairRecord leaseRepairRecord) {
return recordService.confirmPrice(leaseRepairRecord);
}
}

View File

@ -0,0 +1,26 @@
package com.bonus.material.lease.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/12/4 9:43
*/
@Data
public class LeasePriceRecord {
@ApiModelProperty(value = "租赁费用列表")
private List<LeaseRepairRecord> rentPriceList;
@ApiModelProperty(value = "维修费用列表")
private List<LeaseRepairRecord> repairPriceList;
@ApiModelProperty(value = "报废费用列表")
private List<LeaseRepairRecord> scrapPriceList;
@ApiModelProperty(value = "丢失费用列表")
private List<LeaseRepairRecord> lossPriceList;
}

View File

@ -0,0 +1,58 @@
package com.bonus.material.lease.domain;
import com.bonus.material.order.domain.OrderDetailDto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/12/3 10:58
*/
@Data
public class LeaseRecordDto {
@ApiModelProperty(value = "订单id")
private String orderId;
@ApiModelProperty(value = "订单编号")
private String code;
@ApiModelProperty(value = "装备套数")
private Integer maNumber;
@ApiModelProperty(value = "退租时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date rentEndTime;
@ApiModelProperty(value = "租赁天数")
private String rentDay;
@ApiModelProperty(value = "结算单位")
private String leaseCompany;
@ApiModelProperty(value = "租赁金额")
private BigDecimal cost;
@ApiModelProperty(value = "总费用")
private BigDecimal totalCost;
@ApiModelProperty(value = "是否改价(0 否, 1 是)")
private Integer isChangePrice = 0;
@ApiModelProperty(value = "订单详情列表")
private List<OrderDetailDto> orderDetailDtoList;
@ApiModelProperty(value = "维修列表")
private List<LeaseRepairRecord> repairRecordList;
@ApiModelProperty(value = "报废列表")
private List<LeaseRepairRecord> scrapRecordList;
@ApiModelProperty(value = "丢失列表")
private List<LeaseRepairRecord> lossRecordList;
}

View File

@ -0,0 +1,55 @@
package com.bonus.material.lease.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author ma_sh
* @create 2024/12/2 18:35
*/
@Data
public class LeaseRepair {
@ApiModelProperty(value = "订单id")
private String orderId;
@ApiModelProperty(value = "订单编号")
private String code;
/**
* 退租截止开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private String finishStartTime;
/**
* 退租截止结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private String finishEndTime;
@ApiModelProperty(value = "联系电话")
private String phoneNumber;
@ApiModelProperty(value = "退租时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date rentEndTime;
@ApiModelProperty(value = "承租人")
private String leaseName;
@ApiModelProperty(value = "承租单位")
private String leaseCompany;
@ApiModelProperty(value = "订单状态")
private Integer orderStatus;
@ApiModelProperty(value = "订单状态名称")
private String orderStatusName;
@ApiModelProperty(value = "是否已填写退租检修内容0 否1 是)")
private Integer isLeaseContent;
}

View File

@ -0,0 +1,118 @@
package com.bonus.material.lease.domain;
import com.bonus.common.biz.domain.BmFileInfo;
import com.bonus.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
import java.io.Serializable;
import java.util.List;
/**
* 维修记录表repair_apply_record(LeaseRepairRecord)实体类
*
* @author makejava
* @since 2024-12-02 15:26:44
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LeaseRepairRecord extends BaseEntity implements Serializable {
private static final long serialVersionUID = 457444570801778758L;
private Integer id;
@ApiModelProperty(value = "订单id")
private String orderId;
@ApiModelProperty(value = "订单编号")
private String code;
@ApiModelProperty(value = "装备ID")
private Integer maId;
@ApiModelProperty(value = "设备名称")
private String deviceName;
@ApiModelProperty(value = "装备数量")
private Integer num;
@ApiModelProperty(value = "设备类型ID")
private Integer typeId;
@ApiModelProperty(value = "类型名称")
private String typeName;
@ApiModelProperty(value = "租赁改价金额")
private BigDecimal changeCost;
@ApiModelProperty(value = "维修数量")
private Integer repairNum;
@ApiModelProperty(value = "维修费用")
private BigDecimal repairPrice;
@ApiModelProperty(value = "维修改价费用")
private BigDecimal repairChangePrice;
@ApiModelProperty(value = "报废数量")
private Integer scrapNum;
@ApiModelProperty(value = "报废费用")
private BigDecimal scrapPrice;
@ApiModelProperty(value = "报废改价费用")
private BigDecimal scrapChangePrice;
@ApiModelProperty(value = "报废原因")
private String scrapReason;
@ApiModelProperty(value = "丢失数量")
private Integer lossNum;
@ApiModelProperty(value = "丢失费用")
private BigDecimal lossPrice;
@ApiModelProperty(value = "丢失改价费用")
private BigDecimal lossChangePrice;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "改价人id")
private Long changePriceUser;
@ApiModelProperty(value = "承租方费用确定人id")
private Long priceConfirmUser;
@ApiModelProperty(value = "改价时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date changePriceTime;
@ApiModelProperty(value = "创建者")
private String createBy;
@ApiModelProperty(value = "创建人公司")
private String createCompany;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty(value = "更新者")
private String updateBy;
@ApiModelProperty(value = "更新时间(因无修改操作,故费用最后确定时间为最后一步修改操作)")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@ApiModelProperty(value = "附件信息")
private List<BmFileInfo> fileInfoList;
}

View File

@ -0,0 +1,64 @@
package com.bonus.material.lease.mapper;
import com.bonus.material.lease.domain.LeaseRepair;
import com.bonus.material.lease.domain.LeaseRepairRecord;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/12/2 15:35
*/
@Mapper
public interface LeaseRepairRecordMapper {
/**
* 查询列表
* @param dto
* @return
*/
List<LeaseRepair> list(LeaseRepair dto);
/**
* 查询列表
* @param orderCode
* @return
*/
int selectLeaseContent(String orderCode);
/**
* 新增
* @param leaseRepairRecord
* @return
*/
int insert(LeaseRepairRecord leaseRepairRecord);
/**
* 查询列表
* @param dto
* @return
*/
List<LeaseRepairRecord> getLeaseRepairRecordList(LeaseRepair dto);
/**
* 租赁费用改价
* @param leaseRepairRecord
* @return
*/
int updateRentPrice(LeaseRepairRecord leaseRepairRecord);
/**
* 维修费用改价
* @param repairRecord
* @return
*/
int updateChangePrice(LeaseRepairRecord repairRecord);
/**
* 修改
* @param leaseRepairRecord
* @return
*/
int update(LeaseRepairRecord leaseRepairRecord);
}

View File

@ -0,0 +1,51 @@
package com.bonus.material.lease.service;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.lease.domain.LeasePriceRecord;
import com.bonus.material.lease.domain.LeaseRecordDto;
import com.bonus.material.lease.domain.LeaseRepair;
import com.bonus.material.lease.domain.LeaseRepairRecord;
import java.util.List;
/**
* @Author ma_sh
* @create 2024/12/2 15:34
*/
public interface LeaseRepairRecordService {
/**
* 查询租赁需求列表
* @param dto
* @return
*/
List<LeaseRepair> list(LeaseRepair dto);
/**
* 查询退租检修单个详情
* @param dto
* @return
*/
LeaseRecordDto getById(LeaseRepair dto);
/**
* 新增退租检修
* @param leaseRecordDto
* @return
*/
AjaxResult add(LeaseRecordDto leaseRecordDto);
/**
* 装备费用改价
* @param leasePriceRecord
* @return
*/
AjaxResult changePrice(LeasePriceRecord leasePriceRecord);
/**
* 承租方费用确定
* @param leaseRepairRecord
* @return
*/
AjaxResult confirmPrice(LeaseRepairRecord leaseRepairRecord);
}

View File

@ -0,0 +1,742 @@
package com.bonus.material.lease.service.impl;
import com.bonus.common.biz.constant.MaterialConstants;
import com.bonus.common.biz.domain.BmFileInfo;
import com.bonus.common.biz.enums.HttpCodeEnum;
import com.bonus.common.biz.exception.BusinessException;
import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.material.device.mapper.BmFileInfoMapper;
import com.bonus.material.lease.domain.LeasePriceRecord;
import com.bonus.material.lease.domain.LeaseRecordDto;
import com.bonus.material.lease.domain.LeaseRepair;
import com.bonus.material.lease.domain.LeaseRepairRecord;
import com.bonus.material.lease.mapper.LeaseRepairRecordMapper;
import com.bonus.material.lease.service.LeaseRepairRecordService;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
import com.bonus.material.order.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Author ma_sh
* @create 2024/12/2 15:34
*/
@Service
@Slf4j
public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
// 维修类型图片
private final Integer MAIN_IMAGES_DICT_VALUE = 0;
// 报废类型图片
private final Integer DETAILS_IMAGES_DICT_VALUE = 1;
// 丢失类型图片
private final Integer EXAMINATION_PDF = 2;
@Resource
private LeaseRepairRecordMapper mapper;
@Resource
private BmFileInfoMapper bmFileInfoMapper;
@Resource
private OrderMapper orderMapper;
/**
* 查询租赁需求列表
* @param dto
* @return
*/
@Override
public List<LeaseRepair> list(LeaseRepair dto) {
List<LeaseRepair> list = mapper.list(dto);
if (CollectionUtils.isNotEmpty(list)) {
for (LeaseRepair leaseRepairVo : list) {
//根据订单编号去lease_repair_record表中查询是否已填写退租检修信息
int count = mapper.selectLeaseContent(leaseRepairVo.getCode());
if (count > 0) {
leaseRepairVo.setIsLeaseContent(1);
} else {
leaseRepairVo.setIsLeaseContent(0);
}
}
}
return list;
}
/**
* 查询退租检修单个详情
* @param dto
* @return
*/
@Override
public LeaseRecordDto getById(LeaseRepair dto) {
// 初始化总费用
BigDecimal totalCost = new BigDecimal(0.00);
LeaseRecordDto leaseRecordDto = new LeaseRecordDto();
OrderDetailDto orderDetailDto = new OrderDetailDto();
orderDetailDto.setOrderId(Integer.parseInt(dto.getOrderId()));
OrderInfoDto orderInfoDto = orderMapper.getOrderDetailsById(orderDetailDto);
if (orderInfoDto != null) {
leaseRecordDto.setCode(orderInfoDto.getCode());
leaseRecordDto.setMaNumber(orderInfoDto.getMaNumber());
leaseRecordDto.setRentEndTime(orderInfoDto.getRentEndTime());
leaseRecordDto.setRentDay(orderInfoDto.getDays());
leaseRecordDto.setLeaseCompany(orderInfoDto.getCzcompanyName());
leaseRecordDto.setCost(orderInfoDto.getCost());
}
List<OrderDetailDto> orderDetailList = orderMapper.selectOrderDetailsByOderId(dto.getOrderId());
if (CollectionUtils.isNotEmpty(orderDetailList)) {
leaseRecordDto.setOrderDetailDtoList(orderDetailList);
for (OrderDetailDto detailDto : orderDetailList) {
if (detailDto.getChangeCost() != null) {
leaseRecordDto.setIsChangePrice(1);
totalCost = totalCost.add(detailDto.getChangeCost());
} else {
totalCost = totalCost.add(detailDto.getCosts());
}
}
}
// 根据订单id查询订单详情
List<LeaseRepairRecord> list = mapper.getLeaseRepairRecordList(dto);
if (CollectionUtils.isNotEmpty(list)) {
for (LeaseRepairRecord leaseRepairRecord : list) {
if (leaseRepairRecord.getRepairChangePrice() != null || leaseRepairRecord.getScrapChangePrice() != null
|| leaseRepairRecord.getLossChangePrice() != null) {
leaseRecordDto.setIsChangePrice(1);
}
if (leaseRepairRecord.getRepairChangePrice() != null) {
totalCost = totalCost.add(leaseRepairRecord.getRepairChangePrice());
} else if (leaseRepairRecord.getRepairPrice() != null){
totalCost = totalCost.add(leaseRepairRecord.getRepairPrice());
}
if (leaseRepairRecord.getScrapChangePrice() != null) {
totalCost = totalCost.add(leaseRepairRecord.getScrapChangePrice());
} else if (leaseRepairRecord.getScrapPrice() != null){
totalCost = totalCost.add(leaseRepairRecord.getScrapPrice());
}
if (leaseRepairRecord.getLossChangePrice() != null) {
totalCost = totalCost.add(leaseRepairRecord.getLossChangePrice());
} else if (leaseRepairRecord.getLossPrice() != null){
totalCost = totalCost.add(leaseRepairRecord.getLossPrice());
}
BmFileInfo bmFileInfo = new BmFileInfo();
bmFileInfo.setModelId(Long.valueOf(leaseRepairRecord.getMaId()));
bmFileInfo.setTaskType(MaterialConstants.LEASE_REPAIR_RECORD_TABLE_NAME);
List<BmFileInfo> fileList = bmFileInfoMapper.selectBmFileInfoList(bmFileInfo);
if (CollectionUtils.isNotEmpty(fileList)) {
fileList.forEach(item -> {
if (item.getFileType().equals(Long.valueOf(MAIN_IMAGES_DICT_VALUE))) {
// 确保 leaseRepairRecord.getFileInfoList() 不为 null
if (leaseRepairRecord.getFileInfoList() == null) {
leaseRepairRecord.setFileInfoList(new ArrayList<>());
}
leaseRepairRecord.getFileInfoList().add(item);
// 确保 leaseRecordDto.getRepairRecordList() 不为 null
if (leaseRecordDto.getRepairRecordList() == null) {
leaseRecordDto.setRepairRecordList(new ArrayList<>());
}
leaseRecordDto.getRepairRecordList().add(leaseRepairRecord);
} else if (item.getFileType().equals(Long.valueOf(DETAILS_IMAGES_DICT_VALUE))) {
// 确保 leaseRepairRecord.getFileInfoList() 不为 null
if (leaseRepairRecord.getFileInfoList() == null) {
leaseRepairRecord.setFileInfoList(new ArrayList<>());
}
leaseRepairRecord.getFileInfoList().add(item);
// 确保 leaseRecordDto.getScrapRecordList() 不为 null
if (leaseRecordDto.getScrapRecordList() == null) {
leaseRecordDto.setScrapRecordList(new ArrayList<>());
}
leaseRecordDto.getScrapRecordList().add(leaseRepairRecord);
} else if (item.getFileType().equals(Long.valueOf(EXAMINATION_PDF))) {
// 确保 leaseRepairRecord.getFileInfoList() 不为 null
if (leaseRepairRecord.getFileInfoList() == null) {
leaseRepairRecord.setFileInfoList(new ArrayList<>());
}
leaseRepairRecord.getFileInfoList().add(item);
// 确保 leaseRecordDto.getLossRecordList() 不为 null
if (leaseRecordDto.getLossRecordList() == null) {
leaseRecordDto.setLossRecordList(new ArrayList<>());
}
leaseRecordDto.getLossRecordList().add(leaseRepairRecord);
}
});
}
}
}
leaseRecordDto.setTotalCost(totalCost);
return leaseRecordDto;
}
/**
* 新增退租检修
* @param leaseRecordDto
* @return
*/
@Override
@Transactional
public AjaxResult add(LeaseRecordDto leaseRecordDto) {
if (leaseRecordDto == null || leaseRecordDto.getOrderId() == null || leaseRecordDto.getCode() == null) {
return AjaxResult.error(HttpCodeEnum.TO_PARAM_NULL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
}
List<OrderDetailDto> list = orderMapper.selectOrderDetailsByOderId(leaseRecordDto.getOrderId());
List<Integer> maIdList = list.stream().map(OrderDetailDto::getMaId).collect(Collectors.toList());
LeaseRepairRecord leaseRepairRecord = createLeaseRepairRecord(leaseRecordDto);
// 校验所有记录是否为空
if (isAllRecordListsEmpty(leaseRecordDto)) {
return insertRecord(leaseRepairRecord);
}
try {
// 处理不同记录类型
// 1. 只有维修记录
if (CollectionUtils.isNotEmpty(leaseRecordDto.getRepairRecordList()) && CollectionUtils.isEmpty(leaseRecordDto.getScrapRecordList())
&& CollectionUtils.isEmpty(leaseRecordDto.getLossRecordList())) {
return handleRepairRecords(leaseRecordDto, leaseRepairRecord);
}
// 2. 只有报废记录
if (CollectionUtils.isNotEmpty(leaseRecordDto.getScrapRecordList()) && CollectionUtils.isEmpty(leaseRecordDto.getRepairRecordList())
&& CollectionUtils.isEmpty(leaseRecordDto.getLossRecordList())) {
return handleScrapRecords(leaseRecordDto, leaseRepairRecord);
}
// 3. 只有丢失记录
if (CollectionUtils.isNotEmpty(leaseRecordDto.getLossRecordList()) && CollectionUtils.isEmpty(leaseRecordDto.getRepairRecordList())
&& CollectionUtils.isEmpty(leaseRecordDto.getScrapRecordList())) {
return handleLossRecords(leaseRecordDto, leaseRepairRecord);
}
// 处理维修+报废维修+丢失报废+丢失等组合情况
// 1. 报废+维修
if (CollectionUtils.isNotEmpty(leaseRecordDto.getRepairRecordList()) &&
CollectionUtils.isNotEmpty(leaseRecordDto.getScrapRecordList())
&& CollectionUtils.isEmpty(leaseRecordDto.getLossRecordList())) {
return handleRepairAndScrap(leaseRecordDto, maIdList);
}
// 2. 报废+丢失
if (CollectionUtils.isNotEmpty(leaseRecordDto.getRepairRecordList()) &&
CollectionUtils.isNotEmpty(leaseRecordDto.getLossRecordList())
&& CollectionUtils.isEmpty(leaseRecordDto.getScrapRecordList())) {
return handleRepairAndLoss(leaseRecordDto, maIdList);
}
// 3. 丢失+报废
if (CollectionUtils.isNotEmpty(leaseRecordDto.getScrapRecordList()) &&
CollectionUtils.isNotEmpty(leaseRecordDto.getLossRecordList())
&& CollectionUtils.isEmpty(leaseRecordDto.getRepairRecordList())) {
return handleScrapAndLoss(leaseRecordDto, maIdList);
}
// 处理维修报废丢失记录都有的情况
if (CollectionUtils.isNotEmpty(leaseRecordDto.getRepairRecordList()) &&
CollectionUtils.isNotEmpty(leaseRecordDto.getScrapRecordList()) &&
CollectionUtils.isNotEmpty(leaseRecordDto.getLossRecordList())) {
return handleAllRecords(leaseRecordDto, maIdList);
}
} catch (Exception e) {
e.printStackTrace();
}
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
/**
* 装备费用改价
* @param leasePriceRecord
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult changePrice(LeasePriceRecord leasePriceRecord) {
int result = 0;
List<LeaseRepairRecord> rentPriceList = leasePriceRecord.getRentPriceList();
List<LeaseRepairRecord> repairPriceList = leasePriceRecord.getRepairPriceList();
List<LeaseRepairRecord> scrapPriceList = leasePriceRecord.getScrapPriceList();
List<LeaseRepairRecord> lossPriceList = leasePriceRecord.getLossPriceList();
//租赁费用列表不为空
if (CollectionUtils.isNotEmpty(rentPriceList)) {
for (LeaseRepairRecord leaseRepairRecord : rentPriceList) {
if (leaseRepairRecord.getOrderId() == null || leaseRepairRecord.getMaId() == null ||
leaseRepairRecord.getChangeCost() == null) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
}
leaseRepairRecord.setChangePriceUser(SecurityUtils.getUserId());
result += mapper.updateRentPrice(leaseRepairRecord);
}
}
//维修费用列表不为空
if (CollectionUtils.isNotEmpty(repairPriceList)) {
for (LeaseRepairRecord repairRecord : repairPriceList) {
if (repairRecord.getOrderId() == null || repairRecord.getMaId() == null ||
repairRecord.getChangeCost() == null) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
}
repairRecord.setChangePriceUser(SecurityUtils.getUserId());
result += mapper.updateChangePrice(repairRecord);
}
}
//报废费用列表不为空
if (CollectionUtils.isNotEmpty(scrapPriceList)) {
for (LeaseRepairRecord scrapRecord : scrapPriceList) {
if (scrapRecord.getOrderId() == null || scrapRecord.getMaId() == null ||
scrapRecord.getChangeCost() == null) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
}
scrapRecord.setChangePriceUser(SecurityUtils.getUserId());
result += mapper.updateChangePrice(scrapRecord);
}
}
//丢失费用列表不为空
if (CollectionUtils.isNotEmpty(lossPriceList)) {
for (LeaseRepairRecord lossRecord : lossPriceList) {
if (lossRecord.getOrderId() == null || lossRecord.getMaId() == null ||
lossRecord.getChangeCost() == null) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
}
lossRecord.setChangePriceUser(SecurityUtils.getUserId());
result += mapper.updateChangePrice(lossRecord);
}
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 承租方费用确定
* @param leaseRepairRecord
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult confirmPrice(LeaseRepairRecord leaseRepairRecord) {
if (leaseRepairRecord.getOrderId() != null) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
}
leaseRepairRecord.setPriceConfirmUser(SecurityUtils.getUserId());
//将费用确认人信息存入
int result = mapper.update(leaseRepairRecord);
//修改订单状态为已完成
if (result > 0) {
result += orderMapper.updateOrder(leaseRepairRecord);
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理维修记录
* @param leaseRecordDto
* @param leaseRepairRecord
* @return
*/
private AjaxResult handleRepairRecords(LeaseRecordDto leaseRecordDto, LeaseRepairRecord leaseRepairRecord) {
int result = 0;
for (LeaseRepairRecord repairRecord : leaseRecordDto.getRepairRecordList()) {
leaseRepairRecord.setMaId(repairRecord.getMaId());
leaseRepairRecord.setTypeId(repairRecord.getTypeId());
leaseRepairRecord.setRepairNum(repairRecord.getRepairNum());
leaseRepairRecord.setRepairPrice(repairRecord.getRepairPrice());
if (repairRecord.getRepairNum() > repairRecord.getNum()) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), repairRecord.getDeviceName() + "维修数量不能大于设备数量");
}
result += mapper.insert(leaseRepairRecord);
if (result > 0) {
if (CollectionUtils.isNotEmpty(repairRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(repairRecord.getFileInfoList());
}
}
}
return result > 0 ? AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()) : AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理报废记录
* @param leaseRecordDto
* @param leaseRepairRecord
* @return
*/
private AjaxResult handleScrapRecords(LeaseRecordDto leaseRecordDto, LeaseRepairRecord leaseRepairRecord) {
int result = 0;
for (LeaseRepairRecord scrapRecord : leaseRecordDto.getScrapRecordList()) {
leaseRepairRecord.setMaId(scrapRecord.getMaId());
leaseRepairRecord.setTypeId(scrapRecord.getTypeId());
leaseRepairRecord.setScrapNum(scrapRecord.getScrapNum());
leaseRepairRecord.setScrapPrice(scrapRecord.getScrapPrice());
leaseRepairRecord.setScrapReason(scrapRecord.getScrapReason() == null ? "" : scrapRecord.getScrapReason());
if (scrapRecord.getScrapNum() > scrapRecord.getNum()) {
throw new ServiceException("报废数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
result += mapper.insert(leaseRepairRecord);
if (result > 0) {
if (CollectionUtils.isNotEmpty(scrapRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(scrapRecord.getFileInfoList());
}
}
}
return result > 0 ? AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()) : AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理丢失记录
* @param leaseRecordDto
* @param leaseRepairRecord
* @return
*/
private AjaxResult handleLossRecords(LeaseRecordDto leaseRecordDto, LeaseRepairRecord leaseRepairRecord) {
int result = 0;
for (LeaseRepairRecord lossRecord : leaseRecordDto.getLossRecordList()) {
leaseRepairRecord.setMaId(lossRecord.getMaId());
leaseRepairRecord.setTypeId(lossRecord.getTypeId());
leaseRepairRecord.setLossNum(lossRecord.getLossNum());
leaseRepairRecord.setLossPrice(lossRecord.getLossPrice());
if (lossRecord.getLossNum() > lossRecord.getNum()) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "丢失数量不能大于设备数量");
}
result += mapper.insert(leaseRepairRecord);
if (result > 0) {
if (CollectionUtils.isNotEmpty(lossRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(lossRecord.getFileInfoList());
}
}
}
return result > 0 ? AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()) : AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理维修和报废记录
* @param leaseRecordDto
* @param maIdList
* @return
*/
private AjaxResult handleRepairAndScrap(LeaseRecordDto leaseRecordDto, List<Integer> maIdList) {
int result = 0;
for (Integer maId : maIdList) {
LeaseRepairRecord leaseRepairRecord = new LeaseRepairRecord();
leaseRepairRecord.setOrderId(leaseRecordDto.getOrderId());
leaseRepairRecord.setCode(leaseRecordDto.getCode());
leaseRepairRecord.setCreateBy(SecurityUtils.getUserId().toString());
leaseRepairRecord.setCreateTime(DateUtils.getNowDate());
List<LeaseRepairRecord> repairRecordList = leaseRecordDto.getRepairRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> scrapRecordList = leaseRecordDto.getScrapRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
int repairNum = repairRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getRepairNum()).orElse(0)).sum();
int scrapNum = scrapRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getScrapNum()).orElse(0)).sum();
// 选择第一个不为空的集合的 getNum() 数量
int num = 0;
if (!repairRecordList.isEmpty()) {
num = repairRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
} else if (!scrapRecordList.isEmpty()) {
num = scrapRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
}
if (repairNum + scrapNum > num) {
throw new ServiceException("维修数量+报废数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
// 插入维修记录
if (CollectionUtils.isNotEmpty(repairRecordList)) {
for (LeaseRepairRecord repairRecord : repairRecordList) {
leaseRepairRecord.setMaId(repairRecord.getMaId());
leaseRepairRecord.setTypeId(repairRecord.getTypeId());
leaseRepairRecord.setRepairNum(repairRecord.getRepairNum());
leaseRepairRecord.setRepairPrice(repairRecord.getRepairPrice());
if (CollectionUtils.isNotEmpty(repairRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(repairRecord.getFileInfoList());
}
}
}
// 插入报废记录
if (CollectionUtils.isNotEmpty(scrapRecordList)) {
for (LeaseRepairRecord scrapRecord : scrapRecordList) {
leaseRepairRecord.setMaId(scrapRecord.getMaId());
leaseRepairRecord.setTypeId(scrapRecord.getTypeId());
leaseRepairRecord.setScrapNum(scrapRecord.getScrapNum());
leaseRepairRecord.setScrapPrice(scrapRecord.getScrapPrice());
leaseRepairRecord.setScrapReason(scrapRecord.getScrapReason() == null ? "" : scrapRecord.getScrapReason());
if (CollectionUtils.isNotEmpty(scrapRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(scrapRecord.getFileInfoList());
}
}
}
result += mapper.insert(leaseRepairRecord);
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理维修和丢失记录
* @param leaseRecordDto
* @param maIdList
* @return
*/
private AjaxResult handleRepairAndLoss(LeaseRecordDto leaseRecordDto, List<Integer> maIdList) {
int result = 0;
for (Integer maId : maIdList) {
LeaseRepairRecord leaseRepairRecord = new LeaseRepairRecord();
leaseRepairRecord.setOrderId(leaseRecordDto.getOrderId());
leaseRepairRecord.setCode(leaseRecordDto.getCode());
leaseRepairRecord.setCreateBy(SecurityUtils.getUserId().toString());
leaseRepairRecord.setCreateTime(DateUtils.getNowDate());
List<LeaseRepairRecord> repairRecordList = leaseRecordDto.getRepairRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> lossRecordList = leaseRecordDto.getLossRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
int repairNum = repairRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getRepairNum()).orElse(0)).sum();
int lossNum = repairRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getLossNum()).orElse(0)).sum();
// 选择第一个不为空的集合的 getNum() 数量
int num = 0;
if (!repairRecordList.isEmpty()) {
num = repairRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
}else if (!lossRecordList.isEmpty()) {
num = lossRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
}
if (repairNum + lossNum > num) {
throw new ServiceException("维修数量+丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
// 插入维修记录
if (CollectionUtils.isNotEmpty(repairRecordList)) {
for (LeaseRepairRecord repairRecord : repairRecordList) {
leaseRepairRecord.setMaId(repairRecord.getMaId());
leaseRepairRecord.setTypeId(repairRecord.getTypeId());
leaseRepairRecord.setRepairNum(repairRecord.getRepairNum());
leaseRepairRecord.setRepairPrice(repairRecord.getRepairPrice());
if (CollectionUtils.isNotEmpty(repairRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(repairRecord.getFileInfoList());
}
}
}
// 插入丢失记录
if (CollectionUtils.isNotEmpty(lossRecordList)) {
for (LeaseRepairRecord lossRecord : lossRecordList) {
leaseRepairRecord.setMaId(lossRecord.getMaId());
leaseRepairRecord.setTypeId(lossRecord.getTypeId());
leaseRepairRecord.setLossNum(lossRecord.getLossNum());
leaseRepairRecord.setLossPrice(lossRecord.getLossPrice());
if (CollectionUtils.isNotEmpty(lossRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(lossRecord.getFileInfoList());
}
}
}
result += mapper.insert(leaseRepairRecord);
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理报废+丢失记录
* @param leaseRecordDto
* @param maIdList
* @return
*/
private AjaxResult handleScrapAndLoss(LeaseRecordDto leaseRecordDto, List<Integer> maIdList) {
int result = 0;
for (Integer maId : maIdList) {
LeaseRepairRecord leaseRepairRecord = new LeaseRepairRecord();
leaseRepairRecord.setOrderId(leaseRecordDto.getOrderId());
leaseRepairRecord.setCode(leaseRecordDto.getCode());
leaseRepairRecord.setCreateBy(SecurityUtils.getUserId().toString());
leaseRepairRecord.setCreateTime(DateUtils.getNowDate());
List<LeaseRepairRecord> scrapRecordList = leaseRecordDto.getScrapRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> lossRecordList = leaseRecordDto.getLossRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
int scrapNum = scrapRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getScrapNum()).orElse(0)).sum();
int lossNum = lossRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getLossNum()).orElse(0)).sum();
// 选择第一个不为空的集合的 getNum() 数量
int num = 0;
if (!scrapRecordList.isEmpty()) {
num = scrapRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
} else if (!lossRecordList.isEmpty()) {
num = lossRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
}
if (scrapNum + lossNum > num) {
throw new ServiceException("报废数量+丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
// 插入报废记录
if (CollectionUtils.isNotEmpty(scrapRecordList)) {
for (LeaseRepairRecord scrapRecord : scrapRecordList) {
leaseRepairRecord.setMaId(scrapRecord.getMaId());
leaseRepairRecord.setTypeId(scrapRecord.getTypeId());
leaseRepairRecord.setScrapNum(scrapRecord.getScrapNum());
leaseRepairRecord.setScrapPrice(scrapRecord.getScrapPrice());
leaseRepairRecord.setScrapReason(scrapRecord.getScrapReason() == null ? "" : scrapRecord.getScrapReason());
if (CollectionUtils.isNotEmpty(scrapRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(scrapRecord.getFileInfoList());
}
}
}
// 插入丢失记录
if (CollectionUtils.isNotEmpty(lossRecordList)) {
for (LeaseRepairRecord lossRecord : lossRecordList) {
leaseRepairRecord.setMaId(lossRecord.getMaId());
leaseRepairRecord.setTypeId(lossRecord.getTypeId());
leaseRepairRecord.setLossNum(lossRecord.getLossNum());
leaseRepairRecord.setLossPrice(lossRecord.getLossPrice());
if (CollectionUtils.isNotEmpty(lossRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(lossRecord.getFileInfoList());
}
}
}
result += mapper.insert(leaseRepairRecord);
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 处理维修报废丢失记录都有的情况
* @param leaseRecordDto
* @param maIdList
* @return
*/
private AjaxResult handleAllRecords(LeaseRecordDto leaseRecordDto, List<Integer> maIdList) {
int result = 0;
for (Integer maId : maIdList) {
LeaseRepairRecord leaseRepairRecord = new LeaseRepairRecord();
leaseRepairRecord.setOrderId(leaseRecordDto.getOrderId());
leaseRepairRecord.setCode(leaseRecordDto.getCode());
leaseRepairRecord.setCreateBy(SecurityUtils.getUserId().toString());
leaseRepairRecord.setCreateTime(DateUtils.getNowDate());
List<LeaseRepairRecord> repairRecordList = leaseRecordDto.getRepairRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> scrapRecordList = leaseRecordDto.getScrapRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> lossRecordList = leaseRecordDto.getLossRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
int repairNum = repairRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getRepairNum()).orElse(0)).sum();
int scrapNum = scrapRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getScrapNum()).orElse(0)).sum();
int lossNum = lossRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getLossNum()).orElse(0)).sum();
// 选择第一个不为空的集合的 getNum() 数量
int num = 0;
if (!repairRecordList.isEmpty()) {
num = repairRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
} else if (!scrapRecordList.isEmpty()) {
num = scrapRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
} else if (!lossRecordList.isEmpty()) {
num = lossRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
}
if (repairNum + scrapNum + lossNum > num) {
throw new ServiceException("维修数量+报废数量+丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
// 插入维修记录
if (CollectionUtils.isNotEmpty(repairRecordList)) {
for (LeaseRepairRecord repairRecord : repairRecordList) {
leaseRepairRecord.setMaId(repairRecord.getMaId());
leaseRepairRecord.setTypeId(repairRecord.getTypeId());
leaseRepairRecord.setRepairNum(repairRecord.getRepairNum());
leaseRepairRecord.setRepairPrice(repairRecord.getRepairPrice());
leaseRepairRecord.setRepairChangePrice(repairRecord.getRepairChangePrice());
if (CollectionUtils.isNotEmpty(repairRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(repairRecord.getFileInfoList());
}
}
}
// 插入报废记录
if (CollectionUtils.isNotEmpty(scrapRecordList)) {
for (LeaseRepairRecord scrapRecord : scrapRecordList) {
leaseRepairRecord.setMaId(scrapRecord.getMaId());
leaseRepairRecord.setTypeId(scrapRecord.getTypeId());
leaseRepairRecord.setScrapNum(scrapRecord.getScrapNum());
leaseRepairRecord.setScrapPrice(scrapRecord.getScrapPrice());
leaseRepairRecord.setScrapReason(scrapRecord.getScrapReason() == null ? "" : scrapRecord.getScrapReason());
if (CollectionUtils.isNotEmpty(scrapRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(scrapRecord.getFileInfoList());
}
}
}
// 插入丢失记录
if (CollectionUtils.isNotEmpty(lossRecordList)) {
for (LeaseRepairRecord lossRecord : lossRecordList) {
leaseRepairRecord.setMaId(lossRecord.getMaId());
leaseRepairRecord.setTypeId(lossRecord.getTypeId());
leaseRepairRecord.setLossNum(lossRecord.getLossNum());
leaseRepairRecord.setLossPrice(lossRecord.getLossPrice());
if (CollectionUtils.isNotEmpty(lossRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(lossRecord.getFileInfoList());
}
}
}
result += mapper.insert(leaseRepairRecord);
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 插入记录
* @param leaseRepairRecord
* @return
*/
private AjaxResult insertRecord(LeaseRepairRecord leaseRepairRecord) {
int result = mapper.insert(leaseRepairRecord);
return result > 0 ? AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()) :
AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 创建维修公用类
* @param leaseRecordDto
* @return
*/
private LeaseRepairRecord createLeaseRepairRecord(LeaseRecordDto leaseRecordDto) {
LeaseRepairRecord leaseRepairRecord = new LeaseRepairRecord();
leaseRepairRecord.setOrderId(leaseRecordDto.getOrderId());
leaseRepairRecord.setCode(leaseRecordDto.getCode());
leaseRepairRecord.setCreateBy(SecurityUtils.getUserId().toString());
leaseRepairRecord.setCreateTime(DateUtils.getNowDate());
return leaseRepairRecord;
}
/**
* 判断是否所有记录列表为空
* @param leaseRecordDto
* @return
*/
private boolean isAllRecordListsEmpty(LeaseRecordDto leaseRecordDto) {
return CollectionUtils.isEmpty(leaseRecordDto.getRepairRecordList()) &&
CollectionUtils.isEmpty(leaseRecordDto.getScrapRecordList()) &&
CollectionUtils.isEmpty(leaseRecordDto.getLossRecordList());
}
}

View File

@ -18,6 +18,9 @@ public class OrderDetailDto {
@ApiModelProperty(value = "主键id")
private Integer id;
@ApiModelProperty(value = "前端是否选中此字段仅供前端使用默认0")
private Integer isCheck = 0;
@ApiModelProperty(value = "主键ids")
private List<Integer> ids;
@ -27,12 +30,18 @@ public class OrderDetailDto {
@ApiModelProperty(value = "设备id")
private Integer maId;
@ApiModelProperty(value = "设备类型id")
private Integer typeId;
@ApiModelProperty(value = "类型名称")
private String typeName;
@ApiModelProperty(value = "租期开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date rentBeginTime;
@ApiModelProperty(value = "租期结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date rentEndTime;
@ApiModelProperty(value = "天数")
@ -44,6 +53,9 @@ public class OrderDetailDto {
@ApiModelProperty(value = "总金额")
private BigDecimal costs;
@ApiModelProperty(value = "改价金额")
private BigDecimal changeCost;
@ApiModelProperty(value = "设备类型0编码 1数量")
private String manageType;

View File

@ -17,6 +17,16 @@ public class OrderInfoDto {
@ApiModelProperty(value = "主键id")
private Integer orderId;
@ApiModelProperty(value = "订单装备套数")
private Integer maNumber;
@ApiModelProperty(value = "退租时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date rentEndTime;
@ApiModelProperty(value = "天数")
private String days;
@ApiModelProperty(value = "父id续租原订单")
private Integer pId;

View File

@ -1,6 +1,7 @@
package com.bonus.material.order.mapper;
import com.bonus.material.device.domain.DevInfo;
import com.bonus.material.lease.domain.LeaseRepairRecord;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
import org.apache.ibatis.annotations.Param;
@ -35,4 +36,6 @@ public interface OrderMapper {
List<OrderDetailDto> selectOrderDetailsByOderId(String orderId);
List<OrderDetailDto> getOrderDetailsByOrderId(Integer orderId);
int updateOrder(LeaseRepairRecord leaseRepairRecord);
}

View File

@ -81,14 +81,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getArea" resultType="com.bonus.common.biz.domain.vo.AreaVo">
select
id as areaId,
`code` as areaCode,
parent_code as areaParentCode,
name as areaName
from base_address
where parent_code = '34'
<if test="areaName != null and areaName != ''">
and area_name like concat('%',#{areaName},'%')
where 1 = 1
<if test="areaCode == null and areaCode == ''">
and parent_code = 0
</if>
<if test="areaId != null">
and area_id = #{areaId}
<if test="areaCode != null and areaCode != ''">
and parent_code = #{areaCode}
</if>
</select>

View File

@ -0,0 +1,476 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.material.lease.mapper.LeaseRepairRecordMapper">
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into lease_repair_record
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="orderId != null and orderId != ''">order_id,</if>
<if test="code != null and code != ''">code,</if>
<if test="maId != null ">ma_id,</if>
<if test="typeId != null">type_id,</if>
<if test="repairNum != null">repair_num,</if>
<if test="repairPrice != null and repairPrice != ''">repair_price,</if>
<if test="repairChangePrice != null and repairChangePrice != ''">repair_change_price,</if>
<if test="scrapNum != null">scrap_num,</if>
<if test="scrapPrice != null and scrapPrice != ''">scrap_price,</if>
<if test="scrapChangePrice != null and scrapChangePrice != ''">scrap_change_price,</if>
<if test="scrapReason != null and scrapReason != ''">scrap_reason,</if>
<if test="lossNum != null">loss_num,</if>
<if test="lossPrice != null">loss_price,</if>
<if test="lossChangePrice != null">loss_change_price,</if>
<if test="changePriceUser != null">change_price_user,</if>
<if test="priceConfirmUser != null and priceConfirmUser != ''">price_confirm_user,</if>
<if test="changePriceTime != null and changePriceTime != ''">change_price_time,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="orderId != null and orderId != ''">#{orderId},</if>
<if test="code != null and code != ''">#{code},</if>
<if test="maId != null ">#{maId},</if>
<if test="typeId != null">#{typeId},</if>
<if test="repairNum != null">#{repairNum},</if>
<if test="repairPrice != null and repairPrice != ''">#{repairPrice},</if>
<if test="repairChangePrice != null and repairChangePrice != ''">#{repairChangePrice},</if>
<if test="scrapNum != null">#{scrapNum},</if>
<if test="scrapPrice != null and scrapPrice != ''">#{scrapPrice},</if>
<if test="scrapChangePrice != null and scrapChangePrice != ''">#{scrapChangePrice},</if>
<if test="scrapReason != null and scrapReason != ''">#{scrapReason},</if>
<if test="lossNum != null">#{lossNum},</if>
<if test="lossPrice != null">#{lossPrice},</if>
<if test="lossChangePrice != null">#{lossChangePrice},</if>
<if test="changePriceUser != null">#{changePriceUser},</if>
<if test="priceConfirmUser != null and priceConfirmUser != ''">#{priceConfirmUser},</if>
<if test="changePriceTime != null and changePriceTime != ''">#{changePriceTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<insert id="insertHotSearch">
insert into ma_hot_search(lease_id, lease_num, create_time)
values(#{id}, 1, now())
</insert>
<update id="updateDevInfo">
update ma_lease_info
<trim prefix="SET" suffixOverrides=",">
<if test="leaseName != null and leaseName != ''">lease_name = #{leaseName},</if>
<if test="typeId != null">type_id = #{typeId},</if>
<if test="ids != null">type_ids = #{ids},</if>
<if test="companyId != null">company_id = #{companyId},</if>
<if test="areaId != null">area_id = #{areaId},</if>
<if test="leaseDay != null ">lease_day = #{leaseDay},</if>
<if test="leaseStatus != null ">lease_status = #{leaseStatus},</if>
<if test="leaseNum != null ">lease_num = #{leaseNum},</if>
<if test="startTime != null">start_time = #{startTime},</if>
<if test="publishUser != null and publishUser != ''">publish_user = #{publishUser},</if>
<if test="endTime != null">end_time = #{endTime},</if>
<if test="person != null">person = #{person},</if>
<if test="personPhone != null">person_phone = #{personPhone},</if>
<if test="description != null and description != ''">description = #{description},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="orderUser != null and orderUser != ''">order_user = #{orderUser},</if>
<if test="orderTime != null">order_time = #{orderTime},</if>
</trim>
where id = #{id}
</update>
<update id="updateHotSearchByLeaseId">
update ma_hot_search
set lease_num = lease_num + 1,
update_time = now()
where lease_id = #{id}
</update>
<update id="updateRentPrice">
update ma_order_details
set change_cost = #{changeCost},
change_price_user = #{changePriceUser},
change_price_time = now()
where order_id = #{orderId} and ma_id = #{maId}
</update>
<update id="updateChangePrice">
update lease_repair_record
<trim prefix="SET" suffixOverrides=",">
<if test="repairChangePrice != null">repair_change_price = #{repairChangePrice},</if>
<if test="scrapChangePrice != null">scrap_change_price = #{scrapChangePrice},</if>
<if test="lossChangePrice != null">loss_change_price = #{lossChangePrice},</if>
<if test="changePriceUser != null">change_price_user = #{changePriceUser},</if>
change_price_time = now()
</trim>
where order_id = #{orderId} and ma_id = #{maId}
</update>
<update id="update">
update lease_repair_record
<trim prefix="SET" suffixOverrides=",">
<if test="priceConfirmUser != null">price_confirm_user = #{priceConfirmUser},</if>
update_time = now()
</trim>
where order_id = #{orderId}
</update>
<delete id="deleteById">
delete from ma_lease_info where id = #{id}
</delete>
<select id="selectByName" resultType="com.bonus.material.lease.domain.vo.MaLeaseVo">
SELECT
m.id as id,
m.lease_name as leaseName,
m.lease_code as leaseCode,
m.type_id as typeId,
m.type_ids as ids,
mt4.type_name as typeName,
m.company_id as companyId,
c.company_name as companyName,
c.operate_address as operateAddress,
m.lease_status as leaseStatus,
m.lease_day as leaseDay,
m.lease_num as leaseNum,
m.start_time as startTime,
m.end_time as endTime,
m.person as person,
m.person_phone as personPhone,
m.description as description,
IFNULL(h.lease_num, 0) AS searchNum,
mt3.type_id as thirdId,
mt3.type_name as thirdName,
mt2.type_id as secondId,
mt2.type_name as secondName,
mt1.type_id as firstId,
mt1.type_name as firstName,
CASE
-- 第一级
WHEN mt1.type_id IS NULL
AND mt2.type_id IS NULL
AND mt3.type_id IS NULL
AND mt4.type_id IS NOT NULL THEN
mt4.type_name
-- 第二级
WHEN mt1.type_id IS NULL
AND mt2.type_id IS NULL
AND mt3.type_id IS NOT NULL
AND mt4.type_id IS NOT NULL THEN
CONCAT( mt3.type_name, '/', mt4.type_name )
-- 第三级
WHEN mt1.type_id IS NULL
AND mt2.type_id IS NOT NULL
AND mt3.type_id IS NOT NULL
AND mt4.type_id IS NOT NULL THEN
CONCAT( mt2.type_name, '/', mt3.type_name, '/', mt4.type_name )
-- 第四级
WHEN mt1.type_id IS NOT NULL
AND mt2.type_id IS NOT NULL
AND mt3.type_id IS NOT NULL
AND mt4.type_id IS NOT NULL THEN
CONCAT( mt1.type_name, '/', mt2.type_name, '/', mt3.type_name, '/', mt4.type_name )
ELSE NULL
END AS groupName,
m.publish_user as publishUser,
m.area_id as areaId,
b.name as areaName
FROM
ma_lease_info m
LEFT JOIN bm_company_info c ON m.company_id = c.company_id
LEFT JOIN base_address b ON b.id = m.area_id
LEFT JOIN ma_hot_search h ON h.lease_id = m.id
LEFT JOIN ma_type mt4 ON mt4.type_id = m.type_id and mt4.del_flag = '0'
LEFT JOIN ma_type mt3 ON mt3.type_id = mt4.parent_id and mt3.del_flag = '0'
LEFT JOIN ma_type mt2 ON mt2.type_id = mt3.parent_id and mt2.del_flag = '0'
LEFT JOIN ma_type mt1 ON mt1.type_id = mt2.parent_id and mt1.del_flag = '0'
WHERE 1 = 1
<if test="id != null">
and m.id = #{id}
</if>
<if test="leaseCode != null and leaseCode != ''">
and m.lease_code = #{leaseCode}
</if>
<if test="leaseName != null and leaseName != ''">
and m.lease_name = #{leaseName}
</if>
</select>
<select id="selectTaskNumByMonth" resultType="java.lang.String">
SELECT SUBSTRING(lease_code, - 4) as code
FROM ma_lease_info
WHERE DATE_FORMAT(create_time, '%y%m') = DATE_FORMAT(#{date}, '%y%m')
ORDER BY create_time DESC LIMIT 1
</select>
<select id="list" resultType="com.bonus.material.lease.domain.LeaseRepair">
SELECT
moi.order_id AS orderId,
moi.CODE AS code,
su.nick_name AS leaseName,
dept.companyName AS leaseCompany,
su.phonenumber AS phoneNumber,
hh.rent_end_time AS rentEndTime,
hh.order_status AS orderStatus,
CASE
WHEN hh.order_status = 5 THEN
'已退租'
WHEN hh.order_status = 6 THEN
'已完成' ELSE '未知'
END AS orderStatusName
FROM
ma_order_details hh
LEFT JOIN ma_order_info moi ON moi.order_id = hh.order_id
LEFT JOIN ma_dev_info mdi ON hh.ma_id = mdi.ma_id
AND mdi.is_active = '1'
LEFT JOIN sys_user su ON su.user_id = moi.buyer_id
AND su.del_flag = '0'
LEFT JOIN (
SELECT
sd.dept_id AS deptId,
sd1.dept_name AS companyName
FROM
sys_dept sd
JOIN (
SELECT
CASE
ancestors
WHEN ( '0' ) THEN
dept_id ELSE SUBSTRING_INDEX( SUBSTRING_INDEX( ancestors, ',', 2 ), ',', - 1 )
END AS first_ancestor,
dept_id
FROM
sys_dept
) AS subquery ON sd.dept_id = subquery.dept_id
LEFT JOIN sys_dept sd1 ON sd1.dept_id = subquery.first_ancestor
) dept ON dept.deptId = su.dept_id
WHERE
hh.order_status IN ( 5, 6 )
<if test="code != null and code != ''">
and moi.CODE like concat('%',#{code},'%')
</if>
<if test="leaseName != null and leaseName != ''">
and su.nick_name like concat('%',#{leaseName},'%')
</if>
<if test="leaseCompany != null and leaseCompany != ''">
and dept.companyName like concat('%',#{leaseCompany},'%')
</if>
<if test="orderStatus != null">
and hh.order_status = #{orderStatus}
</if>
<if test="finishStartTime != null and finishStartTime != '' and finishEndTime != null and finishEndTime != ''">
and DATE_FORMAT(hh.rent_end_time,'%Y-%m-%d') between #{finishStartTime} and #{finishEndTime}
</if>
GROUP BY
moi.CODE
</select>
<select id="getHotSearchCountByLeaseId" resultType="java.lang.Integer">
select count(1) from ma_hot_search
where lease_id = #{leaseId}
</select>
<select id="leaseList" resultType="com.bonus.material.lease.domain.vo.MaLeaseVo">
SELECT
m.id as id,
m.lease_name as leaseName,
m.lease_code as leaseCode,
m.type_id as typeId,
mt4.type_name as typeName,
m.company_id as companyId,
c.company_name as companyName,
c.operate_address as operateAddress,
m.lease_status as leaseStatus,
m.lease_day as leaseDay,
m.lease_num as leaseNum,
m.start_time as startTime,
m.end_time as endTime,
m.person as person,
m.person_phone as personPhone,
m.description as description,
mt3.type_id as thirdId,
mt3.type_name as thirdName,
mt2.type_id as secondId,
mt2.type_name as secondName,
mt1.type_id as firstId,
mt1.type_name as firstName,
CASE
-- 第一级
WHEN mt1.type_id IS NULL
AND mt2.type_id IS NULL
AND mt3.type_id IS NULL
AND mt4.type_id IS NOT NULL THEN
mt4.type_name
-- 第二级
WHEN mt1.type_id IS NULL
AND mt2.type_id IS NULL
AND mt3.type_id IS NOT NULL
AND mt4.type_id IS NOT NULL THEN
CONCAT( mt3.type_name, '/', mt4.type_name )
-- 第三级
WHEN mt1.type_id IS NULL
AND mt2.type_id IS NOT NULL
AND mt3.type_id IS NOT NULL
AND mt4.type_id IS NOT NULL THEN
CONCAT( mt2.type_name, '/', mt3.type_name, '/', mt4.type_name )
-- 第四级
WHEN mt1.type_id IS NOT NULL
AND mt2.type_id IS NOT NULL
AND mt3.type_id IS NOT NULL
AND mt4.type_id IS NOT NULL THEN
CONCAT( mt1.type_name, '/', mt2.type_name, '/', mt3.type_name, '/', mt4.type_name )
ELSE NULL
END AS groupName,
m.publish_user as publishUser,
b.id as areaId,
b.name as areaName
FROM
ma_lease_info m
LEFT JOIN bm_company_info c ON m.company_id = c.company_id
LEFT JOIN base_address b ON b.id = m.area_id
LEFT JOIN sys_user su ON m.publish_user = su.user_id
LEFT JOIN ma_type mt4 ON mt4.type_id = m.type_id and mt4.del_flag = '0'
LEFT JOIN ma_type mt3 ON mt3.type_id = mt4.parent_id and mt3.del_flag = '0'
LEFT JOIN ma_type mt2 ON mt2.type_id = mt3.parent_id and mt2.del_flag = '0'
LEFT JOIN ma_type mt1 ON mt1.type_id = mt2.parent_id and mt1.del_flag = '0'
WHERE m.lease_status = '0'
<if test="typeId != null">
<choose>
<when test="level != null and level == 4">
and m.type_id = #{typeId}
</when>
<when test="level != null and level == 3">
and mt3.type_id = #{typeId}
</when>
<when test="level != null and level == 2">
and mt2.type_id = #{typeId}
</when>
<when test="level != null and level == 1">
and (
mt1.type_id = 1
OR mt2.type_id = 1
OR mt3.type_id = 1
OR mt4.type_id = 1
)
</when>
</choose>
</if>
<if test="companyId != null and companyId != ''"> and m.company_id = #{companyId}</if>
<if test="areaId != null"> and m.area_id = #{areaId}</if>
<if test="keyWord != null and keyWord != ''">
and (
locate(#{keyWord},mt1.type_name) > 0
or locate(#{keyWord},mt2.type_name) > 0
or locate(#{keyWord},mt3.type_name) > 0
or locate(#{keyWord},mt4.type_name) > 0
or locate(#{keyWord},c.company_name) > 0
or locate(#{keyWord},m.lease_name) > 0
)
</if>
GROUP BY m.lease_code
ORDER BY
m.lease_status
<if test="startTime != '' and startTime == 'ASC'">
,m.start_time
</if>
<if test="startTime != '' and startTime == 'DESC'">
,m.start_time DESC
</if>
<if test="rentDay != null and rentDay == 'ASC'">
,m.lease_day
</if>
<if test="rentDay != null and rentDay == 'DESC'">
,m.lease_day DESC
</if>
<if test="endTime != '' and endTime == 'ASC'">
,m.end_time
</if>
<if test="endTime != '' and endTime == 'DESC'">
,m.end_time DESC
</if>
<if test="rentNum != null and rentNum == 'ASC'">
,m.lease_num
</if>
<if test="rentNum != null and rentNum == 'DESC'">
,m.lease_num DESC
</if>
</select>
<select id="rentList" resultType="com.bonus.material.lease.domain.vo.MaLeaseVo">
SELECT
m.id as id,
m.lease_name as leaseName,
m.lease_code as leaseCode,
m.type_id as typeId,
m.company_id as companyId,
c.company_name as companyName,
c.operate_address as operateAddress,
m.lease_status as leaseStatus,
m.lease_day as leaseDay,
m.lease_num as leaseNum,
m.start_time as startTime,
m.end_time as endTime,
m.person as person,
m.person_phone as personPhone,
m.description as description,
su.nick_name as publishUser,
su1.nick_name as orderUser,
m.order_time as orderTime,
b.id as areaId,
b.name as areaName
FROM
ma_lease_info m
LEFT JOIN bm_company_info c ON m.company_id = c.company_id
LEFT JOIN base_address b ON b.id = m.area_id
LEFT JOIN sys_user su ON m.publish_user = su.user_id
LEFT JOIN sys_user su1 ON m.order_user = su1.user_id
WHERE 1 = 1 and m.order_user = #{orderUser} and m.lease_status = '1'
<if test="leaseCode != null and leaseCode != ''">
and m.lease_code like concat('%',#{leaseCode},'%')
</if>
<if test="leaseName != null and leaseName != ''">
and m.lease_name like concat('%',#{leaseName},'%')
</if>
<if test="finishStartTime != null and finishStartTime != '' and finishEndTime != null and finishEndTime != ''">
and DATE_FORMAT(m.end_time,'%Y-%m-%d') between #{finishStartTime} and #{finishEndTime}
</if>
<if test="orderStartTime != null and orderStartTime != '' and orderEndTime != null and orderEndTime != ''">
and DATE_FORMAT(m.order_time,'%Y-%m-%d') between #{orderStartTime} and #{orderEndTime}
</if>
GROUP BY m.lease_code
</select>
<select id="selectLeaseContent" resultType="java.lang.Integer">
SELECT
count(1)
FROM
lease_repair_record
WHERE
code = #{orderCode}
</select>
<select id="getLeaseRepairRecordList" resultType="com.bonus.material.lease.domain.LeaseRepairRecord">
SELECT
lr.ma_id as maId,
m1.device_name as deviceName,
mt.type_name as typeName,
lr.repair_num as repairNum,
lr.repair_price as repairPrice,
lr.repair_change_price as repairChangePrice,
lr.scrap_num as scrapNum,
lr.scrap_price as scrapPrice,
lr.scrap_change_price as scrapChangePrice,
lr.scrap_reason as scrapReason,
lr.loss_num as lossNum,
lr.loss_price as lossPrice,
lr.loss_change_price as lossChangePrice
FROM
lease_repair_record lr
LEFT JOIN ma_dev_info m1 ON lr.ma_id = m1.ma_id
AND m1.is_active = '1'
LEFT JOIN ma_type mt ON mt.type_id = lr.type_id
AND mt.del_flag = '0'
WHERE
lr.order_id = #{orderId}
</select>
</mapper>

View File

@ -65,6 +65,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updateAddDevCount">
update ma_dev_info set device_count = device_count + #{num} where ma_id = #{maId} and is_active = 1
</update>
<update id="updateOrder">
UPDATE
ma_order_details
SET order_status = 6,
rent_over_user = #{priceConfirmUser},
rent_over_time = now()
WHERE order_id = #{orderId}
</update>
<select id="getdeviceCount" resultType="com.bonus.material.device.domain.DevInfo">
select device_count,device_name from ma_dev_info where ma_id = #{maId} and is_active = 1
</select>
@ -173,6 +183,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getOrderDetailsById" resultType="com.bonus.material.order.domain.OrderInfoDto">
SELECT
moi.code AS code,
COUNT(hh.ma_id) as maNumber,
hh.rent_end_time as rentEndTime,
hh.days as days,
moi.order_time,
c.company_name AS czcompanyName,
mdi.person as person,
@ -213,8 +226,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectOrderDetailsByOderId" resultType="com.bonus.material.order.domain.OrderDetailDto">
SELECT
mdi.ma_id as maId,
mdi.type_id as typeId,
mdi.device_name,
mt.lease_price as dayLeasePrice,
mt.type_name as typeName,
hh.order_status,
hh.days,
bfi.url,