Commit 6a0c63ef authored by 顾俭's avatar 顾俭

aship/aship#1 防伪码功能:申请防伪码接口

parent 82a6f607
package com.i1.erp.barcode.service;
import com.i1.base.exception.IOneServiceException;
import com.i1.erp.entity.request.*;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDtlDto;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Service
public class BarCodeGenService implements IBarCodeGenService {
private static final Logger logger = LoggerFactory.getLogger(BarCodeGenService.class);
@Override
public Request genXml(PoBarcodeDto input) throws IOneServiceException {
String organization = Objects.requireNonNull(input.getFactoryUid());
String pmm01 = Objects.requireNonNull(input.getPurchaseOrderUid());
List<PoBarcodeDtlDto> dtls = Objects.requireNonNull(input.getDtl());
Access access = Access.of(Authentication.of("017552", "tiptop"),
Connection.of("SRM", "192.168.1.1"),
Organization.of(organization),
Locale.of("zh_cn"));
List<Field> mstFieldList = new ArrayList<>();
mstFieldList.add(Field.of("pmm01", pmm01));
Record mstRecord = Record.of(mstFieldList);
Master mst = Master.of(mstRecord, "MST");
List<Detail> detailList = new ArrayList<>();
List<Record> dtlRecordList = new ArrayList<>();
for (PoBarcodeDtlDto dtl : dtls) {
List<Field> dtlFieldList = new ArrayList<>();
dtlFieldList.add(Field.of("pmn02", String.valueOf(dtl.getPoDtlRow())));
dtlFieldList.add(Field.of("num", String.valueOf(dtl.getBarcodeAmount())));
dtlFieldList.add(Field.of("pmn04", dtl.getProductUid()));
Record dtlRecord = Record.of(dtlFieldList);
dtlRecordList.add(dtlRecord);
}
Detail detail = Detail.of(dtlRecordList, "DTL");
detailList.add(detail);
// recordSet:mst + dtl
RecordSet recordSet = RecordSet.of("1", mst, detailList);
List<RecordSet> recordSetList = new ArrayList<>();
recordSetList.add(recordSet);
RequestContent requestContent = new RequestContent();
requestContent.setDocument(Document.of(recordSetList));
requestContent.setParameter(Parameter.of(Record.of(null)));
return Request.of(access, requestContent);
}
}
package com.i1.erp.barcode.service;
import com.i1.base.exception.IOneServiceException;
import com.i1.erp.entity.request.Request;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDto;
public interface IBarCodeGenService {
Request genXml(PoBarcodeDto input) throws IOneServiceException;
}
package com.i1.erp.barcode.soap;
import com.i1.base.exception.IOneServiceException;
import com.i1.erp.WebServiceClient;
import com.i1.erp.barcode.service.BarCodeGenService;
import com.i1.erp.base.web.dto.SyncResponse;
import com.i1.erp.entity.request.Request;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDto;
import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.endpoint.Client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import static com.i1.erp.base.web.dto.SyncResponseCode.FAIL_CODE;
@Component
public class BarcodeGenClient extends WebServiceClient {
@Value("${srm.soapWs.wsDynamicClient}")
public Boolean wsDynamicClient;
@Value("${srm.soapWs.wsUrl}")
private String WS_URL;
@Value("${srm.soapWs.genBarcode}")
public String ERP_GEN_BARCODE_OP;
private Logger logger = LoggerFactory.getLogger(BarcodeGenClient.class);
@Autowired
private BarCodeGenService barCodeGenServicel;
public SyncResponse genBarcode(PoBarcodeDto input) {
try {
logger.info("prepare gen barcode {}", input.getFactoryUid() + "-" + input.getPurchaseOrderUid());
Request requestXml = null;
try {
requestXml = barCodeGenServicel.genXml(input);
} catch (Exception e) {
logger.error("error:", e);
return SyncResponse.of(FAIL_CODE, e.getMessage());
}
if (requestXml == null) {
logger.error("error:防伪码申请无法生成XML结构");
return SyncResponse.of(FAIL_CODE, "防伪码申请无法生成XML结构");
}
logger.info(covertObjectToXML(requestXml, Request.class));
if (StringUtils.isBlank(WS_URL) || StringUtils.isBlank(ERP_GEN_BARCODE_OP)) {
throw new IOneServiceException("WSDL不可为空.");
}
Client client = getClient(WS_URL);
Object[] objects = client.invoke(ERP_GEN_BARCODE_OP, new Object[]{requestXml});
client.destroy();
logger.info(objects[0].toString());
return new SyncResponse();
} catch (Exception e) {
logger.error("e", e);
return SyncResponse.of(FAIL_CODE, e.getMessage());
}
}
}
...@@ -15,7 +15,7 @@ import static com.i1.srm.am.entity.Resource.*; ...@@ -15,7 +15,7 @@ import static com.i1.srm.am.entity.Resource.*;
public enum Function { public enum Function {
INDEX_NOTICE_FUNCTION(0, 0, "首页公告", Lists.newArrayList(QUERY, CREATE, VIEW_NOTICE_HISTORY)), INDEX_NOTICE_FUNCTION(0, 0, "首页公告", Lists.newArrayList(QUERY, CREATE, VIEW_NOTICE_HISTORY)),
//1采购协同管理 //1采购协同管理
PURCHASE_ORDER_FUNCTION(1, 11, "采购单管理", Lists.newArrayList(QUERY, VIEW, RETURN, EXPORT, GET_BARCODE)), PURCHASE_ORDER_FUNCTION(1, 11, "采购单管理", Lists.newArrayList(QUERY, VIEW, RETURN, EXPORT, GEN_BARCODE)),
PURCHASE_ORDER_CHANGE_FUNCTION(14, 12, "采购变更单管理", Lists.newArrayList(QUERY, VIEW, EXPORT, RETURN, CONFIRM, RETURN_ACCEPT, RETURN_REJECT, CONFIRM_ACCEPT, CONFIRM_REJECT)), PURCHASE_ORDER_CHANGE_FUNCTION(14, 12, "采购变更单管理", Lists.newArrayList(QUERY, VIEW, EXPORT, RETURN, CONFIRM, RETURN_ACCEPT, RETURN_REJECT, CONFIRM_ACCEPT, CONFIRM_REJECT)),
//2送货协同管理 //2送货协同管理
......
...@@ -63,7 +63,7 @@ public enum Resource { ...@@ -63,7 +63,7 @@ public enum Resource {
CHECK_RELEASE(53, "审核发布"), CHECK_RELEASE(53, "审核发布"),
ADDITIONAL_RECORDING(54, "补录税票"), ADDITIONAL_RECORDING(54, "补录税票"),
SEND_TO_ERP(55, "上传ERP"), SEND_TO_ERP(55, "上传ERP"),
GET_BARCODE(56, "申请防伪码") GEN_BARCODE(56, "申请防伪码")
; ;
private Integer id; private Integer id;
......
package com.i1.srm.purchaseOrder.web; package com.i1.srm.purchaseOrder.web;
import com.i1.base.exception.IOneWebRestfulException;
import com.i1.base.web.AbstractController; import com.i1.base.web.AbstractController;
import com.i1.erp.barcode.soap.BarcodeGenClient;
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.PoMstFile; import com.i1.srm.purchaseOrder.dao.entity.PoMstFile;
import com.i1.srm.purchaseOrder.service.IPoMstFileService; import com.i1.srm.purchaseOrder.service.IPoMstFileService;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDtlDto;
import com.i1.srm.purchaseOrder.web.dto.PoBarcodeDto;
import com.i1.srm.purchaseOrder.web.dto.PoMstFileDto; import com.i1.srm.purchaseOrder.web.dto.PoMstFileDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
@RestController @RestController
@RequestMapping("/purchaseOrders") @RequestMapping("/purchaseOrders")
@SecuredPage(Function.PURCHASE_ORDER_FUNCTION) @SecuredPage(Function.PURCHASE_ORDER_FUNCTION)
public class PoMstFileController extends AbstractController<PoMstFile, PoMstFileDto> { public class PoMstFileController extends AbstractController<PoMstFile, PoMstFileDto> {
private Logger logger = LoggerFactory.getLogger(PoMstFileController.class);
@Autowired @Autowired
private IPoMstFileService service; private IPoMstFileService service;
...@@ -22,4 +36,31 @@ public class PoMstFileController extends AbstractController<PoMstFile, PoMstFile ...@@ -22,4 +36,31 @@ public class PoMstFileController extends AbstractController<PoMstFile, PoMstFile
protected IPoMstFileService getService() { protected IPoMstFileService getService() {
return service; return service;
} }
@Autowired
private BarcodeGenClient barcodeGenClient;
/**
* 申请防伪码
*
* @param input
* @return soap接口返回结果
* @throws IOneWebRestfulException
*/
@RequestMapping(value = "/genBarcode", method = RequestMethod.POST)
@ResourcePermission(values = {Resource.GEN_BARCODE})
@ResponseStatus(HttpStatus.CREATED)
public SyncResponse getBarCode(@RequestBody PoBarcodeDto input) throws IOneWebRestfulException {
try {
// TODO check
String factoryUid = Objects.requireNonNull(input.getFactoryUid());
String purchaseOrderUid = Objects.requireNonNull(input.getPurchaseOrderUid());
List<PoBarcodeDtlDto> dtls = Objects.requireNonNull(input.getDtl());
return barcodeGenClient.genBarcode(input);
} catch (Exception e) {
throw new IOneWebRestfulException(e);
}
}
} }
package com.i1.srm.purchaseOrder.web.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.math.BigDecimal;
@JsonIgnoreProperties(ignoreUnknown = true)
public class PoBarcodeDtlDto {
private Long poDtlRow;
private String productUid;
private BigDecimal barcodeAmount;
public Long getPoDtlRow() {
return poDtlRow;
}
public void setPoDtlRow(Long poDtlRow) {
this.poDtlRow = poDtlRow;
}
public String getProductUid() {
return productUid;
}
public void setProductUid(String productUid) {
this.productUid = productUid;
}
public BigDecimal getBarcodeAmount() {
return barcodeAmount;
}
public void setBarcodeAmount(BigDecimal barcodeAmount) {
this.barcodeAmount = barcodeAmount;
}
}
package com.i1.srm.purchaseOrder.web.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public class PoBarcodeDto {
private String factoryUid;
private String purchaseOrderUid;
private List<PoBarcodeDtlDto> dtl;
public String getFactoryUid() {
return factoryUid;
}
public void setFactoryUid(String factoryUid) {
this.factoryUid = factoryUid;
}
public String getPurchaseOrderUid() {
return purchaseOrderUid;
}
public void setPurchaseOrderUid(String purchaseOrderUid) {
this.purchaseOrderUid = purchaseOrderUid;
}
public List<PoBarcodeDtlDto> getDtl() {
return dtl;
}
public void setDtl(List<PoBarcodeDtlDto> dtl) {
this.dtl = dtl;
}
}
...@@ -102,6 +102,8 @@ srm: ...@@ -102,6 +102,8 @@ srm:
defaultPoChgReturnType: 0 defaultPoChgReturnType: 0
supplierErpCheck: false supplierErpCheck: false
supplierErpSend: false supplierErpSend: false
genBarcode: SRM_genbarcode
email: email:
enable: true enable: true
recipients: gujian@benchmarkchina.com,raven@benchmarkchina.com recipients: gujian@benchmarkchina.com,raven@benchmarkchina.com
......
...@@ -13,7 +13,11 @@ ...@@ -13,7 +13,11 @@
}]); }]);
angular.module('IOne').factory('PoMstFileService', function ($http) { angular.module('IOne').factory('PoMstFileService', function ($http) {
return angular.extend(new BaseService('/purchaseOrders', $http), {}); return angular.extend(new BaseService('/purchaseOrders', $http), {
genBarcode: function (input) {
return this.httpService.post('/purchaseOrders/genBarcode', input);
}
});
}); });
angular.module('IOne').factory('PoDtlFileService', function ($http) { angular.module('IOne').factory('PoDtlFileService', function ($http) {
......
...@@ -120,11 +120,10 @@ ...@@ -120,11 +120,10 @@
<div class="button-bar"> <div class="button-bar">
<button class="btn btn-default mrs" ng-click="view()" ng-disabled="!currentPurchaseOrderMaster" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'VIEW' ">查看</button> <button class="btn btn-default mrs" ng-click="view()" ng-disabled="!currentPurchaseOrderMaster" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'VIEW' ">查看</button>
<button class="btn btn-default mrs" ng-click="openReturnPage()" ng-disabled="!canDoReturn()" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'RETURN' ">回执</button> <button class="btn btn-default mrs" ng-click="openReturnPage()" ng-disabled="!canDoReturn()" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'RETURN' ">回执</button>
<button class="btn btn-default mrs" ng-click="clickExport()" ng-disabled="gridOptions.data.length == 0" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'EXPORT' ">导出</button>
<button class="btn btn-default mrs" data-toggle="modal" data-target="#get-barcode-dlg" <button class="btn btn-default mrs" data-toggle="modal" data-target="#get-barcode-dlg"
ng-disabled="!currentPurchaseOrderMaster" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'GET_BARCODE' ">申请防伪码 ng-disabled="!currentPurchaseOrderMaster" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'GEN_BARCODE' ">申请防伪码
</button> </button>
<button class="btn btn-default mrs" ng-click="clickExport()" ng-disabled="gridOptions.data.length == 0" acl-check func=" 'PURCHASE_ORDER_FUNCTION' " resource=" 'EXPORT' ">导出</button>
<ul uib-pagination total-items="pageOption.totalElements" ng-model="pageOption.page" items-per-page="pageOption.size" ng-change="getPurchaseOrderDetails()" <ul uib-pagination total-items="pageOption.totalElements" ng-model="pageOption.page" items-per-page="pageOption.size" ng-change="getPurchaseOrderDetails()"
class="pagination-sm pull-right mbn mtn" boundary-links="true" rotate="false" max-size="5" class="pagination-sm pull-right mbn mtn" boundary-links="true" rotate="false" max-size="5"
previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;"> previous-text="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;">
...@@ -155,7 +154,7 @@ ...@@ -155,7 +154,7 @@
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" type="button" ng-click="getBarcode()">确认</button> <button class="btn btn-primary" type="button" ng-click="genBarcode()">确认</button>
<button class="btn btn-primary" type="button" data-dismiss="modal">取消</button> <button class="btn btn-primary" type="button" data-dismiss="modal">取消</button>
</div> </div>
</div> </div>
......
...@@ -295,20 +295,32 @@ angular.module('IOne').controller('PurchaseOrderQueryController', function ($sco ...@@ -295,20 +295,32 @@ angular.module('IOne').controller('PurchaseOrderQueryController', function ($sco
data: [] data: []
}; };
$scope.getBarcode = function () { $scope.genBarcode = function () {
var barcodeInput = []; var barcodeInput = {};
var barcodeDtlInput = [];
barcodeInput.factoryUid = $scope.selectedPurchaseOrder.factory.factoryUid;
barcodeInput.purchaseOrderUid = $scope.selectedPurchaseOrder.poMst.purchaseOrderUid;
angular.forEach($scope.barcodeGridOptions.data, function (item) { angular.forEach($scope.barcodeGridOptions.data, function (item) {
if (item.barcodeAmount && item.barcodeAmount > 0) { if (item.barcodeAmount && item.barcodeAmount > 0) {
barcodeInput.push({ barcodeDtlInput.push({
poDtlRow: item.poDtlRow, poDtlRow: item.poDtlRow,
productUid: item.product.productUid, productUid: item.product.productUid,
barcodeAmount: item.barcodeAmount barcodeAmount: item.barcodeAmount
}) })
} }
}); });
barcodeInput.dtl = barcodeDtlInput;
console.info(barcodeInput); console.info(barcodeInput);
//调用服务 /$scope.selectedPurchaseOrder.poMst.id/getBarcode //调用服务 /$scope.selectedPurchaseOrder.poMst.id/getBarcode
$('#get-barcode-dlg').modal('hide')
PoMstFileService.genBarcode(barcodeInput).then(function (response) {
console.info(response);
console.info(response.data);
});
$('#get-barcode-dlg').modal('hide');
}; };
// load po dtl data // load po dtl data
......
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