| | |
| | | package com.yuanchu.mom.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.support.ExcelTypeEnum; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.yuanchu.mom.Task.SyncOrder; |
| | | import com.yuanchu.mom.mapper.SaleMaterialMapper; |
| | | import com.yuanchu.mom.pojo.Sale; |
| | | import com.yuanchu.mom.mapper.SaleMapper; |
| | | import com.yuanchu.mom.pojo.SaleMaterial; |
| | | import com.yuanchu.mom.pojo.dto.ConsignmentDto1; |
| | | import com.yuanchu.mom.pojo.dto.ConsignmentDto2; |
| | | import com.yuanchu.mom.pojo.dto.SaleDto; |
| | | import com.yuanchu.mom.pojo.dto.SaleMaterialDto; |
| | | import com.yuanchu.mom.pojo.dto.*; |
| | | import com.yuanchu.mom.pojo.vo.SaleVo; |
| | | import com.yuanchu.mom.service.SaleMaterialService; |
| | | import com.yuanchu.mom.service.SaleService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.yuanchu.mom.utils.easyexcel.CustemHandler; |
| | | import com.yuanchu.mom.utils.easyexcel.EasyExcelUtils; |
| | | import com.yuanchu.mom.utils.easyexcel.LocalDateConverter; |
| | | import com.yuanchu.mom.utils.easyexcel.template.ExportSaleTemplate; |
| | | import com.yuanchu.mom.vo.Result; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.net.URLEncoder; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | SaleMapper saleMapper; |
| | | |
| | | @Resource |
| | | SaleMaterialService saleMaterialService; |
| | | |
| | | @Resource |
| | | SaleMaterialMapper saleMaterialMapper; |
| | | |
| | | //查询销售单列表 |
| | |
| | | Sale sale = new Sale(); |
| | | BeanUtils.copyProperties(saleDto, sale); |
| | | sale.setSaleman(saleman); |
| | | sale.setOrderType("手工订单"); |
| | | saleMapper.insert(sale); |
| | | //添加销售产品单 |
| | | List<SaleMaterialDto> saleMaterialDtoList = saleDto.getSaleMaterialList(); |
| | |
| | | //根据id批量删除 |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void delAllSale(List<Integer> ids) { |
| | | List<Sale> sales = saleMapper.selectBatchIds(ids); |
| | | for (Sale sale : sales) { |
| | | sale.setState(0); |
| | | saleMapper.updateById(sale); |
| | | List<SaleMaterial> saleMaterials = saleMaterialMapper.selectSaleDatil(sale.getId()); |
| | | for (SaleMaterial saleMaterial : saleMaterials) { |
| | | saleMaterial.setState(0); |
| | | saleMaterialMapper.updateById(saleMaterial); |
| | | } |
| | | } |
| | | public void delAllSale(String ids) { |
| | | //批量删除销售单 |
| | | saleMapper.delAllSale(ids); |
| | | //批量删除销售产品单 |
| | | saleMaterialMapper.delAllSale(ids); |
| | | } |
| | | |
| | | //根据销售单id修改信息 |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateSaleById(String saleman, Integer id, SaleVo saleVo) { |
| | | public String updateSaleById(String saleman, Integer id, SaleVo saleVo) { |
| | | //校验,同一个产品的规格型号不能相同 |
| | | List<SaleMaterialDto> saleMaterialList = saleVo.getSaleMaterialList(); |
| | | // 使用哈希集合来判断是否存在相同字段值组合 |
| | | Set<String> seen = new HashSet<>(); |
| | | for (SaleMaterialDto saleMaterial : saleMaterialList) { |
| | | String key = saleMaterial.getName() + "," + saleMaterial.getSpecifications(); |
| | | if (seen.contains(key)) { |
| | | return "同一个产品的规格型号不能相同"; |
| | | } else { |
| | | seen.add(key); |
| | | } |
| | | } |
| | | Sale sale = saleMapper.selectById(id); |
| | | sale.setSaleman(saleman); |
| | | BeanUtils.copyProperties(saleVo, sale); |
| | |
| | | BeanUtils.copyProperties(saleMaterialDto, saleMaterial); |
| | | saleMaterialMapper.updateById(saleMaterial); |
| | | } |
| | | return "修改成功!"; |
| | | } |
| | | |
| | | //审核 |
| | |
| | | .orderCode(orderNumber) |
| | | .customerCode(sale.getCode()) |
| | | .proname(sale.getProname()) |
| | | .adress(sale.getAdress()) |
| | | .username(sale.getUsername()) |
| | | .phone(sale.getPhone()) |
| | | .messages(dto2List) |
| | | .build(); |
| | | return consignmentDto1; |
| | | } |
| | | |
| | | //同步销售数据 |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String synchronization() { |
| | | //当天时间的凌晨4点开始同步 |
| | | String pattern = "yyyy-MM-dd HH:mm:ss"; |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); |
| | | String dateTime = LocalDateTime.now().with(LocalTime.of(4, 0, 0)).format(formatter); |
| | | //获取主销售数据 |
| | | List<Map<String, Object>> order = SyncOrder.getMainOrder(dateTime); |
| | | List<Sale> list = order.stream().map(orde -> { |
| | | Sale sale = new Sale(); |
| | | sale.setOrderNumber(orde.get("orderNo").toString());//订单编号 |
| | | sale.setCode(String.valueOf(orde.get("customerContractNumber")));//客户合同编号 |
| | | sale.setName(orde.get("projectName").toString());//工程名称 |
| | | sale.setProname(orde.get("customerName").toString());//客户名称 |
| | | sale.setOrderName(orde.get("createdName").toString());//下单人 |
| | | sale.setSaleman(orde.get("salesmanName").toString());//业务员 |
| | | sale.setDelTime(DateUtil.parseDate(orde.get("wantedDeliveryDate").toString()));//交货日期 |
| | | sale.setCreateTime(DateUtil.parseDate(orde.get("orderDate").toString()));//下单日期 |
| | | sale.setNote(String.valueOf(orde.get("comment")));//备注 |
| | | sale.setOrderId((Integer) orde.get("id")); //otc订单id |
| | | sale.setOrderType(orde.get("orderClassification").toString()); //订单类型 |
| | | return sale; |
| | | }).collect(Collectors.toList()); |
| | | //去重 |
| | | list.removeIf(sale -> ObjectUtils.isNotEmpty(saleMapper.selectOne(Wrappers.<Sale>query().eq("order_number", sale.getOrderNumber())))); |
| | | this.saveBatch(list); |
| | | for (Sale sale : list) { |
| | | List<Map<String, Object>> innerOrder = SyncOrder.getInnerOrder(dateTime, sale.getOrderNumber()); |
| | | List<SaleMaterial> saleMaterials = innerOrder.stream().map(inorder -> { |
| | | SaleMaterial saleMaterial = new SaleMaterial(); |
| | | saleMaterial.setName(inorder.get("productName").toString()); //产品名称 |
| | | saleMaterial.setSpecifications(inorder.get("specificationModel").toString()); //产品规格型号 |
| | | saleMaterial.setUnit(inorder.get("unit").toString()); //单位 |
| | | saleMaterial.setNumber((int) Double.parseDouble(inorder.get("quantity").toString())); //数量 |
| | | saleMaterial.setPrice(inorder.get("unitPriceInclTax").toString()); //单价 |
| | | saleMaterial.setSaleId(sale.getId()); //关联 销售单id |
| | | saleMaterial.setAdress(String.valueOf(inorder.get("shippingAddress"))); //收货地址 |
| | | saleMaterial.setUsername(String.valueOf(inorder.get("receivingContact"))); //联系人 |
| | | saleMaterial.setPhone(String.valueOf(inorder.get("receivingContactPhone"))); //手机号 |
| | | return saleMaterial; |
| | | }).collect(Collectors.toList()); |
| | | saleMaterialService.saveBatch(saleMaterials); |
| | | } |
| | | return "同步成功!"; |
| | | } |
| | | |
| | | |
| | | //下载附件 |
| | | @Override |
| | | public List<String> download(Integer id) { |
| | | Integer orderId = saleMapper.selectById(id).getOrderId(); |
| | | List<Map<String, Object>> attachment = SyncOrder.getAttachmentByOrderId(orderId); |
| | | List<String> list = new ArrayList<>(); |
| | | if (ObjectUtils.isEmpty(attachment)) { |
| | | list.add("该订单没有附件"); |
| | | return list; |
| | | } |
| | | for (Map<String, Object> attch : attachment) { |
| | | String path = attch.get("path").toString(); |
| | | list.add(path); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public void exportSale(ExportSaleDto dto, HttpServletResponse response) { |
| | | try{ |
| | | List<ExportSaleTemplate> exportSaleTemplates = saleMapper.selectSaleListByExport(dto.getOrderNumber(), dto.getName(), dto.getType(), dto.getDelTime()); |
| | | for (int i = 0; i < exportSaleTemplates.size(); i++) { |
| | | exportSaleTemplates.get(i).setId(i+1); |
| | | } |
| | | String fileName = String.valueOf(new StringBuilder() |
| | | .append("销售订单_") |
| | | .append(DateUtil.today()) |
| | | .append(ExcelTypeEnum.XLS.getValue())); |
| | | fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()); |
| | | response.setContentType("application/octet-stream"); |
| | | response.setHeader("Cache-Control", "no-cache"); |
| | | response.setHeader("Content-Disposition", "attachment;filename=" + fileName); |
| | | response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); |
| | | EasyExcel.write(response.getOutputStream()) |
| | | .head(ExportSaleTemplate.class) |
| | | .registerConverter(new LocalDateConverter()) |
| | | .autoCloseStream(true) |
| | | .excelType(ExcelTypeEnum.XLS) |
| | | .registerWriteHandler(new CustemHandler()) |
| | | .registerWriteHandler(EasyExcelUtils.getStyleStrategy()) |
| | | .sheet("Sheet1") |
| | | .doWrite(exportSaleTemplates); |
| | | }catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | response.getOutputStream().close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } |