Преглед на файлове

Merge remote-tracking branch 'origin/dev' into authority

hejq преди 9 години
родител
ревизия
176f861e0d

+ 3 - 2
src/main/java/com/uas/platform/b2b/controller/PublicQueryController.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.UserDao;
@@ -69,8 +70,7 @@ public class PublicQueryController {
 	@ResponseStatus(value = HttpStatus.OK)
 	public ModelMap queryEnterprise(String name, String shortName, Long uu) throws UnsupportedEncodingException {
 		ModelMap returnMap = new ModelMap();
-		if (!StringUtils.isEmpty(name)) {
-			List<Enterprise> enterprises = enterpriseService.findByName(name);
+		if (!StringUtils.isEmpty(name)) { List<Enterprise> enterprises = enterpriseService.findByName(name);
 			if (!CollectionUtils.isEmpty(enterprises))
 				returnMap.put("name", QueriableMember.getMembers(enterprises));
 		}
@@ -84,6 +84,7 @@ public class PublicQueryController {
 			if (enterprise != null)
 				returnMap.put("uu", new QueriableMember(enterprise));
 		}
+		System.out.println(JSON.toJSON(returnMap));
 		return returnMap;
 	}
 

+ 27 - 0
src/main/java/com/uas/platform/b2b/controller/RoleController.java

@@ -68,6 +68,21 @@ public class RoleController {
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
 
+	/**
+	 * 默认角色恢复默认权限
+	 *
+	 * @param roleId ID
+	 * @return
+	 */
+	@RequestMapping(value = "/recover/{roleId}", method = RequestMethod.POST)
+	public ResponseEntity<String> recover(@PathVariable("roleId") Long roleId) {
+		Role role = roleService.recover(roleId);
+		if (null != role) {
+			logger.log("角色", "恢复默认角色权限成功", role.getDuty(), role.getDesc(), role.getId());
+		}
+		return new ResponseEntity<String>(HttpStatus.OK);
+	}
+
 	/**
 	 * 查询当前用户在当前企业的角色是否是管理员或者销售经理
 	 *
@@ -82,4 +97,16 @@ public class RoleController {
 	@RequestMapping(value = "/isManager", method =  RequestMethod.GET)
 	@ResponseBody
 	public ModelMap isManager(){return  roleService.isManager(); }
+
+	/**
+	 * 获取当前角色的默认角色
+	 *
+	 * @param roleId ID
+	 * @return
+	 */
+	@RequestMapping(value = "/default/{roleId}", method = RequestMethod.GET)
+	@ResponseBody
+	public Role getDefaultRole(@PathVariable("roleId") Long roleId) {
+		return roleService.getDefaultRole(roleId);
+	}
 }

+ 1 - 1
src/main/java/com/uas/platform/b2b/dao/PurchaseOrderItemDao.java

@@ -32,7 +32,7 @@ public interface PurchaseOrderItemDao extends JpaSpecificationExecutor<PurchaseO
 	 * @param statusCode
 	 * @return
 	 */
-	@Query("select count(d) from PurchaseOrderItem d where d.order.id = :orderId and d.replyQty = d.qty")
+	@Query("select count(d) from PurchaseOrderItem d where d.order.id = :orderId and d.replyQty >= d.qty")
 	public int getCountByReply(@Param("orderId") long orderId);
 	
 	/**

+ 9 - 1
src/main/java/com/uas/platform/b2b/dao/RoleDao.java

@@ -21,7 +21,7 @@ public interface RoleDao extends JpaRepository<Role, Long> {
 	 * @param desc
 	 * @return
 	 */
-	public List<Role> findByEnUUAndDesc(long enUU, String desc);
+	public List<Role> findByEnUUAndDesc(Long enUU, String desc);
 
 	/**
 	 * 角色个数
@@ -65,4 +65,12 @@ public interface RoleDao extends JpaRepository<Role, Long> {
 	 */
 	@Query(value = "select count(1) from sec$roles r left join sec$userrole u on r.role_id = u.role_id where r.role_enuu = :enuu and u.user_uu = :useruu and r.role_name = 'ROLE_ADMIN'",nativeQuery = true)
 	Double findByEnuuAndUserUU(@Param("enuu") Long enuu, @Param("useruu") Long useruu);
+
+	/**
+	 * 根据角色名称查找默认角色的默认值
+	 * @param desc
+	 * @return
+	 */
+	@Query(value = "select * from sec$roles r where r.role_desc = :description and r.isdefault = 1 and r.role_enuu is null and rownum <= 1",nativeQuery = true)
+    Role findDefaultRoleByDesc(@Param("description")String desc);
 }

+ 3 - 3
src/main/java/com/uas/platform/b2b/event/PurchaseInquiryItemSaveReleaseEvent.java

@@ -43,9 +43,9 @@ public class PurchaseInquiryItemSaveReleaseEvent extends SaveReleaseEvent<Paging
         Long enUU = inquiryItem.getInquiry().getEnUU();
         Date date = new Date();
         String codeValue = inquiryItem.getInquiry().getCode();
-        String from = "B2B";
-        if (inquiryItem.getInquiry().getSourceId() != null) { // erp传到平台的单据,包含erpId字段记录来源
-            from = "ERP";
+        String from = "ERP";
+        if ("B2B".equals(inquiryItem.getInquiry().getSourceApp())) { // erp传到平台的单据,包含erpId字段记录来源
+            from = "B2B";
         }
         Short isReply = Constant.NO;
         String category = "sale";

+ 18 - 1
src/main/java/com/uas/platform/b2b/model/EnterpriseDetail.java

@@ -71,7 +71,24 @@ public class EnterpriseDetail {
 	}
 	public void setInfos(String infos) {
 		this.infos = infos;
-	}  
+	}
+
+	public String getBusinessCode() {
+		return businessCode;
+	}
+
+	public void setBusinessCode(String businessCode) {
+		this.businessCode = businessCode;
+	}
+
+	public String getCorporation() {
+		return corporation;
+	}
+
+	public void setCorporation(String corporation) {
+		this.corporation = corporation;
+	}
+
 	public EnterpriseDetail() {
 
 	}

+ 8 - 0
src/main/java/com/uas/platform/b2b/service/RoleService.java

@@ -64,4 +64,12 @@ public interface RoleService {
 	 * @return
 	 */
 	ModelMap isManager();
+
+	/**
+	 * 恢复默认权限
+	 * @param role
+	 */
+    Role recover(Long roleId);
+
+    Role getDefaultRole(Long roleId);
 }

+ 2 - 2
src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderServiceImpl.java

@@ -291,13 +291,13 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		Double replyQty = item.getReplyQty();
 		replyQty = replyQty == null ? 0 : replyQty;
 		item.setReplyQty(replyQty + reply.getQty());
-		if (item.getReplyQty() > item.getQty()) {
+		/*if (item.getReplyQty() > item.getQty()) {
 			if (isB2b) {
 				throw new IllegalOperatorException("回复的数量合计超过了订单数量");
 			} else {
 				return null;
 			}
-		}
+		}*/
 		if (item.getReplyQty() < 0)
 			throw new IllegalOperatorException("回复的数量合计不能为负数");
 		reply.setOrderItem(item);

+ 40 - 3
src/main/java/com/uas/platform/b2b/service/impl/RoleServiceImpl.java

@@ -1,8 +1,6 @@
 package com.uas.platform.b2b.service.impl;
 
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.RoleDao;
-import com.uas.platform.b2b.dao.UserDao;
+import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.model.Role;
 import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.service.RoleService;
@@ -29,6 +27,13 @@ public class RoleServiceImpl implements RoleService {
 	@Autowired
 	private UserDao userDao;
 
+	@Autowired
+	private ResourceItemDao resourceItemDao;
+
+	@Autowired
+	private ResourceDao resourceDao;
+
+
 	@Override
 	public List<Role> findAll() {
 		return findByEnterprise(SystemSession.getUser().getEnterprise().getUu());
@@ -97,4 +102,36 @@ public class RoleServiceImpl implements RoleService {
 		return new ModelMap("isManager", roleDao.findByEnuuAndUserUU(SystemSession.getUser().getEnterprise().getUu(),SystemSession.getUser().getUserUU()) > 0 ? true : false);
 	}
 
+	/**
+	 * 恢复默认权限
+	 *
+	 * @param roleId
+	 */
+	@Override
+	public Role recover(Long roleId) {
+		Role role = roleDao.findOne(roleId);
+		if (null != role) {
+			Role defaultRole = roleDao.findDefaultRoleByDesc(role.getDesc());
+			if (null != defaultRole) {
+				role.getResourceItems().clear();
+				role.getResourceItems().addAll(defaultRole.getResourceItems());
+				role = roleDao.save(role);
+				return role;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public Role getDefaultRole(Long roleId) {
+		Role role = roleDao.findOne(roleId);
+		if (null != role) {
+			Role defaultRole = roleDao.findDefaultRoleByDesc(role.getDesc());
+			if (null != defaultRole) {
+				return defaultRole;
+			}
+		}
+		return null;
+	}
+
 }

+ 21 - 3
src/main/webapp/resources/js/index/app.js

@@ -3068,7 +3068,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         
         $scope.onReplyClick = function (item, inverse) {
             if (item.reply) {
-                if (!item.reply.qty || item.reply.qty < 0 || item.reply.qty > item.qty) {
+                if (!item.reply.qty || item.reply.qty < 0 /*|| item.reply.qty > item.qty*/) {
                     toaster.pop('warning', '提示', '请填写有效的回复数量!');
                     return;
                 }
@@ -3207,6 +3207,10 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 var sum = 0;
                 angular.forEach($scope.order.orderItems, function (item) {
                     sum += item.qty * item.price;
+                    //获取最新回复数
+                    PurcOrderItem.getLatestReplyQty({orderItemId: item.id}, null, function (map) {
+                        item.latestReplyQty = map.latestReplyQty;
+                    });
                 });
                 $scope.order.total = sum;
                 if ($scope.order.display == 1) {//未查看的设为已查看
@@ -3922,7 +3926,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             var valid = true;
             var validLapQty = 0;
             angular.forEach(item.replies, function (r, i) {
-                if (i > 0 && r.lapQty <= item.replies[i - 1].lapQty || r.lapQty == null) {
+                // 直接比较是字符串比较,需要先转换再比较  2017年9月7日 15:05:51
+                if (i > 0 && parseInt(r.lapQty) <= parseInt(item.replies[i - 1].lapQty) || r.lapQty == null) {
                     valid = false;
                     validLapQty = r.lapQty;
                 }
@@ -11103,7 +11108,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 title: '提示',
                 content: '确定删除角色(' + $scope.role.desc + ')吗?'
             }, function () {
-                AccountRole.remove({id: role.id}, function () {
+                AccountRole.remove({id: role.id}, {}, function () {
                     toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 删除成功');
                     $modalInstance.close(true);
                 }, function (response) {
@@ -11111,6 +11116,19 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 });
             })
         };
+        $scope.recover = function () {
+            new ngAlert({
+                title: '提示',
+                content: '确定将“' + $scope.role.desc + '”恢复默认权限吗?'
+            }, function () {
+                AccountRole.recover({roleId: role.id}, {}, function () {
+                    toaster.pop('success', '提示', '角色:' + $scope.role.desc + ' 恢复默认权限成功');
+                    $modalInstance.close(true);
+                }, function (response) {
+                    toaster.pop('error', '错误', response.data);
+                });
+            })
+        };
     }]);
 
     /**

+ 23 - 2
src/main/webapp/resources/js/index/services/Account.js

@@ -25,7 +25,28 @@ define([ 'ngResource' ], function() {
 	}]).factory('AccountResource', ['$resource', function($resource) {
 		return $resource('account/resource', {});
 	}]).factory('AccountRole', ['$resource', function($resource) {
-		return $resource('account/role/:id');
+		return $resource('account/role/:id', {}, {
+			// 确认修改
+			save: {
+				url: 'account/role',
+				method: 'POST'
+			},
+			// 确认删除
+            remove: {
+				url: 'account/role/:id',
+				method: 'DELETE'
+			},
+			// 恢复默认
+            recover: {
+                url: 'account/role/recover/:roleId',
+                method: 'POST'
+            },
+            // 获取默认权限
+            getDefaultRole: {
+                url: 'account/role/default/:roleId',
+                method: 'GET'
+            }
+		});
 	}]).factory('FuzzySearch', ['$resource', function($resource){
 		return $resource('account/user', {}, {
 			//绑定界面的用户搜索
@@ -48,7 +69,7 @@ define([ 'ngResource' ], function() {
             },
 			isManager: {
             	url: 'account/role/isManager',
-				mehtod: 'GET'
+				method: 'GET'
 			}
         })
     }]);

+ 1 - 0
src/main/webapp/resources/tpl/index/approvalFlow/role_detail.html

@@ -59,6 +59,7 @@
 		<p class="pull-left text-muted" ng-show="role.isdefault == 1">
 			<i class="fa fa-fw fa-warning"></i>默认角色不允许删除,只能修改权限分配
 		</p>
+		<button class="btn btn-warning" type="button" ng-click="recover()" ng-if="role.isdefault == 1">恢复默认</button>
 		<button class="btn btn-primary" type="submit"
 			ng-disabled="roleForm.$invalid || !isChanged(role)">确认</button>
 		<button class="btn btn-default" type="button"

+ 2 - 2
src/main/webapp/resources/tpl/index/sale/order.html

@@ -444,7 +444,7 @@
 				<div class="text-num" ng-bind="::item.qty"></div>
 				<div class="text-muted" ng-bind="::item.product.unit"></div>
 				<div style="margin: 0 auto" ng-if="item.$editing">
-					<input type="number" ng-model="item.reply.qty" min="0" max="{{item.qty}}"
+					<input type="number" ng-model="item.reply.qty" min="0"
 						ng-init="item.reply.qty=item.qty-item.replyQty"
 						class="form-control input-xs" placeholder="0~{{item.qty-item.replyQty}}">
 				</div>
@@ -541,7 +541,7 @@
 						</div>
 						<br>
 						<div class="text-left">
-							<a ng-if="(item.replyQty || 0) < item.qty" ng-click="onReplyClick(item);setOrdersRead(order.id)" class="text-inverse">
+							<a ng-click="onReplyClick(item);setOrdersRead(order.id)" class="text-inverse">
 								<i class="fa fa-arrow-up"></i> 确认回复
 							</a>
 							<br>

+ 4 - 3
src/main/webapp/resources/tpl/index/sale/order_detail.html

@@ -128,7 +128,7 @@
 						<td class="text-center" width="110">
 							<div class="text-num" ><span ng-bind="::item.qty"></span></div>
 							<div style="margin-top: 20px" ng-if="item.$editing">
-								<input type="text" ng-model="item.reply.qty" min="0" max="{{item.qty}}"
+								<input type="text" ng-model="item.reply.qty" min="0"
 									ng-init="item.reply.qty=item.qty-item.replyQty"
 									class="form-control input-xs" placeholder="0~{{item.qty-item.replyQty}}">
 							</div>
@@ -161,13 +161,14 @@
 							<div ng-show="!item.$editing">
 								<div ng-if="!item.replyQty" class="text-muted text-center">未回复</div>
 								<div ng-if="item.replyQty > 0 && item.replyQty < item.qty">
-									<div class="progress progress-sm">
+									<!--<div class="progress progress-sm">
 										<div class="progress-bar progress-bar-success"
 											ng-style="{'width': 100*item.replyQty/item.qty + '%'}">
 											<span class="sr-only"></span>
 										</div>
 									</div>
-									已回复 <span class="text-default">{{::item.replyQty}}</span> / <span>{{::item.qty}}</span>
+									已回复 <span class="text-default">{{::item.replyQty}}</span> / <span>{{::item.qty}}</span>-->
+									已回复 <span class="text-default">{{::item.latestReplyQty}}</span>
 								</div>
 								<div ng-if="item.replyQty > 0" class="dropdown"
 									ng-class="{'text-center': item.replyQty>=item.qty}">