package com.fdkankan.sale.service.impl; import com.fdkankan.sale.common.*; import com.fdkankan.sale.entity.OrderReceiving; import com.alibaba.fastjson.JSONArray; import com.fdkankan.sale.entity.CustomerAddress; import com.fdkankan.sale.entity.Customer; import com.fdkankan.sale.util.DateUtil; import com.fdkankan.sale.vo.response.RepairRegisterVo; import com.fdkankan.sale.entity.RepairTest; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.common.util.SecurityUtil; import com.fdkankan.sale.entity.*; import com.fdkankan.sale.service.*; import com.fdkankan.sale.util.OrderListVo; import com.fdkankan.sale.util.StatusUtil; import com.fdkankan.sale.vo.request.RepairInfoListParam; import com.fdkankan.sale.vo.response.*; import com.fdkankan.sale.exception.BusinessException; import org.apache.commons.lang3.StringUtils; import org.apache.commons.math3.optim.nonlinear.scalar.gradient.NonLinearConjugateGradientOptimizer; import org.omg.CORBA.INTERNAL; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.*; @Service public class RepairInfoService { @Autowired IRepairService repairService; @Autowired ICustomerService customerService; @Autowired ICustomerAddressService customerAddressService; @Autowired IOrderReceivingService orderReceivingService; @Autowired IRepairPayService repairPayService; @Autowired RepairPersonnelService repairPersonnelService; @Autowired IRepairLogService repairLogService; @Autowired IPriceListService priceListService; @Autowired IRepairRegisterService repairRegisterService; @Autowired IRepairTestService repairTestService; @Autowired IRepairCommentService repairCommentService; @Autowired IFaultService faultService; @Autowired IRepairInvoiceService repairInvoiceService; @Autowired IRepairRegisterLogService repairRegisterLogService; @Autowired ISysRoleService roleService; @Autowired ISysUserService sysUserService; @Autowired IRepairCheckAccountService repairCheckAccountService; public RepairDetailVo getDetailsByRepairId(String repairId,Boolean allPrice) { Repair repair = repairService.getById(repairId); if(repair == null){ throw new BusinessException( ResultCode.ORDER_PAY_NOT_EXITS); } RepairDetailVo detailVo = new RepairDetailVo(); Customer customer = customerService.getByRepairId(repairId); CustomerAddress customerAddress = customerAddressService.getByRepairId(repairId); RepairPay repairPay = repairPayService.getByRepairId(repairId,1); OrderReceivingVo receiving = orderReceivingService.getVoByRepairId(repairId); RepairTestVo repairTestVo = repairTestService.getPassVoByRepairId(repairId); RepairComment comment = repairCommentService.getByRepairId(repairId); List faultList = faultService.getByRepairId(repairId); String lastRepairId = repairService.getLastRepairId(repair); RepairRegisterVo repairRegisterVo = repairRegisterService.getVoByRepairId(repairId); RepairCheckAccount repairCheckAccount = repairCheckAccountService.getByRepairId(repairId); List repairRegisterVoList = repairRegisterService.getVoListByRepairId(repairId); RepairInvoice repairInvoice = repairInvoiceService.getByRepairId(repairId); if(repairInvoice !=null){ detailVo.setRepairInvoice(repairInvoice); detailVo.setApplyInvoice(1); } List priceLists = new ArrayList<>(); if(allPrice){ priceLists = priceListService.getByRepairId(repairId); }else { if(repair.getCancelStatus() == 1){ priceLists = priceListService.getCheckAmountByRepairId(repairId); } if(repair.getCancelStatus() == 0){ priceLists = priceListService.getByRepairId(repairId); } } BigDecimal payAmount = BigDecimal.ZERO; for (PriceList priceList : priceLists) { BigDecimal price = priceList.getDiscount() == 1 ? priceList.getPriceDiscount() : priceList.getPrice(); payAmount = payAmount.add(price.multiply(new BigDecimal(priceList.getCount()))); } detailVo.setPayAmount(payAmount); detailVo.setPriceList(priceLists); detailVo.setCustomer(customer); detailVo.setCustomerAddress(customerAddress); detailVo.setRepairerVo(repair); detailVo.setRepairPay(repairPay); detailVo.setOrderReceivingVo(receiving); detailVo.setRepairRegisterVo(repairRegisterVo); detailVo.setRepairRegisterVoList(repairRegisterVoList); detailVo.setRepairTestVo(repairTestVo); detailVo.setRepairComment(comment); detailVo.setFaultList(faultList); detailVo.setLastRepairId(lastRepairId); detailVo.setRepairCheckAccount(repairCheckAccount); return detailVo; } /** * * * status 0待接单,10待检测,20待报价,30待确认,40已取消,50待备料,60维修中,70待测试, * * * 80待支付(已完结),90待回收,100待发货,110已发货 */ public Object getProcessByRepairId(String repairId,String type) { List repairLogList = repairLogService.getVoByRepairId(repairId); for (RepairLogVo repairLogVo : repairLogList) { switch (repairLogVo.getRepairStatus()){ case 0 : //报修 Customer customer = customerService.getByRepairId(repairLogVo.getRepairId()); repairLogVo.setCustomer(customer); break; case 10 : //接单 OrderReceiving orderReceiving = orderReceivingService.getByRepairId(repairId); repairLogVo.setOrderReceiving(orderReceiving); if(orderReceiving != null){ repairLogVo.setImagesInfo(orderReceiving.getOrderFaultImg()); } break; case 20 : //维修检测 case 50: RepairRegisterVo repairRegisterVo = repairRegisterService.getVoByRegisterLogId(repairLogVo.getRegisterLogId()); repairLogVo.setRepairRegisterVo(repairRegisterVo); if(repairRegisterVo != null){ repairLogVo.setImagesInfo(repairRegisterVo.getCheckImg()); } case 60 : case 70: case 80: //测试通过与测试不通过 if(repairLogVo.getTestId() != null){ RepairTest repairTest = repairTestService.getById(repairLogVo.getTestId()); if(repairTest != null){ repairLogVo.setRepairTest(repairTest); repairLogVo.setImagesInfo(repairTest.getResultImg()); } } break; case 82: RepairPay repairPay = repairPayService.getByRepairId(repairId,1); if(repairPay != null){ String remark = "支付方式:"+StatusUtil.getPayTypeStr(repairPay.getPayType()); if(StringUtils.isNotBlank(repairPay.getRemark())){ remark +="
备注:"+repairPay.getRemark(); } repairLogVo.setRemark(remark); repairLogVo.setImagesInfo(repairPay.getPayImg()); } break; case 90: RepairCheckAccount repairCheckAccount = repairCheckAccountService.getByRepairId(repairId); if(repairCheckAccount != null){ repairLogVo.setImagesInfo(repairCheckAccount.getCheckAccountImg()); if(StringUtils.isNotBlank(repairCheckAccount.getRemark())){ repairLogVo.setRemark("备注:"+repairCheckAccount.getRemark()); } } break; case 110 : //维修完毕 CustomerAddress customerAddress = customerAddressService.getByRepairId(repairId); repairLogVo.setCustomerAddress(customerAddress); repairLogVo.setImagesInfo(customerAddress.getSendTrackingImg()); break; } setTitle(repairLogVo,1); } List delStatus = Arrays.asList(41,82,90,91); List repairLogListVo = new ArrayList<>(); if(repairLogList.size() >0){ RepairLogVo repairLogVo = repairLogList.get(0); RepairLogVo logVo = getNextStepVo(repairLogVo); if(logVo!= null){ if("h5".equals(type) && delStatus.contains(logVo.getRepairStatus())){ Integer oldStatus = null; switch (repairLogVo.getRepairStatus()){ case 41 : repairLogVo.setRepairStatus(50); oldStatus = 41;break; case 90 : repairLogVo.setRepairStatus(100); oldStatus = 90;break; case 82 : repairLogVo.setRepairStatus(100);oldStatus = 82;break; case 91 : repairLogVo.setRepairStatus(100);oldStatus = 91;break; } logVo = getNextStepVo(repairLogVo); if(oldStatus != null){ repairLogVo.setRepairStatus(oldStatus); } } repairLogListVo.add(logVo); } for (RepairLogVo vo : repairLogList) { if(vo.getTitle() == null){ continue; } if(vo.getOldRepairStatus()!=null && vo.getOldRepairStatus() == 30 && vo.getRepairStatus()!=null && vo.getRepairStatus() == 60){ //无备件,跳过备件流程显示 continue; } if("备件回收".equals(vo.getTitle())){ continue; } if("h5".equals(type) && "收款核账".equals(vo.getTitle())){ continue; } if("h5".equals(type) && "发件准备".equals(vo.getTitle())){ continue; } repairLogListVo.add(vo); } } return repairLogListVo; } public RepairLogVo getNextStepVo(RepairLogVo repairLogVo) { RepairLogVo log = new RepairLogVo(); log.setRepairId(repairLogVo.getRepairId()); log.setRepairStatus( repairLogVo.getRepairStatus() ); if(log.getRepairStatus() >=RepairStatusEnum.OVER_SHIPPED.status()){ return null; } return setTitle(log,0); } private RepairLogVo setTitle(RepairLogVo log,Integer type) { Integer status = null; String subTitle = null; String title = null; String role = "1"; if(type == 0){ status = log.getRepairStatus(); subTitle = RepairStatusProcessComing.getByStatus(status).getSubTitle(); title = RepairStatusProcessComing.getByStatus(status).getTitle(); role = RepairStatusProcessComing.getByStatus(status).getRole(); } if(type == 1){ status = log.getRepairStatus(); if(log.getOldRepairStatus() !=null){ if(log.getOldRepairStatus() == 10 && log.getRepairStatus() == 50){ //保内维修,跳过报价,确认 status = 20; } if(log.getOldRepairStatus() == 10 && log.getRepairStatus() == 60){ //保内维修,无备件跳过 status = 20; } if(log.getOldRepairStatus() == 70 && log.getRepairStatus() == 90){ //保内维修,跳过支付 status = 80; } if(log.getOldRepairStatus() == 70 && log.getRepairStatus() == 90){ //保内维修,跳过支付 status = 80; } if(log.getOldRepairStatus() == 70 && log.getRepairStatus() == 60){ //测试不通过 status = 81; } if(log.getOldRepairStatus() == 40 && log.getRepairStatus() == 100){ //取消维修支付 status = 90; } if(log.getOldRepairStatus() == 70 && log.getRepairStatus() == 100){ //取消维修支付 status = 80; } if(log.getOldRepairStatus() == 30 && log.getRepairStatus() == 100){ //取消维修支付 status = 40; } if(log.getOldRepairStatus() == 60 && log.getRepairStatus() == 50){ //维修中添加备件 status = 51; } if(log.getOldRepairStatus() == 60 && log.getRepairStatus() == 20){ //维修中添加备件 status = 51; } if(log.getOldRepairStatus() == 30 && log.getRepairStatus() == 50){ //维修中添加备件 status = 41; } if(log.getOldRepairStatus() == 20 && log.getRepairStatus() == 50){ //维修中添加备件 status = 30; } if(log.getOldRepairStatus() == 30 && log.getRepairStatus() == 91){ //维修中添加备件 status = 40; } if(log.getOldRepairStatus() == 20 && log.getRepairStatus() == 60){ //维修中添加备件 return null; } if(log.getRepairStatus() == 82 ){ status = 90; } if(log.getOldRepairStatus() == 82 ){ status = 82; } } subTitle = RepairStatusProcessIng.getByStatus(status).getSubTitle(); title = RepairStatusProcessIng.getByStatus(status).getTitle(); //role = RepairStatusProcessIng.getByStatus(status).getRole(); } if(StringUtils.isNotBlank(role)){ OrderReceiving orderReceiving = orderReceivingService.getByRepairId(log.getRepairId()); Long sysUserId = null; switch (role){ case "sale" : sysUserId = orderReceiving.getSysUserId();break; case "repairMan" : sysUserId = orderReceiving.getRepairManId();break; case "repairSupply" : sysUserId = orderReceiving.getSupplyAdminId();break; case "tester" : sysUserId = orderReceiving.getTesterId();break; default: sysUserId = log.getSysUserId(); } SysUser sysUser = sysUserService.getById(sysUserId); if(sysUser != null){ log.setSysUserId(sysUserId); log.setSysUserName(sysUser.getUserName()); subTitle = subTitle.replace("{userName}",sysUser.getNickName()); log.setSysUserName(sysUser.getNickName()); } } log.setSubTitle(subTitle); log.setTitle(title); return log; } public Object pageList(RepairInfoListParam param) { Page page = repairService.pageInfoList(param); return PageInfo.PageInfo(page); } public OrderListVo getExportVo(String repairId,Boolean allPrice) { RepairDetailVo repairDetailVo = this.getDetailsByRepairId(repairId,allPrice); OrderListVo vo = new OrderListVo(); vo.setCompanyName(repairDetailVo.getCustomer().getCompanyName()); vo.setCustomerName(repairDetailVo.getCustomer().getCustomerName()); vo.setCustomerPhone(repairDetailVo.getCustomer().getPhone()); vo.setCustomerAddress(repairDetailVo.getCustomerAddress().getGetAddress()); vo.setRepairId(repairDetailVo.getRepairerVo().getRepairId()); vo.setCameraName(StatusUtil.getCameraName(repairDetailVo.getRepairerVo().getCameraType())); vo.setCameraSnCode(repairDetailVo.getRepairerVo().getCameraSnCode()); vo.setSendDate(repairDetailVo.getRepairerVo().getCreateTime()); vo.setFaultMsg(repairDetailVo.getRepairerVo().getFaultMsg()); vo.setWarrantyType(StatusUtil.getWarrantyType(repairDetailVo.getRepairerVo().getWarrantyType())); vo.setOrderFaultMsg(repairDetailVo.getOrderReceivingVo().getOrderFaultMsg()); vo.setSaleName(repairDetailVo.getOrderReceivingVo().getSysUserName()); vo.setSaleDate(repairDetailVo.getOrderReceivingVo().getCreateTime()); vo.setWarrantyExpirationDate(repairDetailVo.getRepairerVo().getWarrantyDate()); vo.setAnnex(repairDetailVo.getOrderReceivingVo().getAnnex()); vo.setExportImg(repairDetailVo.getRepairRegisterVo().getCheckImg()); vo.setRepairMan(repairDetailVo.getRepairRegisterVo().getSysUserName()); vo.setRepairOverTime(repairDetailVo.getRepairRegisterVo().getOverTime()); vo.setRepairRemark(repairDetailVo.getRepairRegisterVo().getRemark()); vo.setCheckDate(repairDetailVo.getRepairRegisterVo().getCreateTime()); vo.setCheckResult(repairDetailVo.getRepairRegisterVo().getCheckResult()); vo.setLastRepairId(repairDetailVo.getLastRepairId()); String warrantyDate = repairDetailVo.getRepairerVo().getWarrantyDate(); if(StringUtils.isNotBlank(warrantyDate)){ Date dateByStr = DateUtil.getDateByStr(warrantyDate); Date date = DateUtil.dateAddOneYear( DateUtil.dateAddOne(dateByStr,-7), -1); vo.setBuyDate(DateUtil.getDate(date)); } List priceList = repairDetailVo.getPriceList(); BigDecimal totalAmount = BigDecimal.ZERO; String priceData = ""; List excelVos = new ArrayList<>(); int i = 0; for (PriceList list : priceList) { i ++; PriceListExcelVo excelVo = new PriceListExcelVo(); excelVo.setSort(i); BeanUtils.copyProperties(list,excelVo); if(list.getDiscount() == 0){ excelVo.setPrice(list.getPrice()); } if(list.getDiscount() == 1){ excelVo.setPrice(list.getPriceDiscount()); } excelVo.setAmount(excelVo.getPrice().multiply(new BigDecimal(list.getCount()))); excelVos.add(excelVo); totalAmount = totalAmount.add(excelVo.getAmount()); priceData = list.getCreateTime(); } if(repairDetailVo.getRepairerVo().getWarrantyType() == 0 || repairDetailVo.getRepairerVo().getWarrantyType() == 3){ PriceListExcelVo excelVo = new PriceListExcelVo(); String warrantyType = StatusUtil.getWarrantyType(repairDetailVo.getRepairerVo().getWarrantyType()); excelVo.setName(warrantyType); excelVo.setSort(excelVos.size() + 1); excelVo.setAmount(totalAmount.negate()); excelVos.add(excelVo); totalAmount = BigDecimal.ZERO; } vo.setPriceListExcelVos(excelVos); vo.setTotalCount(totalAmount.compareTo(BigDecimal.ZERO) <=0 ?BigDecimal.ZERO:totalAmount); vo.setPriceListDate(priceData); String priceData2 = ""; List repairLogList = repairLogService.getByRepairIdAndStatus(repairId, 50); for (RepairLog repairLog : repairLogList) { priceData2 = repairLog.getCreateTime(); } vo.setConfirmPriceListDate(priceData2); return vo; } public Integer getHaveButton(RepairDetailVo detailVo, Integer status, SysUser user) { SysRole role = null; switch (status){ case 0: return 1; case 10 : case 60 : return detailVo.getOrderReceivingVo().getRepairManId().equals(user.getId()) ? 1 : 0; case 20 : case 30 : case 40 : case 41 : role = roleService.getById(user.getRoleId()); if(role != null && "6".equals(role.getRoleType())){ return 1; } case 80 : role = roleService.getById(user.getRoleId()); if(role != null && "7".equals(role.getRoleType())){ return 1; } case 82 : role = roleService.getById(user.getRoleId()); if(role != null && "7".equals(role.getRoleType())){ return 1; } case 100 : return detailVo.getOrderReceivingVo().getSysUserId().equals(user.getId()) ? 1 : 0; case 50 : case 90 : case 91 : return detailVo.getOrderReceivingVo().getSupplyAdminId().equals(user.getId()) ? 1 : 0; case 70 : return detailVo.getOrderReceivingVo().getTesterId().equals(user.getId()) ? 1 : 0; } return 0; } }