Просмотр исходного кода

Merge remote-tracking branch 'origin/release-201843-wangcz' into release-201843-wangcz

shenjunjie 7 лет назад
Родитель
Сommit
796b6cff84

+ 27 - 1
src/main/java/com/uas/platform/b2b/core/util/DateUtils.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2b.core.util;
 package com.uas.platform.b2b.core.util;
 
 
+import org.apache.commons.lang3.time.FastDateFormat;
+
 import java.text.ParseException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Calendar;
@@ -20,8 +22,32 @@ public class DateUtils {
 	public static final int COMPARE_DAY = 4;
 	public static final int COMPARE_DAY = 4;
 	static final SimpleDateFormat ym = new SimpleDateFormat("yyyyMM");
 	static final SimpleDateFormat ym = new SimpleDateFormat("yyyyMM");
 	static final SimpleDateFormat YM = new SimpleDateFormat("yyyy-MM");
 	static final SimpleDateFormat YM = new SimpleDateFormat("yyyy-MM");
-	static final SimpleDateFormat YMD = new SimpleDateFormat("yyyy-MM-dd");
+    public static final SimpleDateFormat YMD = new SimpleDateFormat("yyyy-MM-dd");
 	static final SimpleDateFormat YMD_HMS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 	static final SimpleDateFormat YMD_HMS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    static final FastDateFormat MM = FastDateFormat.getInstance("MM");
+    static final FastDateFormat YYYY = FastDateFormat.getInstance("yyyy");
+    static final FastDateFormat DD = FastDateFormat.getInstance("dd");
+
+    /**
+     * 获取月份
+     */
+    public static Integer getMonth(Date date) {
+        return Integer.valueOf(MM.format(date));
+    }
+
+    /**
+     * 获取年份
+     */
+    public static Integer getYear(Date date) {
+        return Integer.valueOf(YYYY.format(date));
+    }
+
+    /**
+     * 获取天数
+     */
+    public static Integer getDay(Date date) {
+        return Integer.valueOf(DD.format(date));
+    }
 
 
 	/**
 	/**
 	 * 获取月份起始日期
 	 * 获取月份起始日期

+ 21 - 14
src/main/java/com/uas/platform/b2b/service/impl/VendorsServiceImpl.java

@@ -27,6 +27,7 @@ import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.PageParams;
+import com.uas.ps.core.page.exception.IllegalOperatorException;
 import com.uas.search.b2b.model.MultiValue;
 import com.uas.search.b2b.model.MultiValue;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort;
@@ -495,7 +496,8 @@ public class VendorsServiceImpl implements VendorService {
                 Iterator<VendorDistribute> iterator = distributeListCopy.iterator();
                 Iterator<VendorDistribute> iterator = distributeListCopy.iterator();
                 while (iterator.hasNext()) {
                 while (iterator.hasNext()) {
                     VendorDistribute distribute = iterator.next();
                     VendorDistribute distribute = iterator.next();
-                    if (Objects.equals(vendor.getId(), distribute.getVendorId())) {
+                    if (Objects.equals(vendor.getId(), distribute.getVendorId())
+                        && 1 == distribute.getIsTransfer()) {
                         contacts.add(distribute.getUser().getUserName());
                         contacts.add(distribute.getUser().getUserName());
                         iterator.remove();
                         iterator.remove();
                     }
                     }
@@ -574,7 +576,6 @@ public class VendorsServiceImpl implements VendorService {
         if (!CollectionUtils.isEmpty(users)) {
         if (!CollectionUtils.isEmpty(users)) {
             List<VendorDistribute> saveList = new ArrayList<>();
             List<VendorDistribute> saveList = new ArrayList<>();
             for (User u : users) {
             for (User u : users) {
-                List<VendorDistribute> deleteList = new ArrayList<>();
                 if (null != u.getUserUU()) {
                 if (null != u.getUserUU()) {
                     VendorDistribute distribute = new VendorDistribute();
                     VendorDistribute distribute = new VendorDistribute();
                     List<VendorDistribute> distributes = vendorDistributeDao.findByUserUUAndVendorId(u.getUserUU(), vendor.getId());
                     List<VendorDistribute> distributes = vendorDistributeDao.findByUserUUAndVendorId(u.getUserUU(), vendor.getId());
@@ -591,18 +592,22 @@ public class VendorsServiceImpl implements VendorService {
                             distribute.setIsTransfer(Constant.YES);
                             distribute.setIsTransfer(Constant.YES);
                             saveList.add(distribute);
                             saveList.add(distribute);
                         }
                         }
+                        // 进行权限转移时判断该用户是否是当前用户,如果不是,去掉当前用户的转移状态
+                        if (!Objects.equals(u.getUserUU(), SystemSession.getUser().getUserUU())) {
+                            List<VendorDistribute> currentDistributes = vendorDistributeDao.findByUserUUAndVendorId(SystemSession.getUser().getUserUU(), vendor.getId());
+                            if (!CollectionUtil.isEmpty(currentDistributes)) {
+                                distribute = currentDistributes.get(0);
+                                distribute.setIsTransfer(Constant.NO);
+                                saveList.add(distribute);
+                            }
+                        }
                     } else {
                     } else {
                         // 删除当前用户的权限子节点用户
                         // 删除当前用户的权限子节点用户
                         if (!CollectionUtils.isEmpty(distributes)) {
                         if (!CollectionUtils.isEmpty(distributes)) {
-                            // 当前用户
-                            deleteList.add(distributes.get(0));
-                            Long vendorId = vendor.getId();
-                            Long userUU = u.getUserUU();
-                            if (null != distributes.get(0).getIsTransfer() && 1 == distributes.get(0).getIsTransfer()) {
-                                deleteList = deleteChildrenDistributes(vendorId, userUU, deleteList);
-                            }
-                            // 防止出现作为参数的用户之间存在权限父子节点关系,导致重复查询,所以每次递归完成,执行一次删除
-                            vendorDistributeDao.delete(deleteList);
+                            distribute = distributes.get(0);
+                            distribute.setLeaderUU(SystemSession.getUser().getUserUU());
+                            distribute.setIsTransfer(Constant.NO);
+                            saveList.add(distribute);
                         }
                         }
                     }
                     }
                 }
                 }
@@ -636,10 +641,10 @@ public class VendorsServiceImpl implements VendorService {
                 if (Constant.NO == distribute.getIsTransfer()) {
                 if (Constant.NO == distribute.getIsTransfer()) {
                     throw new IllegalAccessException("当前用户没有分配或转移的权限");
                     throw new IllegalAccessException("当前用户没有分配或转移的权限");
                 }
                 }
+            } else {
+                throw new IllegalAccessException("当前用户没有分配或转移的权限");
             }
             }
-
         }
         }
-
     }
     }
 
 
     /**
     /**
@@ -652,12 +657,14 @@ public class VendorsServiceImpl implements VendorService {
     private List<VendorDistribute> deleteChildrenDistributes(Long vendorId, Long userUU, List<VendorDistribute> deleteList) {
     private List<VendorDistribute> deleteChildrenDistributes(Long vendorId, Long userUU, List<VendorDistribute> deleteList) {
         // 删除时,同时删除被其分配权限的其他用户
         // 删除时,同时删除被其分配权限的其他用户
         List<VendorDistribute> distributes = vendorDistributeDao.findByVendorIdAndLeaderUU(vendorId, userUU);
         List<VendorDistribute> distributes = vendorDistributeDao.findByVendorIdAndLeaderUU(vendorId, userUU);
+        List<VendorDistribute> vendorDistributes = new ArrayList<>();
         if (!CollectionUtils.isEmpty(distributes)) {
         if (!CollectionUtils.isEmpty(distributes)) {
             deleteList.addAll(distributes);
             deleteList.addAll(distributes);
             // 被删除用户拥有转移权限时,继续删除其子节点
             // 被删除用户拥有转移权限时,继续删除其子节点
             for (VendorDistribute distribute : distributes) {
             for (VendorDistribute distribute : distributes) {
                 if (null != distribute.getIsTransfer() && 1 == distribute.getIsTransfer()) {
                 if (null != distribute.getIsTransfer() && 1 == distribute.getIsTransfer()) {
-                    return deleteChildrenDistributes(vendorId, distribute.getUserUU(), deleteList);
+                    distribute.setIsTransfer(Constant.NO);
+                    vendorDistributes.add(distribute);
                 }
                 }
             }
             }
         }
         }

+ 79 - 0
src/main/java/com/uas/platform/b2b/task/SendNoticeTask.java

@@ -1,9 +1,11 @@
 package com.uas.platform.b2b.task;
 package com.uas.platform.b2b.task;
 
 
+import com.uas.platform.b2b.core.util.DateUtils;
 import com.uas.platform.b2b.dao.CommunalLogDao;
 import com.uas.platform.b2b.dao.CommunalLogDao;
 import com.uas.platform.b2b.dao.PurchaseNoticeDao;
 import com.uas.platform.b2b.dao.PurchaseNoticeDao;
 import com.uas.platform.b2b.dao.PurchaseOrderDao;
 import com.uas.platform.b2b.dao.PurchaseOrderDao;
 import com.uas.platform.b2b.model.CommunalLog;
 import com.uas.platform.b2b.model.CommunalLog;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.log4j.Logger;
 import org.apache.log4j.Logger;
@@ -15,11 +17,13 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import java.net.URI;
 import java.net.URI;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
 /**
  * 每天定时更新发货提醒异常的数据
  * 每天定时更新发货提醒异常的数据
@@ -127,4 +131,79 @@ public class SendNoticeTask {
             }
             }
         }
         }
     }
     }
+
+    /**
+     * 可发货状态判断逻辑
+     * <pre>
+     *  1.判断当前是否属于同一个年份
+     *      1.1.属于同一年
+     *          1.1.1.物料备料提前期为-1
+     *              1.1.1.1.如果交货期为当月或之前月份,可以发货
+     *              1.1.1.2.如果交货期为下月
+     *                  1.1.1.2.1.如果当前日期大于25,可以发货
+     *                  1.1.1.2.2.如果当前日期小于或等于25,不可以发货
+     *              1.1.1.3.如果交货日期大于下月,不可以发货
+     *          1.1.2.物料备料提前期为具体天数
+     *              1.1.2.1.交货日期小于备料提前期 + 当前日期,可以发货
+     *              1.1.2.2.其他状况不可以发货
+     *      1.2.不属于同一年
+     *          1.2.1.如果备料提前期大于或等于0
+     *              1.2.1.1.当前日期+备料提前期+1大于收货日期,可以发货
+     *              1.2.1.2.其他条件不能发货
+     *
+     * </pre>
+     *
+     * @param delivery 发货日期
+     * @param stock 备料提前期
+     * @return 1: 等待发货 0: 可以发货
+     */
+    private static Short checkNoticeWaitStatus(Date delivery, Integer stock) {
+        Integer nowYear = DateUtils.getYear(new Date());
+        Integer delYear = DateUtils.getYear(delivery);
+        if (Objects.equals(nowYear, delYear)) {
+            if (stock == -1) {
+                Integer nowMonth = DateUtils.getMonth(new Date());
+                Integer delMonth = DateUtils.getMonth(delivery);
+                if (nowMonth >= delMonth) {
+                    return Constant.NO;
+                } else if (nowMonth + 1 == delMonth) {
+                    Integer nowDay = DateUtils.getDay(new Date());
+                    // 本月临界值
+                    Integer maxDay = 25;
+                    if (nowDay > maxDay) {
+                        return Constant.NO;
+                    } else {
+                        return Constant.YES;
+                    }
+                } else {
+                    return Constant.YES;
+                }
+            } else if (stock >= 0) {
+                Date resultDay = DateUtils.addDay(new Date(), stock);
+                if (DateUtils.compare(resultDay, delivery, DateUtils.COMPARE_DAY) == 1) {
+                    return Constant.NO;
+                } else {
+                    return Constant.YES;
+                }
+            }
+        } else {
+            if (stock >= 0) {
+                Date resultDay = DateUtils.addDay(new Date(), stock + 1);
+                if (DateUtils.compare(resultDay, delivery, DateUtils.COMPARE_DAY) == 1) {
+                    return Constant.NO;
+                } else {
+                    return Constant.YES;
+                }
+            }
+        }
+        return Constant.YES;
+    }
+
+    public static void main(String[] args) throws ParseException {
+        Long start = System.currentTimeMillis();
+        Date date = DateUtils.YMD.parse("2019-01-06");
+        System.out.println(checkNoticeWaitStatus(date, 60));
+        Long cost = System.currentTimeMillis() - start;
+        System.out.println("cost: " + cost);
+    }
 }
 }

+ 2 - 2
src/main/resources/ptest/sys.properties

@@ -11,10 +11,10 @@ reportPrintUrl=http://192.168.100.8:8080/report/print?userName=B2B%s&profile=${p
 reportUploadUrl=http://192.168.100.8:8080/report/fileUpload?userName=B2B%s
 reportUploadUrl=http://192.168.100.8:8080/report/fileUpload?userName=B2B%s
 
 
 #product service url
 #product service url
-productServiceUrl=http://188.131.128.107:24002
+productServiceUrl=https://tproduct-api.usoftchina.com
 
 
 #inquiry service url
 #inquiry service url
-inquiryServiceUrl=https://188.131.128.107:24000
+inquiryServiceUrl=https://tinquiry-api.usoftchina.com
 
 
 #message service ip
 #message service ip
 messageServiceIp=http://message.ubtob.com/
 messageServiceIp=http://message.ubtob.com/

+ 8 - 5
src/main/webapp/resources/js/index/app.js

@@ -2174,6 +2174,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 } else {
                 } else {
                     toaster.pop('error', '您没有为当前客户分配用户的权限!');
                     toaster.pop('error', '您没有为当前客户分配用户的权限!');
                 }
                 }
+            }, function (res) {
+                toaster.pop('error', res.data);
             });
             });
         };
         };
 
 
@@ -2511,6 +2513,9 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             $scope.distribute = distribute;
             $scope.distribute = distribute;
             $scope.havedone = angular.copy($scope.distribute);
             $scope.havedone = angular.copy($scope.distribute);
             $scope.loading = false;
             $scope.loading = false;
+        }, function (res) {
+            $scope.loading = false;
+            toaster.pop('error', res.data);
         });
         });
 
 
         var checkStatus = function (userinfos) {
         var checkStatus = function (userinfos) {
@@ -2627,6 +2632,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             $scope.transfer = transfer;
             $scope.transfer = transfer;
             $scope.havedone = angular.copy($scope.transfer);
             $scope.havedone = angular.copy($scope.transfer);
             $scope.loading = false;
             $scope.loading = false;
+        }, function (res) {
+            toaster.pop('error', res.data);
         });
         });
 
 
         var checkStatus = function (userinfos) {
         var checkStatus = function (userinfos) {
@@ -2681,7 +2688,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             if (save) {
             if (save) {
                 if (uuData) {
                 if (uuData) {
                     // 当前用户是管理员时
                     // 当前用户是管理员时
-                    if ($scope.thisUser.sys) {
+                    if ($scope.thisUser.sys || type === 'sale') {
                         angular.forEach($scope.userinfos, function (item, i) {
                         angular.forEach($scope.userinfos, function (item, i) {
                             chooseResult.push(item);
                             chooseResult.push(item);
                         });
                         });
@@ -2700,10 +2707,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                             toaster.pop('error', '保存失败', "您未勾选任何记录");
                             toaster.pop('error', '保存失败', "您未勾选任何记录");
                         }
                         }
                     } else {
                     } else {
-                        if(type === 'sale') {
-                            toaster.pop('info', '提示', "您没有权限转移对象");
-                            return
-                        }
                         // 非管理员转移自己的权限时
                         // 非管理员转移自己的权限时
                         angular.forEach($scope.userinfos, function (item, i) {
                         angular.forEach($scope.userinfos, function (item, i) {
                             if (item.transfer && item.userUU !== $scope.thisUser.userUU) {
                             if (item.transfer && item.userUU !== $scope.thisUser.userUU) {

+ 1 - 1
src/main/webapp/resources/tpl/index/account/add_userInfo.html

@@ -42,7 +42,7 @@
 		</thead>
 		</thead>
 		<tbody>
 		<tbody>
 				<div style="overflow-y:scroll; width:100%;max-height:500px">			
 				<div style="overflow-y:scroll; width:100%;max-height:500px">			
-					<tr ng-repeat="user in userinfos| filter: keyword" ng-if = "thisUser.userUU != user.userUU">
+					<tr ng-repeat="user in userinfos| filter: keyword">
 						<td width="80px;">{{user.userUU}}</td>
 						<td width="80px;">{{user.userUU}}</td>
 						<td width="100px;">{{user.userName}}</td>
 						<td width="100px;">{{user.userName}}</td>
 						<td width="40px;" style="text-align: center"><input ng-model="user.distribute" name="checkbox" ng-click="checkOne()" type="checkbox"></td>
 						<td width="40px;" style="text-align: center"><input ng-model="user.distribute" name="checkbox" ng-click="checkOne()" type="checkbox"></td>

+ 3 - 3
src/main/webapp/resources/tpl/index/account/transfer_userInfo.html

@@ -36,7 +36,7 @@
 		</thead>
 		</thead>
 		<tbody ng-if="thisUser.sys">
 		<tbody ng-if="thisUser.sys">
 			<!-- 当前用户是管理员时 -->
 			<!-- 当前用户是管理员时 -->
-			<tr ng-repeat="user in userinfos| filter: keyword" ng-if="thisUser.userUU != user.userUU" style="overflow-y:scroll; width:100%;max-height:500px" >
+			<tr ng-repeat="user in userinfos| filter: keyword" style="overflow-y:scroll; width:100%;max-height:500px" >
 				<td width="80px;">{{user.userUU}}</td>
 				<td width="80px;">{{user.userUU}}</td>
 				<td width="100px;">{{user.userName}}</td>
 				<td width="100px;">{{user.userName}}</td>
 				<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="checkbox" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox" title="选择"></td>
 				<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="checkbox" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox" title="选择"></td>
@@ -44,7 +44,7 @@
 		</tbody>
 		</tbody>
 		<tbody ng-if="!thisUser.sys && thisUser.transfer">
 		<tbody ng-if="!thisUser.sys && thisUser.transfer">
 			<!-- 当前用户是被管理员转移权限时 -->
 			<!-- 当前用户是被管理员转移权限时 -->
-			<tr ng-repeat="user in userinfos| filter: keyword" ng-if="thisUser.userUU != user.userUU">
+			<tr ng-repeat="user in userinfos| filter: keyword">
 				<td width="80px;">{{user.userUU}}</td>
 				<td width="80px;">{{user.userUU}}</td>
 				<td width="100px;">{{user.userName}}</td>
 				<td width="100px;">{{user.userName}}</td>
 				<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="checkbox" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox" title="选择"></td>
 				<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="checkbox" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox" title="选择"></td>
@@ -52,7 +52,7 @@
 		</tbody>
 		</tbody>
 		<tbody ng-if="!thisUser.sys && !thisUser.transfer">
 		<tbody ng-if="!thisUser.sys && !thisUser.transfer">
 			<!-- 当前用户是非管理员,但有查看权限时 -->
 			<!-- 当前用户是非管理员,但有查看权限时 -->
-			<tr ng-repeat="user in userinfos| filter: keyword" ng-if="!user.distribute && thisUser.userUU != user.userUU">
+			<tr ng-repeat="user in userinfos| filter: keyword" ng-if="!user.distribute">
 				<td width="80px;">{{user.userUU}}</td>
 				<td width="80px;">{{user.userUU}}</td>
 				<td width="100px;">{{user.userName}}</td>
 				<td width="100px;">{{user.userName}}</td>
 				<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="distribute" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox" title="选择"></td>
 				<td width="40px;" style="text-align: center"><input ng-model="user.transfer" name="distribute" ng-click="checkOne(user)" ng-checked="user.checked" type="checkbox" title="选择"></td>

+ 1 - 1
src/main/webapp/resources/tpl/index/sale/pubinquiry.html

@@ -393,7 +393,7 @@
 				币别:<span ng-bind="::(isUser?'-':inquiryItem.currency)"></span>
 				币别:<span ng-bind="::(isUser?'-':inquiryItem.currency)"></span>
 			</td>
 			</td>
 			<td>
 			<td>
-				税率:<span ng-bind="inquiryItem.taxrate || '-'"></span>%
+				税率:<span ng-bind="inquiryItem.taxrate || 0"></span>%
 			</td>
 			</td>
 			<td class="text-right" colspan="2" class="order-sum">
 			<td class="text-right" colspan="2" class="order-sum">
 				<div ng-if="inquiryItem.replyable">
 				<div ng-if="inquiryItem.replyable">