Commit 9af7e0e5 authored by 顾俭's avatar 顾俭

条码申请数量预扣减 防等待接口时间内重复申请

parent 64d23bdd
...@@ -6,6 +6,9 @@ import com.i1.erp.barcode.service.IBarcodeGenService; ...@@ -6,6 +6,9 @@ import com.i1.erp.barcode.service.IBarcodeGenService;
import com.i1.erp.base.web.dto.SyncResponse; import com.i1.erp.base.web.dto.SyncResponse;
import com.i1.erp.entity.request.Request; import com.i1.erp.entity.request.Request;
import com.i1.erp.entity.response.Response; import com.i1.erp.entity.response.Response;
import com.i1.srm.purchaseOrder.dao.entity.PoDtlFile;
import com.i1.srm.purchaseOrder.service.IPoDtlFileService;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDtlDto;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDto; import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDto;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.endpoint.Client; import org.apache.cxf.endpoint.Client;
...@@ -17,6 +20,8 @@ import org.springframework.stereotype.Component; ...@@ -17,6 +20,8 @@ import org.springframework.stereotype.Component;
import tw.com.dsc.tiptop.tiptopservicegateway.SRMGenbarcodeRequestSRMGenbarcodeRequest; import tw.com.dsc.tiptop.tiptopservicegateway.SRMGenbarcodeRequestSRMGenbarcodeRequest;
import tw.com.dsc.tiptop.tiptopservicegateway.SRMGenbarcodeResponseSRMGenbarcodeResponse; import tw.com.dsc.tiptop.tiptopservicegateway.SRMGenbarcodeResponseSRMGenbarcodeResponse;
import java.util.Optional;
import static com.i1.erp.base.web.dto.SyncResponseCode.FAIL_CODE; import static com.i1.erp.base.web.dto.SyncResponseCode.FAIL_CODE;
import static com.i1.erp.base.web.dto.SyncResponseCode.SUCCESS_CODE; import static com.i1.erp.base.web.dto.SyncResponseCode.SUCCESS_CODE;
import static com.i1.srm.utils.SafeType.safeString; import static com.i1.srm.utils.SafeType.safeString;
...@@ -33,11 +38,17 @@ public class BarcodeGenClient extends WebServiceClient { ...@@ -33,11 +38,17 @@ public class BarcodeGenClient extends WebServiceClient {
@Value("${srm.soapWs.wsdlUrlGenBarcode}") @Value("${srm.soapWs.wsdlUrlGenBarcode}")
private String WSDL_URL; private String WSDL_URL;
@Value("${srm.soapWs.recoveryBarcodeAppliedAmount}")
private Boolean RECOVERY_APPLIED_AMOUNT;
private Logger logger = LoggerFactory.getLogger(BarcodeGenClient.class); private Logger logger = LoggerFactory.getLogger(BarcodeGenClient.class);
@Autowired @Autowired
private IBarcodeGenService barcodeGenService; private IBarcodeGenService barcodeGenService;
@Autowired
private IPoDtlFileService poDtlFileService;
public SyncResponse genBarcode(PoBarcodeDto input) { public SyncResponse genBarcode(PoBarcodeDto input) {
try { try {
// xml // xml
...@@ -70,6 +81,17 @@ public class BarcodeGenClient extends WebServiceClient { ...@@ -70,6 +81,17 @@ public class BarcodeGenClient extends WebServiceClient {
if (response.getExecution().getStatus().getCode().equalsIgnoreCase("0")) { if (response.getExecution().getStatus().getCode().equalsIgnoreCase("0")) {
return SyncResponse.of(SUCCESS_CODE, "申请防伪码成功"); return SyncResponse.of(SUCCESS_CODE, "申请防伪码成功");
} else { } else {
if (RECOVERY_APPLIED_AMOUNT) {
logger.info("采购单{}恢复条码申请预扣减数量", input.getPurchaseOrderUid());
for (PoBarcodeDtlDto dtl : input.getDtl()) {
Optional<PoDtlFile> opPoDtl = poDtlFileService.findByPoMstPurchaseOrderUidAndPoDtlRowAndFactoryFactoryUid(input.getPurchaseOrderUid(), dtl.getPoDtlRow(), input.getFactoryUid());
if (opPoDtl.isPresent()) {
PoDtlFile poDtlFile = opPoDtl.get();
poDtlFile.setAppliedAmount(poDtlFile.getAppliedAmount().subtract(dtl.getBarcodeAmount()));
poDtlFileService.update(poDtlFile);
}
}
}
String errorDetails = String.format("失败码:%s, 原因:%s,SQL:%s", String errorDetails = String.format("失败码:%s, 原因:%s,SQL:%s",
safeString(response.getExecution().getStatus().getCode()), safeString(response.getExecution().getStatus().getCode()),
safeString(response.getExecution().getStatus().getDescription()), safeString(response.getExecution().getStatus().getDescription()),
......
...@@ -5,8 +5,6 @@ import com.i1.base.web.AbstractController; ...@@ -5,8 +5,6 @@ import com.i1.base.web.AbstractController;
import com.i1.erp.barcode.soap.BarcodeGenClient; import com.i1.erp.barcode.soap.BarcodeGenClient;
import com.i1.erp.base.web.dto.SyncResponse; import com.i1.erp.base.web.dto.SyncResponse;
import com.i1.srm.am.entity.Function; import com.i1.srm.am.entity.Function;
import com.i1.srm.am.entity.Resource;
import com.i1.srm.am.service.ResourcePermission;
import com.i1.srm.am.service.SecuredPage; import com.i1.srm.am.service.SecuredPage;
import com.i1.srm.purchaseOrder.dao.entity.PoDtlFile; import com.i1.srm.purchaseOrder.dao.entity.PoDtlFile;
import com.i1.srm.purchaseOrder.dao.entity.PoMstFile; import com.i1.srm.purchaseOrder.dao.entity.PoMstFile;
...@@ -65,18 +63,32 @@ public class PoMstFileController extends AbstractController<PoMstFile, PoMstFile ...@@ -65,18 +63,32 @@ public class PoMstFileController extends AbstractController<PoMstFile, PoMstFile
String purchaseOrderUid = Objects.requireNonNull(input.getPurchaseOrderUid()); String purchaseOrderUid = Objects.requireNonNull(input.getPurchaseOrderUid());
List<PoBarcodeDtlDto> dtls = Objects.requireNonNull(input.getDtl()); List<PoBarcodeDtlDto> dtls = Objects.requireNonNull(input.getDtl());
SyncResponse syncResponse = barcodeGenClient.genBarcode(input); // check
// 更新已申请数量 for (PoBarcodeDtlDto dtl : dtls) {
if (SUCCESS_CODE.equals(syncResponse.getCode())) { Optional<PoDtlFile> opPoDtl = poDtlFileService.findByPoMstPurchaseOrderUidAndPoDtlRowAndFactoryFactoryUid(purchaseOrderUid, dtl.getPoDtlRow(), factoryUid);
for (PoBarcodeDtlDto dtl : dtls) { if (opPoDtl.isPresent()) {
Optional<PoDtlFile> opPoDtl = poDtlFileService.findByPoMstPurchaseOrderUidAndPoDtlRowAndFactoryFactoryUid(purchaseOrderUid, dtl.getPoDtlRow(), factoryUid); PoDtlFile poDtlFile = opPoDtl.get();
if (opPoDtl.isPresent()) { BigDecimal orderAmount = poDtlFile.getOrderAmount() == null ? BigDecimal.ZERO : poDtlFile.getOrderAmount();
PoDtlFile poDtlFile = opPoDtl.get(); BigDecimal appliedAmount = poDtlFile.getAppliedAmount() == null ? BigDecimal.ZERO : poDtlFile.getAppliedAmount();
poDtlFile.setAppliedAmount(dtl.getBarcodeAmount().add(poDtlFile.getAppliedAmount() == null ? BigDecimal.ZERO : poDtlFile.getAppliedAmount())); BigDecimal barcodeAmount = dtl.getBarcodeAmount() == null ? BigDecimal.ZERO : dtl.getBarcodeAmount();
poDtlFileService.update(poDtlFile); if (appliedAmount.add(barcodeAmount).compareTo(orderAmount) > 0) {
throw new Exception("申请数量不能超过可申请数量,请刷新查看");
} }
} }
} }
// 先更新已申请数量,防止接口等待期间重复申请
for (PoBarcodeDtlDto dtl : dtls) {
Optional<PoDtlFile> opPoDtl = poDtlFileService.findByPoMstPurchaseOrderUidAndPoDtlRowAndFactoryFactoryUid(purchaseOrderUid, dtl.getPoDtlRow(), factoryUid);
if (opPoDtl.isPresent()) {
PoDtlFile poDtlFile = opPoDtl.get();
poDtlFile.setAppliedAmount(dtl.getBarcodeAmount().add(poDtlFile.getAppliedAmount() == null ? BigDecimal.ZERO : poDtlFile.getAppliedAmount()));
poDtlFileService.update(poDtlFile);
}
}
SyncResponse syncResponse = barcodeGenClient.genBarcode(input);
return syncResponse; return syncResponse;
} catch (Exception e) { } catch (Exception e) {
throw new IOneWebRestfulException(e); throw new IOneWebRestfulException(e);
......
...@@ -119,6 +119,7 @@ srm: ...@@ -119,6 +119,7 @@ srm:
voidBarcode: SRM_voidbarcode voidBarcode: SRM_voidbarcode
getBarcodeStatus: SRM_getbarcodestatus getBarcodeStatus: SRM_getbarcodestatus
fahuoConfirm: SRM_fahuoconfirm fahuoConfirm: SRM_fahuoconfirm
recoveryBarcodeAppliedAmount: false
email: email:
enable: true enable: true
recipients: gujian@benchmarkchina.com,raven@benchmarkchina.com recipients: gujian@benchmarkchina.com,raven@benchmarkchina.com
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment