From e6eb127b2ef4f297b093dcd9a5b47be457f67043 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 29 一月 2026 14:29:05 +0800
Subject: [PATCH] feat(purchase): 碳立方对接

---
 main-business/src/main/java/com/ruoyi/business/mapper/CarbonCubesMapper.java            |    9 ++
 main-business/src/main/java/com/ruoyi/business/service/CarbonCubesService.java          |    9 ++
 main-business/src/main/java/com/ruoyi/business/entity/CarbonCubes.java                  |   46 +++++++++++
 main-business/src/main/java/com/ruoyi/business/service/impl/CarbonCubesServiceImpl.java |   55 +++++++++++++
 main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java                  |    2 
 ruoyi-system/src/main/java/com/ruoyi/basic/service/impl/ProvinceServiceImpl.java        |   77 ++++++++++++++----
 main-business/src/main/java/com/ruoyi/business/controller/CarbonCubesController.java    |   34 ++++++++
 7 files changed, 214 insertions(+), 18 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/controller/CarbonCubesController.java b/main-business/src/main/java/com/ruoyi/business/controller/CarbonCubesController.java
new file mode 100644
index 0000000..64c8796
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/controller/CarbonCubesController.java
@@ -0,0 +1,34 @@
+package com.ruoyi.business.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.business.entity.CarbonCubes;
+import com.ruoyi.business.service.CarbonCubesService;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.core.domain.R;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/carboncubes")
+public class CarbonCubesController {
+    private CarbonCubesService carbonCubesService;
+
+
+    @PostMapping("/addOrUpdate")
+    @Anonymous
+    public R addCarbonCubes(@RequestBody CarbonCubes carbonCubes) {
+        return carbonCubesService.addCarbonCubes(carbonCubes);
+    }
+
+    @PostMapping("/delete")
+    @Anonymous
+    public R deleteCarbonCubes(@RequestBody CarbonCubes carbonCubes) {
+         return carbonCubesService.remove(new QueryWrapper<CarbonCubes>()
+                 .lambda().eq(CarbonCubes::getBillNumber,carbonCubes.getBillNumber()))? R.ok() : R.fail();
+    }
+}
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
index a37dcb1..cbe5eca 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
@@ -11,4 +11,6 @@
     private String coal;
 
     private List<Long> exportIds;//瀵煎嚭閫変腑鐨刬d
+
+    private Long stockId;
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/CarbonCubes.java b/main-business/src/main/java/com/ruoyi/business/entity/CarbonCubes.java
new file mode 100644
index 0000000..03606fe
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/entity/CarbonCubes.java
@@ -0,0 +1,46 @@
+package com.ruoyi.business.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Data
+public class CarbonCubes {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    //鍟嗗搧
+    private String coal;
+
+    private Long coalId;
+
+    // 璁㈠崟绫诲瀷
+    private String orderType;
+
+    // 鍙戣揣鍚嶇Оor鏀惰揣鍚嶇О
+    private String supplierName;
+
+    private String customerName;
+
+    // 鏁伴噺
+    private BigDecimal number;
+
+    //鍚◣鍗曚环
+    private BigDecimal priceIncludingTax;
+
+    //鍙戣揣/鏀惰揣纾呭崟缂栧彿
+    private String billNumber;
+
+    private String createUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate createTime;
+
+
+}
diff --git a/main-business/src/main/java/com/ruoyi/business/mapper/CarbonCubesMapper.java b/main-business/src/main/java/com/ruoyi/business/mapper/CarbonCubesMapper.java
new file mode 100644
index 0000000..77a5a9e
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/mapper/CarbonCubesMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.business.entity.CarbonCubes;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CarbonCubesMapper extends BaseMapper<CarbonCubes> {
+}
diff --git a/main-business/src/main/java/com/ruoyi/business/service/CarbonCubesService.java b/main-business/src/main/java/com/ruoyi/business/service/CarbonCubesService.java
new file mode 100644
index 0000000..1bf529d
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/service/CarbonCubesService.java
@@ -0,0 +1,9 @@
+package com.ruoyi.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.business.entity.CarbonCubes;
+import com.ruoyi.common.core.domain.R;
+
+public interface CarbonCubesService extends IService<CarbonCubes> {
+    R addCarbonCubes(CarbonCubes carbonCubes);
+}
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/CarbonCubesServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/CarbonCubesServiceImpl.java
new file mode 100644
index 0000000..dd61580
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/CarbonCubesServiceImpl.java
@@ -0,0 +1,55 @@
+package com.ruoyi.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.entity.CoalInfo;
+import com.ruoyi.basic.mapper.CoalInfoMapper;
+import com.ruoyi.business.entity.CarbonCubes;
+import com.ruoyi.business.entity.PurchaseRegistration;
+import com.ruoyi.business.mapper.CarbonCubesMapper;
+import com.ruoyi.business.service.CarbonCubesService;
+import com.ruoyi.common.core.domain.R;
+import lombok.RequiredArgsConstructor;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+
+@Service
+@RequiredArgsConstructor
+public class CarbonCubesServiceImpl extends ServiceImpl<CarbonCubesMapper, CarbonCubes> implements CarbonCubesService {
+    @Autowired
+    private final CoalInfoMapper coalInfoMapper;
+
+
+
+    @Override
+    public R addCarbonCubes(CarbonCubes carbonCubes) {
+        CoalInfo oldCoalInfo = coalInfoMapper.selectOne(new QueryWrapper<CoalInfo>().lambda().eq(CoalInfo::getCoal, carbonCubes.getCoal()));
+        CoalInfo coalInfo = new CoalInfo();
+        if (ObjectUtils.isEmpty(oldCoalInfo)) {
+            //鏂板鐓ょ淇℃伅
+            coalInfo.setCoal(carbonCubes.getCoal());
+            coalInfo.setMaintainerId(1L);
+            coalInfo.setMaintenanceDate(LocalDate.now());
+            coalInfoMapper.insert(coalInfo);
+        }else {
+            coalInfo = oldCoalInfo;
+        }
+        carbonCubes.setCreateTime(LocalDate.now());
+        carbonCubes.setCoalId(coalInfo.getId());
+        CarbonCubes one = this.getOne(new QueryWrapper<CarbonCubes>().lambda()
+                .eq(CarbonCubes::getBillNumber, carbonCubes.getBillNumber()));
+        if (ObjectUtils.isEmpty(one)) {
+            // 鏂板
+            this.save(carbonCubes);
+        }else {
+            // 淇敼
+            this.update(carbonCubes, new QueryWrapper<CarbonCubes>().lambda()
+                    .eq(CarbonCubes::getBillNumber, carbonCubes.getBillNumber()));
+        }
+        return R.ok();
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/basic/service/impl/ProvinceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/basic/service/impl/ProvinceServiceImpl.java
index 0fb305b..9a9aeb8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/basic/service/impl/ProvinceServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/basic/service/impl/ProvinceServiceImpl.java
@@ -16,6 +16,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -41,26 +43,64 @@
     @Override
     public List<TreeSelectOption> getAreaOptions() {
         List<TreeSelectOption> res = new ArrayList<>();
-        List<Province> list = provinceMapper.selectList(null);
-        for (Province province : list) {
-            // 鏌ヨ鐪佷笅闈㈢殑甯�
-            List<City> cityList = cityMapper.selectList(new LambdaQueryWrapper<City>().eq(City::getProvinceId, province.getId()));
+
+        // 鎵归噺鏌ヨ鎵�鏈夌渷浠�
+        List<Province> provinces = provinceMapper.selectList(null);
+        if (provinces.isEmpty()) {
+            return res;
+        }
+
+        // 鑾峰彇鎵�鏈夌渷浠絀D鐢ㄤ簬鎵归噺鏌ヨ鍩庡競
+        List<Long> provinceIds = provinces.stream()
+                .map(Province::getId)
+                .collect(Collectors.toList());
+
+        // 鎵归噺鏌ヨ鎵�鏈夊煄甯�
+        List<City> allCities = cityMapper.selectList(
+                new LambdaQueryWrapper<City>().in(City::getProvinceId, provinceIds));
+
+        // 灏嗗煄甯傛寜鐪佷唤ID鍒嗙粍
+        Map<Long, List<City>> cityMap = allCities.stream()
+                .collect(Collectors.groupingBy(City::getProvinceId));
+
+        // 鑾峰彇鎵�鏈夊煄甯侷D鐢ㄤ簬鎵归噺鏌ヨ鍖哄煙
+        List<Long> cityIds = allCities.stream()
+                .map(City::getId)
+                .collect(Collectors.toList());
+
+        // 鎵归噺鏌ヨ鎵�鏈夊尯鍩�
+        List<District> allDistricts = districtMapper.selectList(
+                new LambdaQueryWrapper<District>().in(District::getCityId, cityIds));
+
+        // 灏嗗尯鍩熸寜鍩庡競ID鍒嗙粍
+        Map<Long, List<District>> districtMap = allDistricts.stream()
+                .collect(Collectors.groupingBy(District::getCityId));
+
+        // 鏋勫缓鏍戝舰缁撴瀯
+        for (Province province : provinces) {
             List<TreeSelectOption> cities = new ArrayList<>();
-            for (City city : cityList) {
-                // 鏌ヨ甯備笅闈㈢殑鍖�
-                List<District> districtList = districtMapper.selectList(new LambdaQueryWrapper<District>().eq(District::getCityId, city.getId()));
-                List<TreeSelectOption> districts = new ArrayList<>();
-                for (District district : districtList) {
-                    districts.add(new TreeSelectOption(district.getId().toString(), district.getName(), district.getId(), null));
+
+            List<City> cityList = cityMap.get(province.getId());
+            if (cityList != null && !cityList.isEmpty()) {
+                for (City city : cityList) {
+                    List<TreeSelectOption> districts = new ArrayList<>();
+
+                    List<District> districtList = districtMap.get(city.getId());
+                    if (districtList != null && !districtList.isEmpty()) {
+                        for (District district : districtList) {
+                            districts.add(new TreeSelectOption(district.getId().toString(),
+                                    district.getName(), district.getId(), null));
+                        }
+                    }
+
+                    TreeSelectOption cityTreeSelectOption = new TreeSelectOption();
+                    cityTreeSelectOption.setValue(city.getId().toString());
+                    cityTreeSelectOption.setLabel(city.getName());
+                    cityTreeSelectOption.setId(city.getId());
+                    cityTreeSelectOption.setChildren(districts);
+
+                    cities.add(cityTreeSelectOption);
                 }
-
-                TreeSelectOption cityTreeSelectOption = new TreeSelectOption();
-                cityTreeSelectOption.setValue(city.getId().toString());
-                cityTreeSelectOption.setLabel(city.getName());
-                cityTreeSelectOption.setId(city.getId());
-                cityTreeSelectOption.setChildren(districts);
-
-                cities.add(cityTreeSelectOption);
             }
 
             TreeSelectOption treeSelectOption = new TreeSelectOption();
@@ -74,6 +114,7 @@
         return res;
     }
 
+
     @Override
     public String getAreaDisplay(Long provinceId, Long cityId, Long districtId) {
         Province province = provinceMapper.selectById(provinceId);

--
Gitblit v1.9.3