Commit cc2c1215 authored by 顾俭's avatar 顾俭

Merge branch '#3' into 'master'

aship/aship#3 防伪码功能-作废重打

See merge request !5
parents 919008ff a7df49fa
...@@ -184,7 +184,9 @@ combineJs { ...@@ -184,7 +184,9 @@ combineJs {
'src/main/resources/static/app/srm/invoice/view/view.js', 'src/main/resources/static/app/srm/invoice/view/view.js',
'src/main/resources/static/app/srm/session/session.js', 'src/main/resources/static/app/srm/session/session.js',
'src/main/resources/static/app/srm/session/query/query.js' 'src/main/resources/static/app/srm/session/query/query.js',
'src/main/resources/static/app/srm/barcode/barcode.js',
'src/main/resources/static/app/srm/barcode/query/query.js'
) )
dest = file("src/main/resources/static/all.js") dest = file("src/main/resources/static/all.js")
......
package com.i1.erp.barcode.service; package com.i1.erp.barcode.service;
import com.i1.base.exception.IOneServiceException; import com.i1.base.exception.IOneServiceException;
import com.i1.erp.entity.request.Request; import com.i1.erp.entity.request.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service @Service
public class BarcodeGetStatusService implements IBarcodeGetStatusService { public class BarcodeGetStatusService implements IBarcodeGetStatusService {
@Override @Override
public Request getRequestXml(String organization, String barcode) throws IOneServiceException { public Request getRequestXml(String organization, String barcode) throws IOneServiceException {
if (StringUtils.isBlank(organization) || StringUtils.isBlank(barcode)) {
throw new IOneServiceException("防伪码状态查询参数为空");
}
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("barcode", barcode));
Record mstRecord = Record.of(mstFieldList);
Master mst = Master.of(mstRecord, "MST");
RecordSet recordSet = RecordSet.of("1", mst);
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 null; return Request.of(access, requestContent);
} }
} }
package com.i1.erp.barcode.service; package com.i1.erp.barcode.service;
import com.i1.base.exception.IOneServiceException; import com.i1.base.exception.IOneServiceException;
import com.i1.erp.entity.request.Request; import com.i1.erp.entity.request.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service @Service
public class BarcodeVoidService implements IBarcodeVoidService { public class BarcodeVoidService implements IBarcodeVoidService {
@Override @Override
public Request getRequestXml(String organization, String barcode) throws IOneServiceException { public Request getRequestXml(String organization, String barcode) throws IOneServiceException {
return null;
if (StringUtils.isBlank(organization)|| StringUtils.isBlank(barcode)) {
throw new IOneServiceException("防伪码作废参数为空");
}
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<>();
// 1、批次作废2、单个条码作废
mstFieldList.add(Field.of("type", "2"));
Record mstRecord = Record.of(mstFieldList);
Master mst = Master.of(mstRecord, "MST");
List<Detail> detailList = new ArrayList<>();
List<Record> dtlRecordList = new ArrayList<>();
List<Field> dtlFieldList = new ArrayList<>();
dtlFieldList.add(Field.of("barcode", barcode));
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);
} }
} }
...@@ -13,10 +13,12 @@ import static com.i1.srm.am.entity.Resource.*; ...@@ -13,10 +13,12 @@ import static com.i1.srm.am.entity.Resource.*;
@JsonFormat(shape = JsonFormat.Shape.OBJECT) @JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Function { public enum Function {
// TODO 新环境id重整
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, GEN_BARCODE, PRINT_BARCODE)), PURCHASE_ORDER_FUNCTION(1, 11, "采购单管理", Lists.newArrayList(QUERY, VIEW, RETURN, EXPORT, GEN_BARCODE, PRINT_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)),
BARCODE(92,13,"防伪码作废重打", Lists.newArrayList(VOID_BARCODE,PRINT_BARCODE,GET_BARCODE_STATUS)),
//2送货协同管理 //2送货协同管理
DELIVERY_ORDER_FUNCTION(2, 21, "送货单管理", Lists.newArrayList(QUERY, CREATE, UPDATE, VIEW, DELETE, CREATE_LABEL, UPDATE_LABEL, RELEASE, UNDO_RELEASE, EXPORT)), DELIVERY_ORDER_FUNCTION(2, 21, "送货单管理", Lists.newArrayList(QUERY, CREATE, UPDATE, VIEW, DELETE, CREATE_LABEL, UPDATE_LABEL, RELEASE, UNDO_RELEASE, EXPORT)),
......
package com.i1.srm.purchaseOrder.web;
import com.i1.base.exception.IOneWebRestfulException;
import com.i1.erp.barcode.soap.BarcodeGetStatusClient;
import com.i1.erp.barcode.soap.BarcodePrintClient;
import com.i1.erp.barcode.soap.BarcodeVoidClient;
import com.i1.erp.base.web.dto.SyncResponse;
import com.i1.erp.base.web.dto.SyncResponseWithList;
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.purchaseOrder.web.dto.PoBarcodePrintDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import static com.i1.erp.barcode.soap.BarcodePrintClient.TYPE_REPRINT;
import static com.i1.erp.base.web.dto.SyncResponseCode.SUCCESS_CODE;
/**
* 申请防伪码在/purchaseOrders/genBarcode
* 按项次首次获取防伪码打印url在/purchaseOrderDetails/{id}/printBarcode
*/
@RestController
@RequestMapping("/barcode")
@SecuredPage(Function.BARCODE)
public class BarcodeController {
@Autowired
private BarcodeGetStatusClient barcodeGetStatusClient;
@Autowired
private BarcodeVoidClient barcodeVoidClient;
@Autowired
private BarcodePrintClient barCodePrintClient;
private Logger logger = LoggerFactory.getLogger(BarcodeController.class);
@RequestMapping(value = "/status", method = RequestMethod.GET)
@ResourcePermission(values = {Resource.GET_BARCODE_STATUS})
public SyncResponse getBarCodeStatus(@RequestParam String factoryUid, @RequestParam String barcode) throws IOneWebRestfulException {
return barcodeGetStatusClient.getBarcodeStatus(factoryUid, barcode);
}
@RequestMapping(value = "/void", method = RequestMethod.DELETE)
@ResourcePermission(values = {Resource.VOID_BARCODE})
public SyncResponse voidBarcode(@RequestParam String factoryUid, @RequestParam String barcode) throws IOneWebRestfulException {
logger.info("作废防伪码{}", barcode);
return barcodeVoidClient.voidBarcode(factoryUid, barcode);
}
@RequestMapping(value = "/print", method = RequestMethod.GET)
@ResourcePermission(values = {Resource.PRINT_BARCODE})
public PoBarcodePrintDto printBarCodeStatus(@RequestParam String factoryUid, @RequestParam String barcode) throws IOneWebRestfulException {
List<String> urls = new ArrayList<>();
SyncResponseWithList responseWithList = barCodePrintClient.getBarcodePrintUrls(
factoryUid, "", "", barcode, TYPE_REPRINT);
if (SUCCESS_CODE.equals(responseWithList.getCode())) {
urls.addAll(responseWithList.getContent());
}
return new PoBarcodePrintDto(responseWithList.getCode(), responseWithList.getMessage(), urls);
}
}
package com.i1.srm.purchaseOrder.web.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class BarcodeStatusAndVoidDto {
private String factoryUid;
private String barcode;
public String getFactoryUid() {
return factoryUid;
}
public void setFactoryUid(String factoryUid) {
this.factoryUid = factoryUid;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
}
...@@ -60,6 +60,7 @@ ...@@ -60,6 +60,7 @@
// icon: 'fa fa-book', // icon: 'fa fa-book',
// acl: 'PURCHASE_ORDER_CHANGE_FUNCTION' // acl: 'PURCHASE_ORDER_CHANGE_FUNCTION'
// } // }
{name: '防伪码管理', url: '/#!/barcode', icon: 'fa fa-book', acl: 'BARCODE_FUNCTION'}
] ]
}, },
//2 //2
......
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>防伪码管理
<small>{{vm.subPages[vm.currentPage].name}}</small>
</h1>
</section>
<!-- Main content -->
<section class="content">
<div multiple-tabs sub-pages="vm.subPages" current-page="vm.currentPage" vm="vm">
</div>
</section>
<!-- /.content -->
\ No newline at end of file
(function () {
angular.module('IOne').config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/barcode', {
controller: 'BarcodeController',
templateUrl: 'app/srm/barcode/barcode.html',
controllerAs: 'vm',
resolve: {
currentAcl: function (AuthService) {
return AuthService.getCurrentAcl();
}
}
});
}]);
angular.module('IOne').factory('BarcodeService', function ($http) {
return angular.extend(new BaseService('/barcode', $http), {
voidBarcode: function (factoryUid, barcode) {
return this.httpService.delete('/barcode/void?factoryUid=' + factoryUid + '&barcode=' + barcode);
},
getBarcodeStatus: function (factoryUid, barcode) {
return this.httpService.get('/barcode/status?factoryUid=' + factoryUid + '&barcode=' + barcode);
},
printBarcode: function (factoryUid, barcode) {
return this.httpService.get('/barcode/print?factoryUid=' + factoryUid + '&barcode=' + barcode);
}
});
});
angular.module('IOne').controller('BarcodeController', BarcodeController);
BarcodeController.$inject = ['$rootScope', 'currentAcl'];
function BarcodeController($rootScope, currentAcl) {
var vm = this;
vm.currentAcl = currentAcl.data;
//variables
vm.subPages = {
'index': {name: '防伪码作废/重打', show: true, closable: false, url: 'app/srm/barcode/query/query.html'},
};
}
})();
\ No newline at end of file
<div ng-controller="BarcodeQueryController">
<form name="barcodeForm">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label>营运中心</label>
<select class="form-control select2" ng-model="queryCondition.factory.id" required style="width: 100%;">
<option ng-repeat="factory in factories" value="{{factory.id}}">{{factory.name}}</option>
</select>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label>防伪码</label>
<input class="form-control" ng-change="barcodeChange()" ng-model="queryCondition.barcode" required
type="text">
</div>
</div>
<div class="col-md-2">
<div class="form-group">
<label>&nbsp;</label>
<div>
<button acl-check class="btn btn-primary" func=" 'BARCODE_FUNCTION' " ng-click="query()"
ng-disabled="!barcodeForm.$valid" resource=" 'QUERY' " type="button"><i class="fa fa-search"></i> 查询状态
</button>
<span ng-if="loading"><img src="img/spinner.gif" style="width: 30px;"/></span>
</div>
</div>
</div>
</div>
</form>
<div class="button-bar" style="min-height: 200px; max-height: 500px">
<div class="row">
<div class="col-md-8">
<h1 class="pam" ng-show="okStatus">条码状态:有效</h1>
<h5 class="pam">{{dtlMessage}}</h5>
</div>
</div>
</div>
<div class="button-bar">
<div class="row">
<div class="col-md-6">
<button acl-check class="btn btn-primary plm prm mrm" func=" 'BARCODE_FUNCTION' " ng-click="void()"
ng-disabled="!okStatus" resource=" 'VOID_BARCODE' ">
<i class="fa fa-times"></i>&nbsp;&nbsp;作废
</button>
<button acl-check class="btn btn-primary plm prm" func=" 'BARCODE_FUNCTION' " ng-click="print()"
ng-disabled="!okStatus" resource=" 'PRINT_BARCODE' ">
<i class='fa fa-print'></i>&nbsp;&nbsp;重打
</button>
</div>
</div>
</div>
</div>
\ No newline at end of file
angular.module('IOne').controller('BarcodeQueryController', function ($scope, Constants, $interval, $uibModal, UtilService,
BaseFactoryFileService, AuthService, BarcodeService) {
$scope.queryCondition = {
factory: {id: null},
barcode: null
};
$scope.okStatus = false;
$scope.dtlMessage = "";
$scope.query = function () {
if (AuthService.hasAcl($scope.vm.currentAcl, 'BARCODE_FUNCTION', 'QUERY')) {
BarcodeService.getBarcodeStatus($scope.queryCondition.factory.factoryUid, $scope.queryCondition.barcode).then(
function (response) {
if (response.data.code == '0') {
$scope.okStatus = true;
UtilService.showInfo(response.data.message);
$scope.dtlMessage = response.data.message;
} else {
UtilService.showError(response.data.message);
$scope.dtlMessage = response.data.message;
}
},
function (response) {
UtilService.showError(response.data.error);
$scope.dtlMessage = response.data.message;
}
);
}
};
$scope.void = function () {
UtilService.showConfirm('确认作废' + $scope.queryCondition.barcode + '?', '', function () {
BarcodeService.voidBarcode($scope.queryCondition.factory.factoryUid, $scope.queryCondition.barcode).then(
function (response) {
if (response.data.code == '0') {
UtilService.showInfo(response.data.message);
} else {
UtilService.showError("作废失败:<br>" + response.data.message);
}
},
function (response) {
UtilService.showError("作废失败:<br>" + response.data.error);
}
);
});
};
$scope.print = function () {
BarcodeService.printBarcode($scope.queryCondition.factory.factoryUid, $scope.queryCondition.barcode).then(
function (response) {
if (response.data && response.data.code === '0') {
if (response.data.printUrls.length === 0) {
UtilService.showWarn("没有可打印的防伪码");
return;
}
angular.forEach(response.data.printUrls, function (url) {
try {
$window.open(url);
} catch (e) {
console.error(e);
}
});
} else {
UtilService.showError("打印防伪码失败:<br>" + response.data.message);
}
}, function (response) {
UtilService.showError("打印防伪码失败:<br>" + response.data);
}
)
};
$scope.barcodeChange = function () {
$scope.okStatus = false;
$scope.dtlMessage = "";
};
$scope.init = function () {
$scope.loading = false;
BaseFactoryFileService.getByAccount().then(function (response) {
$scope.factories = response;
if ($scope.factories.length > 0) {
$scope.queryCondition.factory.id = $scope.factories[0].id;
}
});
};
$scope.init();
});
...@@ -363,6 +363,9 @@ ...@@ -363,6 +363,9 @@
<script th:if="${dev}" src="app/srm/session/session.js"></script> <script th:if="${dev}" src="app/srm/session/session.js"></script>
<script th:if="${dev}" src="app/srm/session/query/query.js"></script> <script th:if="${dev}" src="app/srm/session/query/query.js"></script>
<script th:if="${dev}" src="app/srm/barcode/barcode.js"></script>
<script th:if="${dev}" src="app/srm/barcode/query/query.js"></script>
<script th:if="${dev}" src="app/srm/zTest/test.js"></script> <script th:if="${dev}" src="app/srm/zTest/test.js"></script>
<script th:if="${dev}" src="app/srm/zTest/chart/chart.js"></script> <script th:if="${dev}" src="app/srm/zTest/chart/chart.js"></script>
<script th:if="${dev}" src="app/srm/zTest/uiGrid/uiGrid.js"></script> <script th:if="${dev}" src="app/srm/zTest/uiGrid/uiGrid.js"></script>
......
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