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