From 89bb0237ead5fb632fcc14c2c52276496e19843f Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期日, 08 十一月 2026 23:35:49 +0800
Subject: [PATCH] 修改了增值税城建税
---
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundtaxServiceImpl.java | 106 ++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 85 insertions(+), 21 deletions(-)
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundtaxServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundtaxServiceImpl.java
index 7664201..b9033a8 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundtaxServiceImpl.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundtaxServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.tax.VatTaxUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.domain.ServiceFund;
import com.ruoyi.project.domain.ServiceFunddetail;
@@ -23,6 +24,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
@@ -171,66 +173,128 @@
/**
* 鎵归噺绠楃◣涓诲叆鍙�
* 1. 鏍¢獙鍙傛暟
- * 2. 鏍¢獙鎵规鍚堟硶鎬э紙濡傛湁蹇呰锛�
- * 3. 鏌ヨ鏈壒娆℃墍鏈塖erviceFund锛堟寜id鍗囧簭锛�
- * 4. 棰勬煡璇㈡湰鏈堟墍鏈夎韩浠借瘉鍙风殑绱閲戦锛岀紦瀛樺埌Map锛屾彁鍗囧悗缁畻绋庢晥鐜�
- * 5. 閬嶅巻姣忎釜ServiceFund锛屾壒閲忕畻绋�
+ * 2. 鍙厑璁告渶鏂版壒娆$畻绋�
+ * 3. 瀵瑰綋鍓嶆壒娆� service_fundtax 鍔犺閿侊紝闃插苟鍙戦噸澶嶇畻绋�
+ * 4. 鏌ヨ鏈壒娆℃墍鏈� ServiceFund锛堟寜 id 鍗囧簭锛夛紝骞堕噸缃� istax
+ * 5. 棰勬煡璇㈡湰鏈堟墍鏈夎韩浠借瘉鍙风殑绱閲戦锛岀紦瀛樺埌 Map
+ * 6. 鏍¢獙褰撴湀鏄惁瀛樺湪鍘嗗彶鍙e緞锛坴1锛夌畻绋庤褰曪紝闃叉鏂版棫鍙e緞娣风畻
+ * 7. 閬嶅巻姣忎釜 ServiceFund 閫愬崟绠楃◣锛屾眹鎬诲悗鍥炲啓 service_fundtax
+ * <p>
+ * 鏁存壒鍦ㄤ竴涓簨鍔″唴瀹屾垚锛氫换涓�鏉″け璐ュ垯鏁存壒鍥炴粴锛屼笉浼氬嚭鐜板崐鎵规暟鎹��
*
* @param fundTaxVO 鎵规绠楃◣鍙傛暟
* @return 鏄惁绠楃◣鎴愬姛
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean batchFundTax(FundTaxVO fundTaxVO) {
log.info("鎵归噺绠楃◣鐨刦undTaxVO鍏ュ弬涓猴細{}", fundTaxVO);
// 1. 鏍¢獙鍙傛暟
if (fundTaxVO.getFundTaxId() == null) {
throw new BaseException("鍒嗘壒绠楃◣鍑洪棶棰樹簡,璇锋鏌ュ悗鍐嶈繘琛岃绠�");
}
- // 2. 鏍¢獙鎵规鍚堟硶鎬э紙浠呴檺淇敼鎿嶄綔锛�
+ // 2. 鍙厑璁告渶鏂版壒娆$畻绋�
if (fundTaxVO.getAddOrupdate() == 1) {
Integer maxFundTaxId = serviceFundtaxMapper.getMaxFundTaxId();
log.info("鎵归噺绠楃◣鐨刴axFundTaxId涓猴細{}", maxFundTaxId);
- if (!fundTaxVO.getFundTaxId().equals(Long.valueOf(maxFundTaxId))) {
+ if (maxFundTaxId == null || !fundTaxVO.getFundTaxId().equals(Long.valueOf(maxFundTaxId))) {
throw new BaseException("璇ユ壒鏁版嵁涓嶈兘绠楃◣");
}
}
- // 3. 鏌ヨ鏈壒娆℃墍鏈塖erviceFund锛堟寜id鍗囧簭锛�
+ // 3. 瀵瑰綋鍓嶆壒娆℃眹鎬诲崟鍔犺閿侊紙浜嬪姟鍐呮湁鏁堬級锛岄槻姝㈠苟鍙戦噸澶嶇畻绋�
+ ServiceFundtax fundtax = serviceFundtaxMapper.selectByIdForUpdate(fundTaxVO.getFundTaxId());
+ if (fundtax == null) {
+ throw new BaseException("鏈壘鍒扮畻绋庢眹鎬诲崟锛孖D=" + fundTaxVO.getFundTaxId());
+ }
+
+ // 4. 鏌ヨ鏈壒娆℃墍鏈� ServiceFund锛堟寜 id 鍗囧簭锛�
ServiceFund serviceFund = new ServiceFund();
serviceFund.setFundTaxId(fundTaxVO.getFundTaxId());
serviceFund.setDel_flag(0);
List<ServiceFund> serviceFunds = serviceFundService.selectServiceFundList(serviceFund);
- for (ServiceFund serviceFund1 : serviceFunds) {
- serviceFundMapper.updateFundIsTexById(serviceFund1.getId(), 0L);
- }
-
- // 鎸塱d鍗囧簭鎺掑簭锛屼繚璇佸鐞嗛『搴忎竴鑷�
- serviceFunds.sort(Comparator.comparing(ServiceFund::getId));
if (CollectionUtils.isEmpty(serviceFunds)) {
log.warn("鏈煡璇㈠埌鐩稿叧ServiceFund锛宖undTaxId={}", fundTaxVO.getFundTaxId());
return false;
}
+ // 閲嶇疆鏈壒 istax 涓庣畻绋庢椂闂达紝浣挎湰鏈堢疮璁℃煡璇笉浼氶噸澶嶈鍏ユ湰鎵�
+ for (ServiceFund serviceFund1 : serviceFunds) {
+ serviceFundMapper.updateFundIsTexById(serviceFund1.getId(), 0L);
+ }
+ // 鎸� id 鍗囧簭鎺掑簭锛屼繚璇佸鐞嗛『搴忎竴鑷�
+ serviceFunds.sort(Comparator.comparing(ServiceFund::getId));
- // 4. 棰勬煡璇㈡湰鏈堟墍鏈夎韩浠借瘉鍙风殑绱閲戦锛岀紦瀛樺埌Map锛屾彁鍗囧悗缁畻绋庢晥鐜�
- TaxMoneyByItemEO taxMoneyVO = new TaxMoneyByItemEO();
+ // 5. 棰勬煡璇㈡湰鏈堟墍鏈夎韩浠借瘉鍙风殑绱閲戦锛岀紦瀛樺埌 Map锛屾彁鍗囧悗缁畻绋庢晥鐜�
+ Date taxTime = new Date();
Date firstDay = Date.from(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
+ TaxMoneyByItemEO taxMoneyVO = new TaxMoneyByItemEO();
taxMoneyVO.setFirstDay(firstDay);
- taxMoneyVO.setTaxTime(new Date());
+ taxMoneyVO.setTaxTime(taxTime);
Map<String, TaxMoneySumEO> tempTaxSumMap = new HashMap<>();
List<TaxMoneySumEO> taxSum = serviceFunddetailMapper.getTaxSum(taxMoneyVO);
- for (TaxMoneySumEO taxMoneySumEO : taxSum) {
- tempTaxSumMap.put(taxMoneySumEO.getIDCardNo(), taxMoneySumEO);
+ if (CollectionUtils.isNotEmpty(taxSum)) {
+ for (TaxMoneySumEO taxMoneySumEO : taxSum) {
+ tempTaxSumMap.put(taxMoneySumEO.getIDCardNo(), taxMoneySumEO);
+ // 6. 褰撴湀宸插瓨鍦ㄧ殑鍘嗗彶鍙e緞锛坴1锛夎褰曚細璁╃疮璁″熀鏁版柊鏃ф贩绠楋紝鐩存帴闃绘
+ if (taxMoneySumEO.getV1Count() != null && taxMoneySumEO.getV1Count() > 0) {
+ throw new BaseException("褰撴湀宸插瓨鍦ㄦ棫鍙e緞锛坴1锛夌畻绋庤褰曪紝涓洪伩鍏嶆柊鏃у彛寰勬贩绠楋紝"
+ + "鏈湀璇风户缁娇鐢ㄦ棫鍙e緞鎴栦粠涓嬩釜鏈堣捣鍐嶆寜鏂板彛寰勭畻绋庛�備汉鍛樿韩浠借瘉鍙凤細"
+ + taxMoneySumEO.getIDCardNo());
+ }
+ }
}
- // 5. 閬嶅巻姣忎釜ServiceFund锛屾壒閲忕畻绋�
+ // 7. 閬嶅巻姣忎釜 ServiceFund锛岄�愬崟绠楃◣骞舵眹鎬�
+ BigDecimal pretaxTotal = BigDecimal.ZERO;
+ BigDecimal vatTotal = BigDecimal.ZERO;
+ BigDecimal cityTaxTotal = BigDecimal.ZERO;
+ BigDecimal laborPretaxTotal = BigDecimal.ZERO;
+ BigDecimal taxTotal = BigDecimal.ZERO;
+ BigDecimal taxedTotal = BigDecimal.ZERO;
for (ServiceFund serviceFund1 : serviceFunds) {
ServiceFunddetail serviceFunddetail = new ServiceFunddetail();
serviceFunddetail.setFundid(serviceFund1.getId());
List<ServiceFunddetail> serviceFunddetails = serviceFunddetailMapper.selectServiceFunddetailList(serviceFunddetail);
- // 浼犲叆绱閲戦缂撳瓨锛屾彁鍗囩畻绋庢晥鐜�
- serviceFunddetailService.calculateTax(serviceFunddetails, tempTaxSumMap);
+ if (CollectionUtils.isEmpty(serviceFunddetails)) {
+ throw new BaseException("鍗曟嵁娌℃湁鍙畻绋庣殑鏄庣粏锛屽崟鎹甀D=" + serviceFund1.getId()
+ + "锛屾崘鐚渚�=" + serviceFund1.getDonorname());
+ }
+ // 浼犲叆绱閲戦缂撳瓨涓庣粺涓�绠楃◣鏃堕棿
+ serviceFunddetailService.calculateTax(serviceFunddetails, tempTaxSumMap, taxTime);
+ for (ServiceFunddetail detail : serviceFunddetails) {
+ pretaxTotal = pretaxTotal.add(toMoney(detail.getAmount()));
+ vatTotal = vatTotal.add(toMoney(detail.getVatAmount()));
+ cityTaxTotal = cityTaxTotal.add(toMoney(detail.getCityTaxAmount()));
+ laborPretaxTotal = laborPretaxTotal.add(toMoney(detail.getLaborPretaxAmount()));
+ taxTotal = taxTotal.add(toMoney(detail.getTaxamount()));
+ taxedTotal = taxedTotal.add(toMoney(detail.getTaxedamount()));
+ }
}
+
+ // 8. 鍥炲啓姹囨�诲崟 service_fundtax锛�6 涓噾棰� + 绠楃◣鐘舵�� + 鐗堟湰锛�
+ ServiceFundtax updateFundtax = new ServiceFundtax();
+ updateFundtax.setId(fundTaxVO.getFundTaxId());
+ updateFundtax.setPretaxamount(VatTaxUtils.roundMoney(pretaxTotal));
+ updateFundtax.setVatAmount(VatTaxUtils.roundMoney(vatTotal));
+ updateFundtax.setCityTaxAmount(VatTaxUtils.roundMoney(cityTaxTotal));
+ updateFundtax.setLaborPretaxAmount(VatTaxUtils.roundMoney(laborPretaxTotal));
+ updateFundtax.setTaxamount(VatTaxUtils.roundMoney(taxTotal));
+ updateFundtax.setTaxMoney(VatTaxUtils.roundMoney(taxTotal));
+ updateFundtax.setTaxedamount(VatTaxUtils.roundMoney(taxedTotal));
+ updateFundtax.setTaxVersion(VatTaxUtils.TAX_VERSION_V2);
+ updateFundtax.setIstax(1);
+ updateFundtax.setTaxedtime(taxTime);
+ serviceFundtaxMapper.updateById(updateFundtax);
+ log.info("鎵归噺绠楃◣瀹屾垚锛宖undTaxId={}锛岀◣鍓�={}锛屽鍊肩◣={}锛屽煄寤虹◣={}锛屽姵鍔$◣鍓�={}锛屽姵鍔′釜绋�={}锛屽姵鍔$◣鍚�={}",
+ fundTaxVO.getFundTaxId(), pretaxTotal, vatTotal, cityTaxTotal, laborPretaxTotal, taxTotal, taxedTotal);
return true;
}
+ /**
+ * null 瀹夊叏鐨勯噾棰濊浆鎹�
+ */
+ private static BigDecimal toMoney(Double value) {
+ return value == null ? BigDecimal.ZERO : BigDecimal.valueOf(value);
+ }
+
}
--
Gitblit v1.9.3