diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/vo/AreaVo.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/vo/AreaVo.java index 31fd516..194123c 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/vo/AreaVo.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/vo/AreaVo.java @@ -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; } diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java index 2ef52f2..ddbcc93 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/HttpCodeEnum.java @@ -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, "需要登录后操作"), diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/OrderStatusEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/OrderStatusEnum.java new file mode 100644 index 0000000..50a9f01 --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/OrderStatusEnum.java @@ -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; + } +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/controller/LeaseRepairRecordController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/controller/LeaseRepairRecordController.java new file mode 100644 index 0000000..d08ed14 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/controller/LeaseRepairRecordController.java @@ -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 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); + } + + +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeasePriceRecord.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeasePriceRecord.java new file mode 100644 index 0000000..d4d1e2b --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeasePriceRecord.java @@ -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 rentPriceList; + + @ApiModelProperty(value = "维修费用列表") + private List repairPriceList; + + @ApiModelProperty(value = "报废费用列表") + private List scrapPriceList; + + @ApiModelProperty(value = "丢失费用列表") + private List lossPriceList; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRecordDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRecordDto.java new file mode 100644 index 0000000..ee7a9c7 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRecordDto.java @@ -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 orderDetailDtoList; + + @ApiModelProperty(value = "维修列表") + private List repairRecordList; + + @ApiModelProperty(value = "报废列表") + private List scrapRecordList; + + @ApiModelProperty(value = "丢失列表") + private List lossRecordList; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRepair.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRepair.java new file mode 100644 index 0000000..9c69dac --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRepair.java @@ -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; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRepairRecord.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRepairRecord.java new file mode 100644 index 0000000..668eceb --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/domain/LeaseRepairRecord.java @@ -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 fileInfoList; + +} + diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java new file mode 100644 index 0000000..1ba80da --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java @@ -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 list(LeaseRepair dto); + + /** + * 查询列表 + * @param orderCode + * @return + */ + int selectLeaseContent(String orderCode); + + /** + * 新增 + * @param leaseRepairRecord + * @return + */ + int insert(LeaseRepairRecord leaseRepairRecord); + + /** + * 查询列表 + * @param dto + * @return + */ + List getLeaseRepairRecordList(LeaseRepair dto); + + /** + * 租赁费用改价 + * @param leaseRepairRecord + * @return + */ + int updateRentPrice(LeaseRepairRecord leaseRepairRecord); + + /** + * 维修费用改价 + * @param repairRecord + * @return + */ + int updateChangePrice(LeaseRepairRecord repairRecord); + + /** + * 修改 + * @param leaseRepairRecord + * @return + */ + int update(LeaseRepairRecord leaseRepairRecord); +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/LeaseRepairRecordService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/LeaseRepairRecordService.java new file mode 100644 index 0000000..a4a9a11 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/LeaseRepairRecordService.java @@ -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 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); +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java new file mode 100644 index 0000000..af4b019 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java @@ -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 list(LeaseRepair dto) { + List 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 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 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 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 list = orderMapper.selectOrderDetailsByOderId(leaseRecordDto.getOrderId()); + List 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 rentPriceList = leasePriceRecord.getRentPriceList(); + List repairPriceList = leasePriceRecord.getRepairPriceList(); + List scrapPriceList = leasePriceRecord.getScrapPriceList(); + List 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 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 repairRecordList = leaseRecordDto.getRepairRecordList().stream() + .filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList()); + List 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 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 repairRecordList = leaseRecordDto.getRepairRecordList().stream() + .filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList()); + List 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 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 scrapRecordList = leaseRecordDto.getScrapRecordList().stream() + .filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList()); + List 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 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 repairRecordList = leaseRecordDto.getRepairRecordList().stream() + .filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList()); + List scrapRecordList = leaseRecordDto.getScrapRecordList().stream() + .filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList()); + List 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()); + } +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java index 3db541f..7e465e9 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java @@ -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 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; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java index 82ea5b3..1ea4b27 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java @@ -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; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/mapper/OrderMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/mapper/OrderMapper.java index 17c1f3b..bf378ae 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/mapper/OrderMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/mapper/OrderMapper.java @@ -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 selectOrderDetailsByOderId(String orderId); List getOrderDetailsByOrderId(Integer orderId); + + int updateOrder(LeaseRepairRecord leaseRepairRecord); } diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/home/MaTypeInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/home/MaTypeInfoMapper.xml index 45ff00d..2afb4ab 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/home/MaTypeInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/home/MaTypeInfoMapper.xml @@ -81,14 +81,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml new file mode 100644 index 0000000..8a1cc28 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml @@ -0,0 +1,476 @@ + + + + + insert into lease_repair_record + + order_id, + code, + ma_id, + type_id, + repair_num, + repair_price, + repair_change_price, + scrap_num, + scrap_price, + scrap_change_price, + scrap_reason, + loss_num, + loss_price, + loss_change_price, + change_price_user, + price_confirm_user, + change_price_time, + create_by, + create_time, + + + #{orderId}, + #{code}, + #{maId}, + #{typeId}, + #{repairNum}, + #{repairPrice}, + #{repairChangePrice}, + #{scrapNum}, + #{scrapPrice}, + #{scrapChangePrice}, + #{scrapReason}, + #{lossNum}, + #{lossPrice}, + #{lossChangePrice}, + #{changePriceUser}, + #{priceConfirmUser}, + #{changePriceTime}, + #{createBy}, + #{createTime}, + + + + + insert into ma_hot_search(lease_id, lease_num, create_time) + values(#{id}, 1, now()) + + + + update ma_lease_info + + lease_name = #{leaseName}, + type_id = #{typeId}, + type_ids = #{ids}, + company_id = #{companyId}, + area_id = #{areaId}, + lease_day = #{leaseDay}, + lease_status = #{leaseStatus}, + lease_num = #{leaseNum}, + start_time = #{startTime}, + publish_user = #{publishUser}, + end_time = #{endTime}, + person = #{person}, + person_phone = #{personPhone}, + description = #{description}, + update_by = #{updateBy}, + update_time = #{updateTime}, + order_user = #{orderUser}, + order_time = #{orderTime}, + + where id = #{id} + + + + update ma_hot_search + set lease_num = lease_num + 1, + update_time = now() + where lease_id = #{id} + + + + 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 lease_repair_record + + repair_change_price = #{repairChangePrice}, + scrap_change_price = #{scrapChangePrice}, + loss_change_price = #{lossChangePrice}, + change_price_user = #{changePriceUser}, + change_price_time = now() + + where order_id = #{orderId} and ma_id = #{maId} + + + + update lease_repair_record + + price_confirm_user = #{priceConfirmUser}, + update_time = now() + + where order_id = #{orderId} + + + + delete from ma_lease_info where id = #{id} + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml index b007a86..9298f0f 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml @@ -65,6 +65,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update ma_dev_info set device_count = device_count + #{num} where ma_id = #{maId} and is_active = 1 + + + UPDATE + ma_order_details + SET order_status = 6, + rent_over_user = #{priceConfirmUser}, + rent_over_time = now() + WHERE order_id = #{orderId} + + @@ -173,6 +183,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"