重新生成账单

localizer
ljw 2025-10-28 15:01:15 +08:00
parent da1d060a08
commit e3967d44c3
4 changed files with 63 additions and 9 deletions

View File

@ -4,7 +4,6 @@ import com.njzscloud.common.core.utils.R;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.supervisory.money.pojo.entity.MoneyBillEntity;
import com.njzscloud.supervisory.money.pojo.param.RebuildBillParam;
import com.njzscloud.supervisory.money.service.MoneyBillService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -79,9 +78,9 @@ public class MoneyBillController {
/**
*
*/
@PostMapping("/rebuildBill")
public R<?> rebuildBill(@RequestBody RebuildBillParam param) {
moneyBillService.rebuildBill(param);
@GetMapping("/rebuildBill")
public R<?> rebuildBill(@RequestParam Long id) {
moneyBillService.rebuildBill(id);
return R.success();
}

View File

@ -11,8 +11,8 @@ public class RebuildBillParam {
private Long companyId;
/**
* id
* Id
*/
private Long originExpenseItemId;
private Long goodsId;
}

View File

@ -7,9 +7,10 @@ import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.goods.contant.MoneyStrategy;
import com.njzscloud.supervisory.money.mapper.MoneyBillMapper;
import com.njzscloud.supervisory.money.pojo.entity.MoneyBillEntity;
import com.njzscloud.supervisory.money.pojo.param.RebuildBillParam;
import com.njzscloud.supervisory.money.pojo.result.MoneyBillResult;
import com.njzscloud.supervisory.order.utils.FileUtil;
import com.njzscloud.supervisory.sys.auth.mapper.AuthMapper;
import lombok.RequiredArgsConstructor;
@ -21,6 +22,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@ -93,8 +95,55 @@ public class MoneyBillService extends ServiceImpl<MoneyBillMapper, MoneyBillEnti
/**
*
*/
public void rebuildBill(RebuildBillParam param) {
return;
public void rebuildBill(Long id) {
MoneyBillEntity entity = this.getById(id);
// 创建查询条件
MoneyBillResult queryCondition = new MoneyBillResult();
// 转换为当天0点0分0秒
LocalDateTime startTime = entity.getStartTime().atStartOfDay();
// 转换为当天23点59分59秒
LocalDateTime endTime = entity.getEndTime().atTime(23, 59, 59);
queryCondition.setStartTime(startTime);
queryCondition.setEndTime(endTime);
queryCondition.setOriginExpenseItemId(entity.getGoodsId());
queryCondition.setTransCompanyId(entity.getStationId());
// 执行查询
List<MoneyBillResult> billResults = baseMapper.selectMoneyBillList(queryCondition);
if (null != billResults && billResults.size() > 0) {
// 1. 订单数量通过orderId分组条数就是订单数
long orderCount = billResults.stream().
map(MoneyBillResult::getOrderId)
.distinct()
.count();
entity.setOrderCount((int) orderCount);
// 2. 总质量quantity求和条件是计费策略不等于"车"
int totalWeight = billResults.stream()
.filter(result -> !MoneyStrategy.Che.getVal().equals(result.getMoneyStrategy()))
.mapToInt(MoneyBillResult::getQuantity)
.sum();
entity.setTotalWeight(totalWeight);
// 3. 车数quantity求和条件是计费策略等于"车"
int totalCars = billResults.stream()
.filter(result -> MoneyStrategy.Che.getVal().equals(result.getMoneyStrategy()))
.mapToInt(MoneyBillResult::getQuantity)
.sum();
entity.setCarCount(totalCars);
// 4. 优惠金额discountMoney求和可能是负数
BigDecimal totalDiscountMoney = billResults.stream()
.map(MoneyBillResult::getDiscountMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);
entity.setDiscountMoney(totalDiscountMoney);
// 5. 账单金额settleMoney求和可能是负数
BigDecimal totalSettleMoney = billResults.stream()
.map(MoneyBillResult::getSettleMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);
entity.setTotalMoney(totalSettleMoney);
}
this.updateById(entity);
}
public void export(HttpServletResponse response, MoneyBillEntity entity) throws IOException {

View File

@ -89,6 +89,12 @@
<if test="entity.endTime != null">
AND oi.create_time &lt;= #{entity.endTime}
</if>
<if test="entity.transCompanyId != null">
AND oi.trans_company_id = #{entity.transCompanyId}
</if>
<if test="entity.originExpenseItemId != null">
AND oei.origin_expense_item_id = #{entity.originExpenseItemId}
</if>
order by oei.create_time desc
</select>
</mapper>