diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisElectronicSitePagMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisElectronicSitePagMapper.java index f9a84bbbe..f95251b3a 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisElectronicSitePagMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisElectronicSitePagMapper.java @@ -38,6 +38,19 @@ public interface EmisElectronicSitePagMapper extends BaseMapper getTotalAvailablePagList(@Param("useSiteCode")String useSiteCode,@Param("prefix")String prefix); + @Select("select * from emis_electronic_site_pag where use_site_code='${useSiteCode}' and prefix='${prefix}' and material_code='${materialCode}' and has_bill_count>0 order by has_bill_count asc") + @ResultMap("EmisElectronicSitePagResult") + public List selectAvailablePagListByMaterialCode(@Param("useSiteCode")String useSiteCode,@Param("prefix")String prefix,@Param("materialCode") String materialCode); + + + /** + * 获取某类面单数 + * @return + */ + @Select("select sum(has_bill_count) as has_bill_count from emis_electronic_site_pag where use_site_code='${useSiteCode}' and prefix='${prefix}' and material_code='${materialCode}' and has_bill_count>0 GROUP BY material_code") + @ResultMap("EmisElectronicSitePagResult") + public int getTotalAvailablePagCount(@Param("useSiteCode")String useSiteCode,@Param("prefix")String prefix,@Param("materialCode") String materialCode); + /** * 获取单个面单是否可用 * @return @@ -56,6 +69,15 @@ public interface EmisElectronicSitePagMapper extends BaseMapper subBillList= emisElectronicSitePagMapper.selectAvailablePagListByMaterialCode(useSiteCode,prefix,"1002"); + for (EmisElectronicSitePag pag:subBillList) { + if(pag.getHasBillCount()>=hasQty){ + // 占用子单号 + emisElectronicSitePagMapper.updateRealMatchSubBill(hasQty,pag.getId()); + hasQty=0; + }else{ + emisElectronicSitePagMapper.updateRealMatchSubBill(pag.getHasBillCount(),pag.getId()); + hasQty=hasQty-pag.getHasBillCount(); + } + // 扣减完毕后退出循环 + if(hasQty<=0){ + break; + } + } + + redissonService.unlock(lockKey); + return waybillNo; + } + + /** + * 获取站点可用面单数据 + * @param useSiteCode + * @param prefix + * @param materialCode + * @return + */ + public int getTotalAvailablePagCount(String useSiteCode, String prefix, String materialCode){ + return emisElectronicSitePagMapper.getTotalAvailablePagCount(useSiteCode,prefix,materialCode); + } + /** * 查询电子面单 * diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index 3d4aba7c9..3940c6dd7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -66,6 +66,10 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb @Autowired private EmisTransLineMapper emisTransLineMapper; + @Autowired + private IEmisElectronicSitePagService emisElectronicSitePagService; + + /** * 直接数据查询运单列表 by billCode @@ -525,13 +529,26 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb */ private void addWayBill(EmisWaybill emisWaybillSave) throws EmisBizError { + // 子单号做扣减 + if("1".equals(emisWaybillSave.getBlGenSubbill())) { + int subBillCount = emisElectronicSitePagService.getTotalAvailablePagCount(emisWaybillSave.getSendSiteCode(), "T7080", "1002"); + if(subBillCount<=0){ + throw new EmisBizError(EmisBizErrorType.FAIL,"子单数量不足"); + } + } + // 公共计算部分 calcWayBillCommonInfo(emisWaybillSave); + //补齐数据 emisWaybillSave.preInsert(); emisWaybillMapper.insertEmisWaybill(emisWaybillSave); + // 扣减子单 + emisElectronicSitePagService.realMatchSubBill(emisWaybillSave.getSendSiteCode(),"T7080",emisWaybillSave.getParcelQty()); + + // 产生主键插入其他数据 // 插入费用 List feeitemList=emisWaybillSave.getFeeitemList();