123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- 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<Fault> faultList = faultService.getByRepairId(repairId);
- String lastRepairId = repairService.getLastRepairId(repair);
- RepairRegisterVo repairRegisterVo = repairRegisterService.getVoByRepairId(repairId);
- RepairCheckAccount repairCheckAccount = repairCheckAccountService.getByRepairId(repairId);
- List<RepairRegisterVo> repairRegisterVoList = repairRegisterService.getVoListByRepairId(repairId);
- RepairInvoice repairInvoice = repairInvoiceService.getByRepairId(repairId);
- if(repairInvoice !=null){
- detailVo.setRepairInvoice(repairInvoice);
- detailVo.setApplyInvoice(1);
- }
- List<PriceList> 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<RepairLogVo> 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 +="<br/>备注:"+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<Integer> delStatus = Arrays.asList(41,82,90,91);
- List<RepairLogVo> 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<RepairerVo> 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> priceList = repairDetailVo.getPriceList();
- BigDecimal totalAmount = BigDecimal.ZERO;
- String priceData = "";
- List<PriceListExcelVo> 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<RepairLog> 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;
- }
- }
|