| src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/common/utils/DateUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/dto/SalesLedgerImportDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/basic/ProductModelMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/static/销售台账导入模板.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -7,6 +7,9 @@ import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * ã请填ååè½åç§°ãMapperæ¥å£ @@ -22,4 +25,5 @@ ProductModel selectLatestRecord(); List<Map<String, Object>> getProductAndModelList(); } src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -43,6 +43,15 @@ return new Date(); } public static LocalDate toLocalDate(Date date){ if(date == null) return LocalDate.now(); // 2. æå®åºå®æ¶åºè½¬æ¢ï¼å¦ä¸å «åºUTC+8ãUTCé¶æ¶åºï¼ return date.toInstant() .atZone(ZoneId.of("Asia/Shanghai")) // ä¸å «åºï¼å京/䏿µ·æ¶åºï¼ // .atZone(ZoneId.of("UTC")) // å¯éï¼UTCé¶æ¶åº .toLocalDate(); } /** * è·åå½åæ¥æ, é»è®¤æ ¼å¼ä¸ºyyyy-MM-dd * src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -26,13 +26,19 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -49,6 +55,7 @@ @RequestMapping("/sales/ledger") @AllArgsConstructor @Api(tags = "éå®å°è´¦") @Slf4j public class SalesLedgerController extends BaseController { private ISalesLedgerService salesLedgerService; @@ -76,6 +83,44 @@ return salesLedgerService.importData(file); } @ApiOperation("导åºéå®å°è´¦æ¨¡æ¿") @PostMapping("/exportTemplate") public void exportTemplate(HttpServletResponse response) { // 1. æ¨¡æ¿æä»¶å¨resources/staticä¸çè·¯å¾ String templatePath = "static/éå®å°è´¦å¯¼å ¥æ¨¡æ¿.xlsx"; // 2. è·åæ¨¡æ¿æä»¶çè¾å ¥æµ try (InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(templatePath)) { if (inputStream == null) { throw new FileNotFoundException("æ¨¡æ¿æä»¶ä¸åå¨ï¼" + templatePath); } // 3. 设置ååºå¤´ï¼è§¦åæµè§å¨ä¸è½½ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("éå®å°è´¦å¯¼å ¥æ¨¡æ¿.xlsx", "utf-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName); // 4. å°æ¨¡æ¿æä»¶åå ¥ååºè¾åºæµ try (OutputStream outputStream = response.getOutputStream()) { byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } outputStream.flush(); } } catch (IOException e) { log.error("导åºéå®å°è´¦æ¨¡æ¿å¤±è´¥", e); // è¥æ¨¡æ¿æä»¶è¯»å失败ï¼è¿åé误æç¤º try { response.getWriter().write("模æ¿å¯¼åºå¤±è´¥ï¼" + e.getMessage()); } catch (IOException ex) { log.error("ååºè¾åºé误", ex); } } } /** * æ¥è¯¢éå®å°è´¦å表 */ src/main/java/com/ruoyi/sales/dto/SalesLedgerImportDto.java
@@ -31,6 +31,8 @@ private String salesman; @Excel(name = "客æ·åç§°") private String customerName; @Excel(name = "项ç®åç§°") private String projectName; @Excel(name = "å½å ¥äºº") private String entryPerson; @Excel(name = "夿³¨") @@ -44,5 +46,9 @@ @Excel(name = "ååéé¢") private BigDecimal contractAmount; @ApiModelProperty(value = "仿¬¾æ¹å¼") @Excel(name = "仿¬¾æ¹å¼") private String paymentMethod; } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -19,6 +19,7 @@ import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -356,19 +357,21 @@ if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("éå®äº§åæ°æ®ä¸ºç©ºï¼"); // å®¢æ·æ°æ® List<Customer> customers = customerMapper.selectList(new LambdaQueryWrapper<Customer>().in(Customer::getCustomerName, salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getCustomerName).toArray(String[]::new))); // è§æ ¼åå·æ°æ® List<ProductModel> productModels = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>().in(ProductModel::getModel, salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getSpecificationModel).toArray(String[]::new))); // 产åå¤§ç±»æ°æ® List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>().in(Product::getProductName, salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getProductCategory).toArray(String[]::new))); salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getCustomerName).collect(Collectors.toList()))); // // è§æ ¼åå·æ°æ® // List<ProductModel> productModels = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>().in(ProductModel::getModel, // salesLedgerProductImportDtoList.stream().map(SalesLedgerImportDto::getSpecificationModel).collect(Collectors.toList()))); // // 产åå¤§ç±»æ°æ® // List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>().in(Product::getProductName, // salesLedgerProductImportDtoList.stream().map(SalesLedgerImportDto::getProductCategory).collect(Collectors.toList()))); List<Map<String,Object>> list = productModelMapper.getProductAndModelList(); // å½å ¥äººæ°æ® List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName, salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getEntryPerson).toArray(String[]::new))); salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getEntryPerson).collect(Collectors.toList()))); for (SalesLedgerImportDto salesLedgerImportDto : salesLedgerImportDtoList) { SalesLedger salesLedger = new SalesLedger(); BeanUtils.copyProperties(salesLedgerImportDto, salesLedger); salesLedger.setExecutionDate(DateUtils.toLocalDate(salesLedgerImportDto.getExecutionDate())); // éè¿å®¢æ·åç§°æ¥è¯¢å®¢æ·IDï¼å®¢æ·ååå· salesLedger.setCustomerId(customers.stream() .filter(customer -> customer.getCustomerName().equals(salesLedger.getCustomerName())) @@ -404,25 +407,29 @@ salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP)); salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity()); salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxExclusiveTotalPrice()); salesLedgerProduct.setProductId(productList.stream() .filter(product -> product.getProductName().equals(salesLedgerProduct.getProductCategory())) list.stream() .filter(map -> map.get("productName").equals(salesLedgerProduct.getProductCategory()) && map.get("model").equals(salesLedgerProduct.getSpecificationModel())) .findFirst() .map(Product::getId) .orElse(null)); salesLedgerProduct.setProductModelId(productModels.stream() .filter(productModel -> productModel.getModel().equals(salesLedgerProduct.getSpecificationModel())) .findFirst() .map(ProductModel::getId) .orElse(null)); .ifPresent(map -> { salesLedgerProduct.setProductModelId(Long.parseLong(map.get("modelId").toString())); salesLedgerProduct.setProductId(Long.parseLong(map.get("id").toString())); }); // salesLedgerProduct.setProductId(productList.stream() // .filter(product -> product.getProductName().equals(salesLedgerProduct.getProductCategory())) // .findFirst() // .map(Product::getId) // .orElse(null)); // salesLedgerProduct.setProductModelId(productModels.stream() // .filter(productModel -> productModel.getModel().equals(salesLedgerProduct.getSpecificationModel())) // .findFirst() // .map(ProductModel::getId) // .orElse(null)); salesLedgerProduct.setRegister(loginUser.getNickName()); salesLedgerProduct.setRegisterDate(LocalDateTime.now()); salesLedgerProduct.setApproveStatus(0); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice()); salesLedgerProductMapper.insert(salesLedgerProduct); } } return AjaxResult.success("å¯¼å ¥æå"); src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -97,5 +97,14 @@ ORDER BY pm.id DESC </select> <select id="getProductAndModelList" resultType="java.util.Map"> select p.id as id, pm.id as modelId, p.product_name as productName , pm.model as model from product_model pm left join product p on p.id = pm.product_id order by p.id,pm.id desc </select> </mapper> src/main/resources/static/ÏúÊŲ̂Õ˵¼ÈëÄ£°å.xlsxBinary files differ