From 20956b0f05f81ca47cf6c3e8f9b3b426e9cfd035 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期日, 24 九月 2023 21:54:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java | 233 ++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 184 insertions(+), 49 deletions(-)
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java b/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
index bffc773..516d62d 100644
--- a/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
+++ b/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
@@ -1,26 +1,40 @@
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;
/**
@@ -38,26 +52,31 @@
SaleMapper saleMapper;
@Resource
+ SaleMaterialService saleMaterialService;
+
+ @Resource
SaleMaterialMapper saleMaterialMapper;
//鏌ヨ閿�鍞崟鍒楄〃
@Override
public IPage<Map<String, Object>> selectSaleList(Page<Object> page, String orderNumber, String name, Integer type, String delTime) {
- return saleMapper.selectSaleList(page,orderNumber,name,type,delTime);
+ return saleMapper.selectSaleList(page, orderNumber, name, type, delTime);
}
//鏂板閿�鍞崟
@Override
- public String addSale(String saleman,SaleDto saleDto) {
+ @Transactional(rollbackFor = Exception.class)
+ public String addSale(String saleman, SaleDto saleDto) {
Sale sale = new Sale();
- BeanUtils.copyProperties(saleDto,sale);
+ BeanUtils.copyProperties(saleDto, sale);
sale.setSaleman(saleman);
+ sale.setOrderType("鎵嬪伐璁㈠崟");
saleMapper.insert(sale);
//娣诲姞閿�鍞骇鍝佸崟
List<SaleMaterialDto> saleMaterialDtoList = saleDto.getSaleMaterialList();
for (SaleMaterialDto saleMaterialDto : saleMaterialDtoList) {
SaleMaterial saleMaterial = new SaleMaterial();
- BeanUtils.copyProperties(saleMaterialDto,saleMaterial);
+ BeanUtils.copyProperties(saleMaterialDto, saleMaterial);
saleMaterial.setSaleId(sale.getId());
saleMaterialMapper.insert(saleMaterial);
}
@@ -69,7 +88,7 @@
public SaleVo selectSaleDatil(Integer id) {
SaleVo saleVo = new SaleVo();
Sale sale = saleMapper.selectById(id);
- BeanUtils.copyProperties(sale,saleVo);
+ BeanUtils.copyProperties(sale, saleVo);
List<SaleMaterial> saleMaterialList = saleMaterialMapper.selectSaleDatil(id);//閿�鍞崟id
List<SaleMaterialDto> saleMaterialDtoList = saleMaterialList.stream().map(saleMaterial -> {
SaleMaterialDto saleMaterialDto = new SaleMaterialDto();
@@ -82,6 +101,7 @@
//鏍规嵁閿�鍞崟id鍒犻櫎
@Override
+ @Transactional(rollbackFor = Exception.class)
public void delSale(Integer id) {
Sale sale = saleMapper.selectById(id);
sale.setState(0);
@@ -95,60 +115,76 @@
//鏍规嵁id鎵归噺鍒犻櫎
@Override
- 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);
- }
- }
+ @Transactional(rollbackFor = Exception.class)
+ public void delAllSale(String ids) {
+ //鎵归噺鍒犻櫎閿�鍞崟
+ saleMapper.delAllSale(ids);
+ //鎵归噺鍒犻櫎閿�鍞骇鍝佸崟
+ saleMaterialMapper.delAllSale(ids);
}
//鏍规嵁閿�鍞崟id淇敼淇℃伅
@Override
- public void updateSaleById(String saleman, Integer id, SaleVo saleVo) {
- Sale sale = saleMapper.selectById(id);
- sale.setSaleman(saleman);
- BeanUtils.copyProperties(saleVo,sale);
- //鏇存柊閿�鍞崟
- saleMapper.updateById(sale);
- List<SaleMaterial> saleMaterials = saleMaterialMapper.selectSaleDatil(id);
- for (SaleMaterial saleMaterial : saleMaterials) {
- List<SaleMaterialDto> saleMaterialDtos = saleVo.getSaleMaterialList();
- for (SaleMaterialDto saleMaterialDto : saleMaterialDtos) {
- BeanUtils.copyProperties(saleMaterialDto,saleMaterial);
- //鏇存柊閿�鍞骇鍝佸崟
- saleMaterialMapper.updateById(saleMaterial);
+ @Transactional(rollbackFor = Exception.class)
+ 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);
+ //鏇存柊閿�鍞崟
+ saleMapper.updateById(sale);
+ List<SaleMaterialDto> saleMaterialDtos = saleVo.getSaleMaterialList();
+ for (SaleMaterialDto saleMaterialDto : saleMaterialDtos) {
+ SaleMaterial saleMaterial = new SaleMaterial();
+ BeanUtils.copyProperties(saleMaterialDto, saleMaterial);
+ saleMaterialMapper.updateById(saleMaterial);
+ }
+ return "淇敼鎴愬姛!";
}
//瀹℃牳
@Override
- public void check(String checkname,Integer id,Integer type) {
+ @Transactional(rollbackFor = Exception.class)
+ public void check(String checkname, Integer id, Integer type) {
Sale sale = saleMapper.selectById(id);
sale.setType(type);
sale.setCheckname(checkname);
sale.setCheckTime(new Date());
- if (type==1) {
- //濡傛灉瀹℃牳閫氳繃
- sale.setBianzhiState(1);
- }else {
- //濡傛灉瀹℃牳涓嶉�氳繃
- sale.setBianzhiState(null);
- }
saleMapper.updateById(sale);
+ //瀹℃牳閫氳繃鐨勯攢鍞崟灏嗛攢鍞崟涓殑浜у搧鐨勭姸鎬佹敼涓哄緟缂栧埗0
+ List<SaleMaterial> saleMaterials = saleMaterialMapper.selectList(Wrappers.<SaleMaterial>query()
+ .eq("sale_id", id)
+ .eq("state", 1));
+ if (type == 1) {
+ for (SaleMaterial saleMaterial : saleMaterials) {
+ saleMaterial.setType(0);
+ saleMaterialMapper.updateById(saleMaterial);
+ }
+ }
}
//鏍规嵁璁㈠崟鍙锋煡璇㈤攢鍞俊鎭�
@Override
public ConsignmentDto1 selSale(String orderNumber) {
- Sale sale = saleMapper.selectOne(Wrappers.<Sale>query().eq("order_number", orderNumber));
- List<SaleMaterial> saleMaterials = saleMaterialMapper.selectList(Wrappers.<SaleMaterial>query().eq("sale_id", sale.getId()));
+ Sale sale = saleMapper.selectOne(Wrappers.<Sale>query()
+ .eq("order_number", orderNumber)
+ .eq("type", 1)
+ .eq("state", 1));
+ //鏌ヨ閿�鍞崟涓骇鍝佷俊鎭�
+ List<SaleMaterial> saleMaterials = saleMaterialMapper.selectList(Wrappers.<SaleMaterial>query()
+ .eq("sale_id", sale.getId())
+ .eq("state", 1));
List<ConsignmentDto2> dto2List = saleMaterials.stream().map(saleMaterial -> {
ConsignmentDto2 consignmentDto2 = new ConsignmentDto2();
BeanUtils.copyProperties(saleMaterial, consignmentDto2);
@@ -158,11 +194,110 @@
.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();
+ }
+ }
+ }
}
--
Gitblit v1.9.3