|
@@ -5,7 +5,6 @@ import com.rongwe.zhsw.system.domain.SwBillManagementUnpaidDo;
|
|
|
import com.rongwe.zhsw.system.domain.SwUserManagementDo;
|
|
|
import com.rongwe.zhsw.system.domain.SwWaterUsageEntryDo;
|
|
|
import com.rongwei.rwcommon.base.BaseDo;
|
|
|
-import com.rongwei.rwcommon.base.exception.CustomException;
|
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
import com.rongwei.zhsw.system.utils.ZHSWCommonUtils;
|
|
|
import org.slf4j.Logger;
|
|
@@ -16,7 +15,6 @@ import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.TransactionDefinition;
|
|
|
import org.springframework.transaction.TransactionStatus;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
@@ -25,8 +23,6 @@ import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import static org.springframework.transaction.annotation.Propagation.REQUIRED;
|
|
|
-
|
|
|
/**
|
|
|
* BillGenerationServiceImpl class
|
|
|
*
|
|
@@ -46,14 +42,14 @@ public class BillGenerationServiceImpl {
|
|
|
@Autowired
|
|
|
private DataSourceTransactionManager transactionManager;
|
|
|
|
|
|
- private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
|
|
|
|
|
|
public static String formatDate(Date date) {
|
|
|
synchronized (formatter) {
|
|
|
return formatter.format(date);
|
|
|
}
|
|
|
}
|
|
|
- @Async(value = "customThreadPool")
|
|
|
+
|
|
|
public void generateBill(List<SwWaterUsageEntryDo> swWaterUsageEntryDoList) {
|
|
|
log.info("开始生成账单信息");
|
|
|
if (swWaterUsageEntryDoList == null || swWaterUsageEntryDoList.isEmpty()) {
|
|
@@ -71,24 +67,29 @@ public class BillGenerationServiceImpl {
|
|
|
/*******当前账单的所有户号******/
|
|
|
List<String> accountNumberList = collect.stream().map(SwWaterUsageEntryDo::getUsernumber).collect(Collectors.toList());
|
|
|
/*******当前账单的所有户号******/
|
|
|
- List<SwUserManagementDo> swUserManagementList = swUserManagementService.list(new LambdaQueryWrapper<SwUserManagementDo>()
|
|
|
- .select(SwUserManagementDo::getId,
|
|
|
- SwUserManagementDo::getUsernumber,
|
|
|
- SwUserManagementDo::getMetermaxvalue,
|
|
|
- SwUserManagementDo::getWaterprice,
|
|
|
- SwUserManagementDo::getVillagename,
|
|
|
- SwUserManagementDo::getUsernumber,
|
|
|
- SwUserManagementDo::getUsername,
|
|
|
- SwUserManagementDo::getUsertype,
|
|
|
- SwUserManagementDo::getAddress,
|
|
|
- SwUserManagementDo::getExemptionamount,
|
|
|
- SwUserManagementDo::getExemptionwater,
|
|
|
- SwUserManagementDo::getWatertype,
|
|
|
- SwUserManagementDo::getLastmeterreaddate,
|
|
|
- SwUserManagementDo::getLastmeterreading
|
|
|
- )
|
|
|
- .eq(BaseDo::getDeleted, "0")
|
|
|
- .in(SwUserManagementDo::getUsernumber, accountNumberList));
|
|
|
+ Map<String, SwUserManagementDo> userMap = swUserManagementService.list(new LambdaQueryWrapper<SwUserManagementDo>()
|
|
|
+ .select(SwUserManagementDo::getId,
|
|
|
+ SwUserManagementDo::getUsernumber,
|
|
|
+ SwUserManagementDo::getMetermaxvalue,
|
|
|
+ SwUserManagementDo::getWaterprice,
|
|
|
+ SwUserManagementDo::getVillagename,
|
|
|
+ SwUserManagementDo::getUsernumber,
|
|
|
+ SwUserManagementDo::getUsername,
|
|
|
+ SwUserManagementDo::getUsertype,
|
|
|
+ SwUserManagementDo::getAddress,
|
|
|
+ SwUserManagementDo::getExemptionamount,
|
|
|
+ SwUserManagementDo::getExemptionwater,
|
|
|
+ SwUserManagementDo::getWatertype,
|
|
|
+ SwUserManagementDo::getLastmeterreaddate,
|
|
|
+ SwUserManagementDo::getLastmeterreading
|
|
|
+ )
|
|
|
+ .eq(BaseDo::getDeleted, "0")
|
|
|
+ .in(SwUserManagementDo::getUsernumber, accountNumberList))
|
|
|
+ .stream().collect(Collectors.groupingBy(SwUserManagementDo::getUsernumber,
|
|
|
+ Collectors.reducing(
|
|
|
+ null, // 初始值(可能为 null)
|
|
|
+ (a, b) -> a != null ? a : b // 合并规则:保留第一个非 null 元素
|
|
|
+ )));
|
|
|
|
|
|
collect.forEach(swWaterUsageEntry -> {
|
|
|
String usernumber = swWaterUsageEntry.getUsernumber();
|
|
@@ -99,9 +100,7 @@ public class BillGenerationServiceImpl {
|
|
|
log.error("当前用户:{},时间:{}的抄表记录已生成账单信息", usernumber, currentreadingdate);
|
|
|
return;
|
|
|
}
|
|
|
- SwUserManagementDo swUserManagementDo = swUserManagementList.stream().filter(data -> data.getUsernumber().equals(swWaterUsageEntry.getUsernumber()))
|
|
|
- .findFirst()
|
|
|
- .orElse(null);
|
|
|
+ SwUserManagementDo swUserManagementDo = userMap.getOrDefault(swWaterUsageEntry.getUsernumber(), null);
|
|
|
|
|
|
SwWaterUsageEntryDo usageEntryDo = new SwWaterUsageEntryDo();
|
|
|
usageEntryDo.setId(swWaterUsageEntry.getId());
|
|
@@ -110,10 +109,7 @@ public class BillGenerationServiceImpl {
|
|
|
usageEntryDo.setState(2);
|
|
|
saveUsageEntryList.add(usageEntryDo);
|
|
|
return;
|
|
|
- }else{
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
// 校验是否可以生成账单
|
|
|
if (swUserManagementDo.getLastmeterreaddate() != null &&
|
|
|
swUserManagementDo.getLastmeterreaddate().compareTo(swWaterUsageEntry.getCurrentreadingdate()) > 0) {
|
|
@@ -122,18 +118,18 @@ public class BillGenerationServiceImpl {
|
|
|
saveUsageEntryList.add(usageEntryDo);
|
|
|
return;
|
|
|
}
|
|
|
- SwBillManagementUnpaidDo swBillManagementUnpaidDo=null;
|
|
|
+ SwBillManagementUnpaidDo swBillManagementUnpaidDo = null;
|
|
|
try {
|
|
|
// 生成代缴费账单
|
|
|
- swBillManagementUnpaidDo= produceBill(swUserManagementDo, swWaterUsageEntry);
|
|
|
- }catch (Exception e) {
|
|
|
+ swBillManagementUnpaidDo = produceBill(swUserManagementDo, swWaterUsageEntry);
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- log.error("缴费记录生成失败原因:{}",e.getMessage());
|
|
|
+ log.error("缴费记录生成失败原因:{}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
- if(swBillManagementUnpaidDo==null){
|
|
|
+ if (swBillManagementUnpaidDo == null) {
|
|
|
usageEntryDo.setState(4);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
usageEntryDo.setState(1);
|
|
|
saveList.add(swBillManagementUnpaidDo);
|
|
|
// 设置本次的抄表日期
|
|
@@ -144,15 +140,16 @@ public class BillGenerationServiceImpl {
|
|
|
userSaveList.add(swUserManagementDo);
|
|
|
saveUsageEntryList.add(usageEntryDo);
|
|
|
});
|
|
|
- dataSave(saveList, userSaveList, saveUsageEntryList);
|
|
|
+ dataSave(saveList, saveUsageEntryList, userSaveList);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ @Async(value = "customThreadPool")
|
|
|
public void generateBill(String id) {
|
|
|
SwWaterUsageEntryDo swWaterUsageEntryDo = swWaterUsageEntryService.getById(id);
|
|
|
this.generateBill(Collections.singletonList(swWaterUsageEntryDo));
|
|
|
}
|
|
|
|
|
|
+ @Async(value = "customThreadPool")
|
|
|
public void generateBill(List<String> ids, boolean a) {
|
|
|
if (ids.isEmpty()) {
|
|
|
log.error("抄表记录ID为空");
|
|
@@ -161,6 +158,7 @@ public class BillGenerationServiceImpl {
|
|
|
this.generateBill(swWaterUsageEntryService.getBaseMapper().selectBatchIds(ids));
|
|
|
}
|
|
|
|
|
|
+ @Async(value = "customThreadPool")
|
|
|
public void generateBill() {
|
|
|
List<SwWaterUsageEntryDo> list = swWaterUsageEntryService.list(new LambdaQueryWrapper<SwWaterUsageEntryDo>()
|
|
|
.eq(SwWaterUsageEntryDo::getDeleted, "0")
|
|
@@ -170,26 +168,27 @@ public class BillGenerationServiceImpl {
|
|
|
|
|
|
/**
|
|
|
* 数据保存
|
|
|
+ *
|
|
|
* @param swBillManagementUnpaidDos 账单信息
|
|
|
- * @param userSaveList 用户信息
|
|
|
- * @param saveUsageEntryList 抄表记录
|
|
|
+ * @param userSaveList 用户信息
|
|
|
+ * @param saveUsageEntryList 抄表记录
|
|
|
*/
|
|
|
|
|
|
- public void dataSave(List<SwBillManagementUnpaidDo> swBillManagementUnpaidDos, List<SwUserManagementDo> userSaveList,
|
|
|
- List<SwWaterUsageEntryDo> saveUsageEntryList) {
|
|
|
+ public void dataSave(List<SwBillManagementUnpaidDo> swBillManagementUnpaidDos,
|
|
|
+ List<SwWaterUsageEntryDo> saveUsageEntryList, List<SwUserManagementDo> userSaveList) {
|
|
|
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
|
|
|
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
|
|
TransactionStatus status = transactionManager.getTransaction(def);
|
|
|
try {
|
|
|
- if(!saveUsageEntryList.isEmpty()){
|
|
|
+ if (!saveUsageEntryList.isEmpty()) {
|
|
|
// 抄表记录状态更新
|
|
|
- swWaterUsageEntryService.updateBatchById(saveUsageEntryList,4000);
|
|
|
+ swWaterUsageEntryService.updateBatchById(saveUsageEntryList, 4000);
|
|
|
}
|
|
|
- if(!swBillManagementUnpaidDos.isEmpty()){
|
|
|
+ if (!swBillManagementUnpaidDos.isEmpty()) {
|
|
|
// 账单保存
|
|
|
swBillManagementUnpaidService.saveBatch(swBillManagementUnpaidDos, 1000);
|
|
|
}
|
|
|
- if(!userSaveList.isEmpty()){
|
|
|
+ if (!userSaveList.isEmpty()) {
|
|
|
// 更新用户表的本次抄表时间和本次抄表度数
|
|
|
swUserManagementService.updateBatchById(userSaveList);
|
|
|
}
|
|
@@ -261,7 +260,8 @@ public class BillGenerationServiceImpl {
|
|
|
swBillManagementUnpaidDo.setOughttohavepaid(waterprice.multiply(waterConsumption));
|
|
|
swBillManagementUnpaidDo.setWatertype(swUserManagementDo.getWatertype());
|
|
|
// 实际应缴=原应缴-减免
|
|
|
- swBillManagementUnpaidDo.setActualdue(swBillManagementUnpaidDo.getOughttohavepaid().subtract(swBillManagementUnpaidDo.getFeewaiver()));
|
|
|
+ BigDecimal subtract = swBillManagementUnpaidDo.getOughttohavepaid().subtract(swBillManagementUnpaidDo.getFeewaiver());
|
|
|
+ swBillManagementUnpaidDo.setActualdue(subtract.compareTo(BigDecimal.ZERO) > 0 ? subtract : BigDecimal.ZERO);
|
|
|
swBillManagementUnpaidDo.setLastmeterreadingdate(swWaterUsageEntryDo.getLastreadingdate());
|
|
|
swBillManagementUnpaidDo.setLastmeterreading(swWaterUsageEntryDo.getLastreading());
|
|
|
swBillManagementUnpaidDo.setThismeterreadingdate(swWaterUsageEntryDo.getCurrentreadingdate());
|