|
@@ -4012,18 +4012,22 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
|
|
|
long fId = Long.valueOf(String.valueOf(item.get("fId")));
|
|
|
// 累计计费天数
|
|
|
- storageFeesDto.setEarlySumDays(DateUtils.getDateDay((Date) item.get("fChargedate"), (Date) item.get("fOriginalbilldate")));
|
|
|
+ if (Objects.equals(((Date) item.get("fChargedate")).getTime(), ((Date) item.get("fOriginalbilldate")).getTime())) {
|
|
|
+ storageFeesDto.setEarlySumDays(0L);
|
|
|
+ } else {
|
|
|
+ storageFeesDto.setEarlySumDays(DateUtils.getDateDay((Date) item.get("fChargedate"), (Date) item.get("fOriginalbilldate")));
|
|
|
+ }
|
|
|
// 库存天数
|
|
|
long fInventoryDays;
|
|
|
// 要计费天数
|
|
|
long fBillingDays;
|
|
|
- if ("SJCK".equals(fBilltype)) {
|
|
|
+ if (WarehouseTypeEnum.SJCK.getType().equals(fBilltype)) {
|
|
|
fInventoryDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fOriginalbilldate"));
|
|
|
fBillingDays = fInventoryDays;
|
|
|
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("fOriginalbilldate")) ;
|
|
|
fBillingDays = fInventoryDays;
|
|
|
storageFeesDto.setStartTime(fBsdate);
|
|
|
storageFeesDto.setEndTime((Date) item.get("fOriginalbilldate"));
|
|
@@ -4034,6 +4038,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fChargedate"));
|
|
|
}
|
|
|
storageFeesDto.setDays(fBillingDays);
|
|
|
+ storageFeesDto.setfMblno((String) item.get("fMblno"));
|
|
|
// 赋值要计算的数量单位
|
|
|
storageFeesDto.setfQty(new BigDecimal(String.valueOf(item.get("fQty"))));
|
|
|
storageFeesDto.setfVolumn(new BigDecimal(String.valueOf(item.get("fQty"))));
|
|
@@ -4043,7 +4048,6 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
StorageFeeCalculationResultVO feeCalculationResultVO = tWarehouseAgreementService.getCarryingCost(storageFeesDto);
|
|
|
if (Objects.isNull(feeCalculationResultVO)) {
|
|
|
continue;
|
|
|
-// throw new WarehouseException("单号:" + item.get("fBillno") + ",业务日期:" + item.get("fBsdate") + "未找到仓储费协议,请确认");
|
|
|
}
|
|
|
String mblno = "";
|
|
|
if (StringUtils.isNotNull(item.get("fMblno"))) {
|
|
@@ -4080,15 +4084,12 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
fees.setCreateBy(loginUser.getUser().getUserName());
|
|
|
fees.setfWarehouseid(storageFeesDto.getWarehouseId());
|
|
|
fees.setfProductName(item.get("fGoodsids").toString());
|
|
|
- if (Objects.equals(WarehouseTypeEnum.SJCK.getType(), fBilltype) ||
|
|
|
- Objects.equals(WarehouseTypeEnum.HQZY.getType(), fBilltype)) {
|
|
|
+ if (WarehouseTypeEnum.SJCK.getType().equals(fBilltype) ||
|
|
|
+ WarehouseTypeEnum.HQZY.getType().equals(fBilltype)) {
|
|
|
fees.setfChargedate((Date) item.get("fOriginalbilldate"));
|
|
|
- } else {
|
|
|
- fees.setfChargedate((Date) item.get("fChargedate"));
|
|
|
- }
|
|
|
- if ("SJCK".equals(fBilltype)) {
|
|
|
fees.setfBillingDeadline(fBsdate);
|
|
|
} else {
|
|
|
+ fees.setfChargedate((Date) item.get("fChargedate"));
|
|
|
fees.setfBillingDeadline(warehouseBills.getfBillingDeadline());
|
|
|
}
|
|
|
fees.setfTaxrate(new BigDecimal(taxRate.get(0).getDictValue()));
|
|
@@ -4116,7 +4117,8 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
|
|
|
return AjaxResult.error("请选择客户信息");
|
|
|
}
|
|
|
- long fPid = 0L;
|
|
|
+ tWarehouseBills.setfBillingDeadline(DateUtils.dateConversionMax(tWarehouseBills.getfBillingDeadline()));
|
|
|
+ long fPid;
|
|
|
if (StringUtils.isNull(tWarehouseBills.getfId())) {
|
|
|
// 生成流水号
|
|
|
Date time = new Date();
|
|
@@ -4144,10 +4146,6 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
//调一次公共方法,获取字符类型的true或者false传
|
|
|
String cangKey = sysConfigServiceImpl.selectConfigByKey("agreement.warehouse");
|
|
|
- // 库存总账id
|
|
|
- long whgenlegFeeId = 0;
|
|
|
- // 计费单位
|
|
|
- long feeUnitid = 1;
|
|
|
// 查出所有仓库 给后续匹配仓库名字使用
|
|
|
List<TWarehouse> warehouseList = tWarehouseMapper.selectTWarehouseList(new TWarehouse());
|
|
|
// 查询 出库 货转的库存明细
|
|
@@ -4170,6 +4168,11 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
}
|
|
|
List<Map<String, Object>> tWhgenlegs = tWhgenlegMapper.selectStorageFeeItemList(tWarehouseBills);
|
|
|
if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
|
|
|
+ // 如果是计算之前日期的库存总帐则需要使用当时日期的准确数量
|
|
|
+ if (!tWarehouseBills.getfBillingDeadline().after(new Date())) {
|
|
|
+ updateWhgenlegs(tWarehouseBills, tWhgenlegs);
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, Object> mapItem = getWarehouseItems(tWarehouseBills, tWhgenlegs, loginUser, cangKey);
|
|
|
if (mapItem.containsKey("error")) {
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
@@ -4198,6 +4201,162 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 更新库存总帐当日实际
|
|
|
+ *
|
|
|
+ * @param tWarehouseBills
|
|
|
+ * @param tWhgenlegs
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<Map<String, Object>> updateWhgenlegs(TWarehouseBills tWarehouseBills, List<Map<String, Object>> tWhgenlegs) {
|
|
|
+ // 获取区间时间
|
|
|
+ tWarehouseBills.setItemBsDateList(timeConversion(tWarehouseBills.getfBillingDeadline(), new Date()));
|
|
|
+ // 查询时间区间内的仓储业务明细信息
|
|
|
+ List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectListByCorpId(tWarehouseBills);
|
|
|
+ // 如果没有则直接结束此方法
|
|
|
+ if (CollectionUtils.isEmpty(warehousebillsitemsList)) {
|
|
|
+ return tWhgenlegs;
|
|
|
+ }
|
|
|
+ tWhgenlegs.forEach(whgenleg -> {
|
|
|
+ // 判断是否计算箱号 0为 不计算 1为计算
|
|
|
+ boolean ifCntrno = "1".equals(whgenleg.get("ifCntrno").toString());
|
|
|
+ // 组合一个库存总帐类使用
|
|
|
+ TWhgenleg tWhgenleg = new TWhgenleg();
|
|
|
+ tWhgenleg.setfCorpid(tWarehouseBills.getfCorpid());
|
|
|
+ tWhgenleg.setfQtyblc(Long.parseLong(whgenleg.get("fQty").toString()));
|
|
|
+ tWhgenleg.setfMarks((String) whgenleg.get("fMarks"));
|
|
|
+ tWhgenleg.setfMblno((String) whgenleg.get("fMblno"));
|
|
|
+ tWhgenleg.setfCntrno((String) whgenleg.get("fCntrno"));
|
|
|
+ tWhgenleg.setfGoodsid(Long.parseLong(whgenleg.get("fGoodsid").toString()));
|
|
|
+ tWhgenleg.setfNetweightblc(new BigDecimal(whgenleg.get("fNetweight").toString()));
|
|
|
+ tWhgenleg.setfGrossweightblc(new BigDecimal(whgenleg.get("fGrossweight").toString()));
|
|
|
+ tWhgenleg.setfWarehouseid(Long.parseLong(whgenleg.get("warehouseLocationid").toString()));
|
|
|
+
|
|
|
+ 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.put("fQty", tWhgenleg.getfQtyblc());
|
|
|
+ whgenleg.put("fNetweight", tWhgenleg.getfNetweightblc());
|
|
|
+ whgenleg.put("fGrossweight", tWhgenleg.getfGrossweightblc());
|
|
|
+ });
|
|
|
+ return tWhgenlegs;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据仓储明细更新库存总帐数量、毛重、净重
|
|
|
+ *
|
|
|
+ * @param whgenleg
|
|
|
+ * @param item
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private TWhgenleg updateWhgenlegCalculate(TWhgenleg whgenleg, TWarehousebillsitems item) {
|
|
|
+ // 入库
|
|
|
+ if (WarehouseTypeEnum.SJRK.getType().equals(item.getfBilltype())) {
|
|
|
+ // 修改数量
|
|
|
+ whgenleg.setfQtyblc(whgenleg.getfQtyblc() - item.getfQty());
|
|
|
+ // 修改毛重
|
|
|
+ BigDecimal grossweightblc = whgenleg.getfGrossweightblc().subtract(item.getfGrossweight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ whgenleg.setfGrossweightblc(grossweightblc);
|
|
|
+ // 修改净重
|
|
|
+ BigDecimal netweightcBlc = whgenleg.getfNetweightblc().subtract(item.getfNetweight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ whgenleg.setfNetweightc(netweightcBlc);
|
|
|
+ return whgenleg;
|
|
|
+ } else
|
|
|
+ // 出库
|
|
|
+ if (WarehouseTypeEnum.SJCK.getType().equals(item.getfBilltype())) {
|
|
|
+ // 修改数量
|
|
|
+ whgenleg.setfQtyblc(whgenleg.getfQtyblc() + item.getfQty());
|
|
|
+ // 修改毛重
|
|
|
+ BigDecimal grossweightblc = whgenleg.getfGrossweightblc().add(item.getfGrossweight());
|
|
|
+ whgenleg.setfGrossweightblc(grossweightblc);
|
|
|
+ // 修改净重
|
|
|
+ BigDecimal netweightcBlc = whgenleg.getfNetweightblc().add(item.getfNetweight());
|
|
|
+ whgenleg.setfNetweightc(netweightcBlc);
|
|
|
+ return whgenleg;
|
|
|
+ } else
|
|
|
+ // 调拨
|
|
|
+ if (WarehouseTypeEnum.CKDB.getType().equals(item.getfBilltype())) {
|
|
|
+ BigDecimal netweightcBlc;
|
|
|
+ BigDecimal grossweightblc;
|
|
|
+ if (Objects.equals(item.getfTransferWarehouselocid(), whgenleg.getfWarehouseid())) {
|
|
|
+ // 修改数量
|
|
|
+ whgenleg.setfQtyblc(whgenleg.getfQtyblc() - item.getfQty());
|
|
|
+ // 修改毛重
|
|
|
+ grossweightblc = whgenleg.getfGrossweightblc().subtract(item.getfGrossweight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ // 修改净重
|
|
|
+ netweightcBlc = whgenleg.getfNetweightblc().subtract(item.getfNetweight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ } else {
|
|
|
+ // 修改数量
|
|
|
+ whgenleg.setfQtyblc(whgenleg.getfQtyblc() + item.getfQty());
|
|
|
+ // 修改毛重
|
|
|
+ grossweightblc = whgenleg.getfGrossweightblc().add(item.getfGrossweight());
|
|
|
+ // 修改净重
|
|
|
+ netweightcBlc = whgenleg.getfNetweightblc().add(item.getfNetweight());
|
|
|
+ }
|
|
|
+ whgenleg.setfGrossweightblc(grossweightblc);
|
|
|
+ whgenleg.setfNetweightc(netweightcBlc);
|
|
|
+ return whgenleg;
|
|
|
+ } else
|
|
|
+ // 货权转移
|
|
|
+ if (WarehouseTypeEnum.HQZY.getType().equals(item.getfBilltype())) {
|
|
|
+ BigDecimal netweightcBlc;
|
|
|
+ BigDecimal grossweightblc;
|
|
|
+
|
|
|
+ if (Objects.equals(item.getfTocorpid(), whgenleg.getfCorpid())) {
|
|
|
+ // 修改数量
|
|
|
+ whgenleg.setfQtyblc(whgenleg.getfQtyblc() - item.getfQty());
|
|
|
+ // 修改毛重
|
|
|
+ grossweightblc = whgenleg.getfGrossweightblc().subtract(item.getfGrossweight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ // 修改净重
|
|
|
+ netweightcBlc = whgenleg.getfNetweightblc().subtract(item.getfNetweight()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ } else {
|
|
|
+ // 修改数量
|
|
|
+ whgenleg.setfQtyblc(whgenleg.getfQtyblc() + item.getfQty());
|
|
|
+ // 修改毛重
|
|
|
+ grossweightblc = whgenleg.getfGrossweightblc().add(item.getfGrossweight());
|
|
|
+ // 修改净重
|
|
|
+ netweightcBlc = whgenleg.getfNetweightblc().add(item.getfNetweight());
|
|
|
+ }
|
|
|
+ whgenleg.setfGrossweightblc(grossweightblc);
|
|
|
+ whgenleg.setfNetweightc(netweightcBlc);
|
|
|
+ return whgenleg;
|
|
|
+ }
|
|
|
+ return whgenleg;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间格式转换
|
|
|
+ *
|
|
|
+ * @param start
|
|
|
+ * @param end
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<String> timeConversion(Date start, Date end) {
|
|
|
+ List<String> timeList = new ArrayList();
|
|
|
+ timeList.add(DateUtils.dateToString(DateUtils.dateConversionMax(start)));
|
|
|
+ timeList.add(DateUtils.dateToString(DateUtils.dateConversionMax(end)));
|
|
|
+ return timeList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 批量生成计算仓储费信息
|
|
|
*
|
|
|
* @param warehouseBills
|
|
@@ -4252,6 +4411,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
|
|
|
continue;
|
|
|
}
|
|
|
storageFeesDto.setDays(fBillingDays);
|
|
|
+ storageFeesDto.setfMblno((String) item.get("fMblno"));
|
|
|
// 赋值要计算的数量单位
|
|
|
storageFeesDto.setfQty(new BigDecimal(String.valueOf(item.get("fQty"))));
|
|
|
storageFeesDto.setfVolumn(new BigDecimal(String.valueOf(item.get("fQty"))));
|