|
@@ -50,6 +50,7 @@ import com.ruoyi.warehouseBusiness.domain.enums.FeesTypeEnum;
|
|
|
import com.ruoyi.warehouseBusiness.domain.enums.WarehouseActIdEnum;
|
|
|
import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
|
|
|
import com.ruoyi.warehouseBusiness.domain.vo.AppWarehouseInfoVO;
|
|
|
+import com.ruoyi.warehouseBusiness.domain.vo.CalculateStorageFeesInfoVO;
|
|
|
import com.ruoyi.warehouseBusiness.domain.vo.StorageFeeCalculationResultVO;
|
|
|
import com.ruoyi.warehouseBusiness.excel.*;
|
|
|
import com.ruoyi.warehouseBusiness.mapper.*;
|
|
@@ -3628,6 +3629,10 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
}
|
|
|
// 查询总账是否存在
|
|
|
TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, wbItem, goods.getIfCntrno());
|
|
|
+
|
|
|
+ if (Objects.nonNull(tWhgenle) && wbItem.getfBsdate().before(tWarehouseBills.getfChargedate())) {
|
|
|
+ throw new WarehouseException("业务日期不得超出库存总帐日期");
|
|
|
+ }
|
|
|
// 入库数特殊不判断入账
|
|
|
if ("SJCK".equals(billsType)) { // 出库 查询
|
|
|
if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
|
|
@@ -4022,7 +4027,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
storageFeesDto.setStartTime((Date) item.get("fOriginalbilldate"));
|
|
|
storageFeesDto.setEndTime(fBsdate);
|
|
|
} else if (WarehouseTypeEnum.HQZY.getType().equals(fBilltype)) {
|
|
|
- fInventoryDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fOriginalbilldate"));
|
|
|
+ fInventoryDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fChargedate"));
|
|
|
fBillingDays = fInventoryDays;
|
|
|
storageFeesDto.setStartTime(fBsdate);
|
|
|
storageFeesDto.setEndTime((Date) item.get("fOriginalbilldate"));
|
|
@@ -4033,6 +4038,9 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fOriginalbilldate"));
|
|
|
fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fChargedate"));
|
|
|
}
|
|
|
+ if (fBillingDays <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
storageFeesDto.setDays(fBillingDays);
|
|
|
storageFeesDto.setfMblno((String) item.get("fMblno"));
|
|
|
// 赋值要计算的数量单位
|
|
@@ -4100,6 +4108,124 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ public Map<String, Object> getWarehouseItems1(TWarehouseBills warehouseBills, List<CalculateStorageFeesInfoVO> feesInfoVOList, LoginUser loginUser, String cangKey) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ BigDecimal sumAmt = new BigDecimal(0);
|
|
|
+ List<TWarehousebillsfees> itemsList = new ArrayList<>();
|
|
|
+ List<SysDictData> taxRate = sysDictDataMapper.selectDictDataByType("tax_rate");
|
|
|
+
|
|
|
+ for (CalculateStorageFeesInfoVO item : feesInfoVOList) {
|
|
|
+ if (StringUtils.isNull(item.getFBillingway())) {
|
|
|
+ throw new WarehouseException("单号:" + item.getFBillno() + ",业务日期:" + item.getFBsdate() + "未找到库存总账的计费单位,请确认");
|
|
|
+ }
|
|
|
+ CalculateStorageFeesDTO storageFeesDto = new CalculateStorageFeesDTO();
|
|
|
+ storageFeesDto.setfCorpid(warehouseBills.getfCorpid());
|
|
|
+ storageFeesDto.setCangKey(cangKey);
|
|
|
+ storageFeesDto.setWarehouseId(Long.parseLong(String.valueOf(item.getWarehouse())));
|
|
|
+
|
|
|
+ String fGoodsid = item.getFTypeid();
|
|
|
+ if (StringUtils.isNotEmpty(fGoodsid)) {
|
|
|
+ fGoodsid = "\"" + fGoodsid + "\"";
|
|
|
+ }
|
|
|
+ storageFeesDto.setfGoodsid(fGoodsid);
|
|
|
+
|
|
|
+ long fId = item.getFId();
|
|
|
+ // 累计计费天数
|
|
|
+ if (Objects.equals(item.getFChargedate().getTime(), item.getFOriginalbilldate().getTime())) {
|
|
|
+ storageFeesDto.setEarlySumDays(0L);
|
|
|
+ } else {
|
|
|
+ storageFeesDto.setEarlySumDays(DateUtils.getDateDay(item.getFChargedate(), item.getFOriginalbilldate()));
|
|
|
+ }
|
|
|
+ // 库存天数
|
|
|
+ long fInventoryDays;
|
|
|
+ // 要计费天数
|
|
|
+ long fBillingDays;
|
|
|
+ if (WarehouseTypeEnum.SJCK.getType().equals(item.getFBilltype())) {
|
|
|
+ fInventoryDays = DateUtils.getDateDay(item.getFBsdate(), item.getFChargedate());
|
|
|
+ fBillingDays = fInventoryDays;
|
|
|
+ storageFeesDto.setStartTime(item.getFOriginalbilldate());
|
|
|
+ storageFeesDto.setEndTime(item.getFBsdate());
|
|
|
+ } else if (WarehouseTypeEnum.HQZY.getType().equals(item.getFBilltype())) {
|
|
|
+ fInventoryDays = DateUtils.getDateDay(item.getFBsdate(), item.getFChargedate());
|
|
|
+ fBillingDays = fInventoryDays;
|
|
|
+ storageFeesDto.setStartTime(item.getFBsdate());
|
|
|
+ storageFeesDto.setEndTime(item.getFOriginalbilldate());
|
|
|
+ } else {
|
|
|
+ storageFeesDto.setStartTime(item.getFChargedate());
|
|
|
+ storageFeesDto.setEndTime(warehouseBills.getfBillingDeadline());
|
|
|
+ fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), item.getFOriginalbilldate());
|
|
|
+ fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), item.getFChargedate());
|
|
|
+ }
|
|
|
+ if (fBillingDays <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ storageFeesDto.setDays(fBillingDays);
|
|
|
+ storageFeesDto.setfMblno(item.getFMblno());
|
|
|
+ // 赋值要计算的数量单位
|
|
|
+ storageFeesDto.setfQty(new BigDecimal(item.getFQty()));
|
|
|
+ storageFeesDto.setfVolumn(item.getFVolumn());
|
|
|
+ storageFeesDto.setfNetweight(item.getFNetweight());
|
|
|
+ storageFeesDto.setfGrossweight(item.getFGrossweight());
|
|
|
+ // 仓储费协议计算
|
|
|
+ StorageFeeCalculationResultVO feeCalculationResultVO = tWarehouseAgreementService.getCarryingCost(storageFeesDto);
|
|
|
+ if (Objects.isNull(feeCalculationResultVO)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String mblno = "";
|
|
|
+ if (StringUtils.isNotNull(item.getFMblno())) {
|
|
|
+ mblno = item.getFMblno();
|
|
|
+ }
|
|
|
+ map.put("feeId", feeCalculationResultVO.getFeeId());
|
|
|
+ map.put("itemFeeId", feeCalculationResultVO.getFeeId());
|
|
|
+ sumAmt = sumAmt.add(feeCalculationResultVO.getAmt());
|
|
|
+ TWarehousebillsfees fees = new TWarehousebillsfees();
|
|
|
+ fees.setfFeeid(feeCalculationResultVO.getFeeId());
|
|
|
+ fees.setfDc("D");
|
|
|
+ fees.setfAmt(feeCalculationResultVO.getAmt());
|
|
|
+ fees.setSrcId(fId);
|
|
|
+ fees.setfMblno(mblno);
|
|
|
+ fees.setRemark(feeCalculationResultVO.getRemark());
|
|
|
+ fees.setfFeeunitid(2L);
|
|
|
+ fees.setfAmount(feeCalculationResultVO.getAmt());
|
|
|
+ fees.setfBillstatus(2L);
|
|
|
+ fees.setfCurrency("RMB");
|
|
|
+ fees.setfBsdate(item.getFBsdate());
|
|
|
+ fees.setfBillingQty(feeCalculationResultVO.getQty());
|
|
|
+ fees.setfUnitprice(feeCalculationResultVO.getAmt());
|
|
|
+ fees.setfBilltype(item.getFBilltype());
|
|
|
+ fees.setCreateTime(new Date());
|
|
|
+ fees.setfBillingDays(fBillingDays);
|
|
|
+ fees.setfQty(new BigDecimal(1));
|
|
|
+ fees.setfPid(warehouseBills.getfId());
|
|
|
+ fees.setfInventoryDays(fInventoryDays);
|
|
|
+ fees.setfExrate(new BigDecimal(1));
|
|
|
+ fees.setPriceDateRemarks(feeCalculationResultVO.getBillingInterval());
|
|
|
+ fees.setfCorpid(warehouseBills.getfCorpid());
|
|
|
+ fees.setfMarks(item.getFMarks());
|
|
|
+ fees.setSrcBillNo(item.getFBillno());
|
|
|
+ fees.setCreateBy(loginUser.getUser().getUserName());
|
|
|
+ fees.setfWarehouseid(storageFeesDto.getWarehouseId());
|
|
|
+ fees.setfProductName(item.getFGoodsids());
|
|
|
+ if (WarehouseTypeEnum.SJCK.getType().equals(item.getFBilltype()) ||
|
|
|
+ WarehouseTypeEnum.HQZY.getType().equals(item.getFBilltype())) {
|
|
|
+ fees.setfBillingDeadline(item.getFBsdate());
|
|
|
+ } else {
|
|
|
+ fees.setfBillingDeadline(warehouseBills.getfBillingDeadline());
|
|
|
+ }
|
|
|
+ fees.setfChargedate(item.getFChargedate());
|
|
|
+ fees.setfTaxrate(new BigDecimal(taxRate.get(0).getDictValue()));
|
|
|
+ fees.setfOriginalbilldate(item.getFOriginalbilldate());
|
|
|
+
|
|
|
+ fees.setfBillingway(feeCalculationResultVO.getUnit());
|
|
|
+
|
|
|
+ tWarehousebillsfeesMapper.insertTWarehousebillsfees(fees);
|
|
|
+ itemsList.add(fees);
|
|
|
+ }
|
|
|
+ map.put("sumAmt", sumAmt);
|
|
|
+ map.put("itemsList", itemsList);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 新增库存费计算
|
|
|
*
|
|
@@ -4197,6 +4323,93 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
return AjaxResult.success(map);
|
|
|
}
|
|
|
|
|
|
+ public AjaxResult calculateStorageFees1(TWarehouseBills tWarehouseBills, LoginUser loginUser, String billsType) {
|
|
|
+ if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
|
|
|
+ return AjaxResult.error("请选择客户信息");
|
|
|
+ }
|
|
|
+ tWarehouseBills.setfBillingDeadline(DateUtils.dateConversionMax(tWarehouseBills.getfBillingDeadline()));
|
|
|
+ long fPid;
|
|
|
+ if (StringUtils.isNull(tWarehouseBills.getfId())) {
|
|
|
+ // 生成流水号
|
|
|
+ Date time = new Date();
|
|
|
+ String billNo = billnoSerialServiceImpl.getSerialNumber(WarehouseTypeEnum.JSCCF.getType(), time);
|
|
|
+ tWarehouseBills.setfBillno(billNo);
|
|
|
+ if (StringUtils.isNull(tWarehouseBills.getfBillstatus())) {
|
|
|
+ tWarehouseBills.setfBillstatus(2L);
|
|
|
+ }
|
|
|
+ tWarehouseBills.setfBilltype(billsType);
|
|
|
+ tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
|
|
|
+ tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
|
|
|
+ tWarehouseBills.setCreateTime(new Date());
|
|
|
+ tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills);
|
|
|
+ fPid = tWarehouseBills.getfId();
|
|
|
+ } else {
|
|
|
+ tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
|
|
|
+ tWarehousebillsitemsMapper.deleteByFPid(tWarehouseBills.getfId());
|
|
|
+ tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
|
|
|
+ tWarehouseBills.setUpdateTime(new Date());
|
|
|
+ tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
|
|
|
+ fPid = tWarehouseBills.getfId();
|
|
|
+ }
|
|
|
+ // 计划物资明细
|
|
|
+ List<TWarehousebillsfees> itemsList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ //调一次公共方法,获取字符类型的true或者false传
|
|
|
+ String cangKey = sysConfigServiceImpl.selectConfigByKey("agreement.warehouse");
|
|
|
+ // 查出所有仓库 给后续匹配仓库名字使用
|
|
|
+ List<TWarehouse> warehouseList = tWarehouseMapper.selectTWarehouseList(new TWarehouse());
|
|
|
+ // 查询 出库 货转的库存明细
|
|
|
+ tWarehouseBills.setfId(null);
|
|
|
+ List<CalculateStorageFeesInfoVO> feesInfoVOList = tWarehousebillsitemsMapper.selectStorageFeeItemList1(tWarehouseBills);
|
|
|
+ tWarehouseBills.setfId(fPid);
|
|
|
+ if (CollectionUtils.isNotEmpty(feesInfoVOList)) {
|
|
|
+ Map<String, Object> mapItem = getWarehouseItems1(tWarehouseBills, feesInfoVOList, loginUser, cangKey);
|
|
|
+ if (mapItem.containsKey("error")) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return AjaxResult.error((String) mapItem.get("error"));
|
|
|
+ }
|
|
|
+ itemsList = (List<TWarehousebillsfees>) mapItem.get("itemsList");
|
|
|
+ // 给仓库信息赋值
|
|
|
+ itemsList.forEach(li -> {
|
|
|
+ TWarehouse tWarehouse = warehouseList.stream().filter(warehouse -> Objects.equals(warehouse.getfId(), li.getfWarehouseid()))
|
|
|
+ .findFirst().orElseThrow(() -> new WarehouseException("找不到仓库信息"));
|
|
|
+ li.setWarehouseName(tWarehouse.getfName());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ List<CalculateStorageFeesInfoVO> whgenlegfeesInfoVOList = tWhgenlegMapper.selectStorageFeeItemList1(tWarehouseBills);
|
|
|
+ if (CollectionUtils.isNotEmpty(whgenlegfeesInfoVOList)) {
|
|
|
+ // 如果是计算之前日期的库存总帐则需要使用当时日期的准确数量
|
|
|
+ if (!tWarehouseBills.getfBillingDeadline().after(new Date())) {
|
|
|
+ updateWhgenlegs1(tWarehouseBills, whgenlegfeesInfoVOList);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> mapItem = getWarehouseItems1(tWarehouseBills, whgenlegfeesInfoVOList, loginUser, cangKey);
|
|
|
+ if (mapItem.containsKey("error")) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return AjaxResult.error((String) mapItem.get("error"));
|
|
|
+ }
|
|
|
+ List<TWarehousebillsfees> itemList = (List<TWarehousebillsfees>) mapItem.get("itemsList");
|
|
|
+ // 给仓库信息赋值
|
|
|
+ for (TWarehousebillsfees li : itemList) {
|
|
|
+ TWarehouse tWarehouse = warehouseList.stream().filter(warehouse -> Objects.equals(warehouse.getfId(), li.getfWarehouseid()))
|
|
|
+ .findFirst().orElseThrow(() -> new WarehouseException("找不到仓库信息"));
|
|
|
+ li.setWarehouseName(tWarehouse.getfName());
|
|
|
+ itemsList.add(li);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ TFees tFees = new TFees();
|
|
|
+ tFees.setfStatus("2");
|
|
|
+ tFees.setDelFlag("0");
|
|
|
+ List<TFees> feesList = tFeesMapper.selectTFeesList(tFees);
|
|
|
+ if (CollectionUtils.isEmpty(itemsList)) {
|
|
|
+ throw new WarehouseException("未找到合适的库存明细");
|
|
|
+ }
|
|
|
+ map.put("feesList", feesList);
|
|
|
+ map.put("warehouseBills", tWarehouseBills);
|
|
|
+ map.put("warehouseItemList", itemsList);
|
|
|
+ return AjaxResult.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 更新库存总帐当日实际
|
|
|
*
|
|
@@ -4257,6 +4470,58 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
return tWhgenlegs;
|
|
|
}
|
|
|
|
|
|
+ private void updateWhgenlegs1(TWarehouseBills tWarehouseBills, List<CalculateStorageFeesInfoVO> infoVOList) {
|
|
|
+ // 获取区间时间
|
|
|
+ tWarehouseBills.setItemBsDateList(timeConversion(tWarehouseBills.getfBillingDeadline(), new Date()));
|
|
|
+ // 查询时间区间内的仓储业务明细信息
|
|
|
+ List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectListByCorpId(tWarehouseBills);
|
|
|
+ // 如果没有则直接结束此方法
|
|
|
+ if (CollectionUtils.isEmpty(warehousebillsitemsList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ infoVOList.forEach(whgenleg -> {
|
|
|
+ // 判断是否计算箱号 0为 不计算 1为计算
|
|
|
+ boolean ifCntrno = "1".equals(whgenleg.getIfCntrno());
|
|
|
+ // 组合一个库存总帐类使用
|
|
|
+ TWhgenleg tWhgenleg = new TWhgenleg();
|
|
|
+ tWhgenleg.setfCorpid(tWarehouseBills.getfCorpid());
|
|
|
+ tWhgenleg.setfQtyblc(whgenleg.getFQty());
|
|
|
+ tWhgenleg.setfMarks(whgenleg.getFMarks());
|
|
|
+ tWhgenleg.setfMblno(whgenleg.getFMblno());
|
|
|
+ tWhgenleg.setfCntrno(whgenleg.getFCntrno());
|
|
|
+ tWhgenleg.setfGoodsid(whgenleg.getFGoodsid());
|
|
|
+ tWhgenleg.setfNetweightblc(whgenleg.getFNetweight());
|
|
|
+ tWhgenleg.setfGrossweightblc(whgenleg.getFGrossweight());
|
|
|
+ tWhgenleg.setfWarehouseid(whgenleg.getWarehouseLocationid());
|
|
|
+
|
|
|
+ log.info("每次yuan件数、毛重、净重、:{}, {}, {}, {}", tWhgenleg.getfQtyblc(), tWhgenleg.getfVolumnblc(), tWhgenleg.getfNetweightblc(),
|
|
|
+ tWhgenleg.getfGrossweightblc());
|
|
|
+
|
|
|
+ List<TWarehousebillsitems> itemList = new ArrayList<>();
|
|
|
+ for (TWarehousebillsitems li : warehousebillsitemsList) {
|
|
|
+ if ((!Objects.equals(li.getfGoodsid(), tWhgenleg.getfGoodsid())) ||
|
|
|
+ (!Objects.equals(li.getfWarehouselocid(), tWhgenleg.getfWarehouseid()) || Objects.equals(li.getfTransferWarehouselocid(), tWhgenleg.getfWarehouseid())) ||
|
|
|
+ !li.getfMblno().equals(tWhgenleg.getfMblno()) ||
|
|
|
+ (!li.getfMarks().equals(tWhgenleg.getfMarks())) ||
|
|
|
+ (ifCntrno && !li.getfCntrno().equals(tWhgenleg.getfCntrno()))
|
|
|
+ ) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ itemList.add(li);
|
|
|
+ }
|
|
|
+ // 如果找不到符合条件的明细信息 直接结束此方法
|
|
|
+ if (CollectionUtils.isNotEmpty(itemList)) {
|
|
|
+ itemList.forEach(li -> updateWhgenlegCalculate(tWhgenleg, li));
|
|
|
+ }
|
|
|
+ log.info("每次的件数、毛重、净重、:{}, {}, {}, {}", tWhgenleg.getfQtyblc(), tWhgenleg.getfVolumnblc(), tWhgenleg.getfNetweightblc(),
|
|
|
+ tWhgenleg.getfGrossweightblc());
|
|
|
+ // 覆盖数量、毛重、净重
|
|
|
+ whgenleg.setFQty(tWhgenleg.getfQtyblc());
|
|
|
+ whgenleg.setFNetweight(tWhgenleg.getfNetweightblc());
|
|
|
+ whgenleg.setFGrossweight(tWhgenleg.getfGrossweightblc());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据仓储明细更新库存总帐数量、毛重、净重
|
|
|
*
|
|
@@ -6770,6 +7035,10 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
@Override
|
|
|
public AjaxResult feeReviewSubmit(Long id) {
|
|
|
TWarehousebillsfees warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesById(id);
|
|
|
+ if (StringUtils.isNull(warehousebillsfees.getfCorpid()) || StringUtils.isNull(warehousebillsfees.getfFeeid()) ||
|
|
|
+ StringUtils.isNull(warehousebillsfees.getfFeeunitid())) {
|
|
|
+ throw new WarehouseException("请确认是否维护客户、费用信息、计价单位");
|
|
|
+ }
|
|
|
if (Objects.isNull(warehousebillsfees) || Objects.nonNull(warehousebillsfees.getfReviewDate())) {
|
|
|
throw new WarehouseException("未找到费用信息或费用已被审核");
|
|
|
}
|