Browse Source

在售产品批量操作

hulh 8 years ago
parent
commit
836ec6f56f

+ 36 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -566,6 +566,42 @@ public class GoodsController {
 		return modelView;
 	}
 
+	/**
+	 * 导出在售信息Excel表
+	 *
+	 * @param isAjax  the is ajax 是否是ajax请求
+	 * @param request the request 请求对象
+	 * @return model and view
+	 */
+	@RequestMapping(value = "/down/goods", method = RequestMethod.GET)
+	public ModelAndView downLoadPurchase(@RequestParam(defaultValue = "false") Boolean isAjax, String keyword, @RequestParam(required = false) Boolean isSelfSupport, HttpServletRequest request) {
+		ModelAndView modelView = new ModelAndView();
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
+		modelView.addObject("dateFormat", dateFormat);
+		modelView.addObject("goodsService", goodsService);
+		HttpSession session = request.getSession();
+		Object loading = session.getAttribute("loading");
+		if(isAjax) {
+			MappingJackson2JsonView view = new MappingJackson2JsonView();
+			Map attributes = new HashMap();
+			if(loading == null || !Boolean.valueOf(loading.toString())) {
+				attributes.put("load", false);
+			}else if(Boolean.valueOf(loading.toString())){
+				attributes.put("load", true);
+			}
+			view.setAttributesMap(attributes);
+			modelView.setView(view);
+			return modelView;
+		}
+		session.setAttribute("loading", true);
+		modelView.addObject("data", goodsService.getGoodsByEnuu(keyword, isSelfSupport));
+		modelView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/goods", "优软商城在售产品"));
+		//重置为下载停止状态
+		session.setAttribute("loading", false);
+		logger.log("批量下载在售产品信息", "以Excel形式导出批量导出在售产品数据");
+		return modelView;
+	}
+
     /**
      * 导出上下架历史信息表
      *

+ 6 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java

@@ -485,6 +485,12 @@ public interface GoodsService {
      */
     public List<Goods> getGoodsByIDS(String ids);
 
+    /**
+     * 根据enUU获取在售产品
+     * @return
+     */
+    List<Goods> getGoodsByEnuu(String keyword, Boolean isSelfSupport);
+
     /**
      * 判断是自营还是寄售
      *

+ 63 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -2610,6 +2610,68 @@ public class GoodsServiceImpl implements GoodsService {
         return goods;
     }
 
+    @Override
+    public List<Goods> getGoodsByEnuu(String keyword, Boolean isSelfSupport) {
+        final PageInfo page = new PageInfo();
+        page.setPageNumber(1);
+        page.setPageSize(10);
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        page.expression(PredicateUtils.eq("enUU", enUU, true));
+        page.sorting("createdDate", Sort.Direction.DESC);
+
+        SimpleExpression status1 = PredicateUtils.eq("status", Status.AVAILABLE.value(), true);
+        SimpleExpression status2 = PredicateUtils.eq("status", Status.UNAVAILABLE.value(), true);
+        SimpleExpression[] expressions2 = new SimpleExpression[] {status1, status2};
+        LogicalExpression logicalExpression2 = PredicateUtils.or(expressions2);
+        page.expression(logicalExpression2);
+
+        List<StoreIn> storeIns = storeInDao.findByEnUU(enUU);
+        String uuid = null;
+        if (!CollectionUtils.isEmpty(storeIns)) {
+            uuid = storeIns.get(0).getUuid();
+        } else {
+            uuid = "null";
+        }
+        // 过滤自营店铺上架商品
+        if (isSelfSupport != null && isSelfSupport && StringUtils.hasText(uuid)) {
+            SimpleExpression[] simpleExpressions = new SimpleExpression[3];
+            simpleExpressions[0] = PredicateUtils.eq("storeid", uuid, true);
+            simpleExpressions[1] = PredicateUtils.ne("storeName", "优软测试二", true);
+            simpleExpressions[2] = PredicateUtils.ne("storeName", "优软商城", true);
+            page.expression(PredicateUtils.and(simpleExpressions));
+        }
+        // 过滤寄售商品
+        if (isSelfSupport != null && !isSelfSupport && StringUtils.hasText(uuid)) {
+            String[] storeNames = new String[]{"优软测试二", "优软商城"};
+            LogicalExpression logicalExpression = PredicateUtils.in("storeName", storeNames, true);
+            if (!"null".equals(uuid)) {
+                SimpleExpression simpleExpression = PredicateUtils.ne("storeid", uuid, true);
+                page.expression(PredicateUtils.or(simpleExpression, logicalExpression));
+            } else {
+                page.expression(logicalExpression);
+            }
+        }
+
+        // 过滤关键词
+        if (StringUtils.hasText(keyword)) {
+            SimpleExpression code = like("code", keyword, true, true);
+            SimpleExpression brandNameEn = like("brandNameEn", keyword, true, true);
+            SimpleExpression batchCode = PredicateUtils.like("prodNum", keyword, true, true);
+            SimpleExpression[] expressions3 = new SimpleExpression[]{code, brandNameEn, batchCode};
+            LogicalExpression logicalExpression3 = PredicateUtils.or(expressions3);
+            page.expression(logicalExpression2);
+        }
+
+        return goodsDao.findAll(new Specification<Goods>() {
+            @Override
+            public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(page.getPredicates(root, query, cb));
+                return null;
+            }
+        }, page.getSort());
+    }
+
+    @Override
     public String isSelfSupport(String storeid) {
         if(StringUtils.isEmpty(storeid)) {
             return "";
@@ -2881,6 +2943,7 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
     @Override
+    @Transactional
     public ResultMap deleteGoodsByEnUU(Long enUU) {
         List<Integer> statusList = Arrays.asList(Status.AVAILABLE.value(), Status.UNAVAILABLE.value());
         List<Goods> goodsList = goodsDao.findByEnUUAndInStatus(enUU, statusList);

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js

@@ -441,7 +441,7 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 		$scope.deleteBatch = function () {
             $scope.getChoosedInfo();
             if (!$scope.choosedIds || $scope.choosedIds.length == 0) {
-                toaster.pop('warning', '提示','请选择要删除的信息');
+                toaster.pop('info', '请选择要删除的信息');
                 return ;
             }
             closeAllEditStatus();

+ 101 - 32
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js

@@ -313,6 +313,7 @@ define([ 'app/app' ], function(app) {
                         }
                     });
                 }
+                $scope.chooseAll = false;
             });
         };
 
@@ -385,18 +386,39 @@ define([ 'app/app' ], function(app) {
             });
         };
 
+        $scope.cancelBatch = function () {
+            $scope.batchStatus = false;
+        };
+
+        $scope.batchOperation = function (num) {
+            getChooseInfo();
+            if (!$scope.choosedIds || $scope.choosedIds.length == 0) {
+                toaster.pop('info', '您尚未选中任何产品');
+                return ;
+            }
+            $scope.batchStatus = true;
+            $scope.batchType = num;
+            if (num == 1) {
+                $scope.batchTitle = '是否要删除选中的产品?'
+            } else {
+                $scope.batchTitle = '是否要下架选中的产品?'
+            }
+        };
+
         /**
          * 批量删除
          */
         $scope.batchDelete = function () {
             if ($scope.chooseAllPage) {
-                Goods.deleteGoodsByEnUU({}, {}, function (data) {
-                    if (data.success) {
-                        toaster.pop('success', '删除成功');
-                        $scope.isSoldOut = false;
+                Goods.deleteGoodsByEnUU({}, {}, function (result) {
+                    if (result.success) {
+                        var message = "成功删除"+ result.data.success +"个产品,另有"
+                            + result.data.fail + "个产品无法删除";
+                        toaster.pop('success', message);
+                        $scope.batchStatus = false;
                         loadDataReload();
                     } else {
-                        toaster.pop('error', data.message);
+                        toaster.pop('error', result.message);
                     }
                 })
             } else {
@@ -405,13 +427,15 @@ define([ 'app/app' ], function(app) {
                     toaster.pop("info", "您尚未选中任何产品");
                     return ;
                 }
-                Goods.deleteGoodsByIdList({}, $scope.choosedIds, function (data) {
-                    if (data.success) {
-                        toaster.pop('success', '删除成功');
-                        $scope.isSoldOut = false;
+                Goods.deleteGoodsByIdList({}, $scope.choosedIds, function (result) {
+                    if (result.success) {
+                        var message = "成功删除"+ result.data.success +"个产品,另有"
+                            + result.data.fail + "个产品无法删除";
+                        toaster.pop('success', message);
+                        $scope.batchStatus = false;
                         loadDataReload();
                     } else {
-                        toaster.pop('error', data.message);
+                        toaster.pop('error', result.message);
                     }
                 })
             }
@@ -422,7 +446,7 @@ define([ 'app/app' ], function(app) {
                 Goods.downNowEnterpriseGoods({}, {}, function(result) {
                     if (result.success) {
                         toaster.pop('success', '下架成功');
-                        $scope.isSoldOut = false;
+                        $scope.batchStatus = false;
                         loadDataReload();
                     } else {
                         toaster.pop('error', result.message);
@@ -438,7 +462,7 @@ define([ 'app/app' ], function(app) {
                 Goods.offShelfGoodsByProvider({batchCodes : batchs}, {}, function(map){
                     if (map.success) {
                         toaster.pop('success', '下架成功');
-                        $scope.isSoldOut = false;
+                        $scope.batchStatus = false;
                         loadDataReload();
                     } else {
                         toaster.pop('error', map.message);
@@ -627,7 +651,8 @@ define([ 'app/app' ], function(app) {
                     var name = tag.getAttribute('name');
                     if(name != null &&(name == 'edit-a' || name == 'down-a'
                         || name == 'img-a' || name == 'kind-a' || name == 'brand-a'
-                        || name == 'cancle-a' || name == 'save-a' || name == 'reduce-a' || name == 'add-a')) {
+                        || name == 'cancle-a' || name == 'save-a' || name == 'reduce-a'
+                        || name == 'add-a' || name == 'check-one')) {
                         return ;
                     }
                     tag = tag.parentElement;
@@ -1535,26 +1560,70 @@ define([ 'app/app' ], function(app) {
             return goodsID;
         };
 
-        var getDownLoadStatus = function () {
-            $.ajax({
-                type: 'GET',
-                url: 'release/product/release/failure/xls',
-                data : {isAjax : true, batch : $scope.result.batch},
-                dataType : 'json',
-                success: function (data) {
-                    if(!data.load) {
-                        $scope.$apply(function () {
-                            Loading.hide();
-                            toaster.pop('success', '数据处理完毕,正在下载文件,请稍等。');
-                        });
-                        clearInterval(intervalId);
-                    }
-                },
-                error: function () {
-                    Loading.hide();
-                    clearInterval(intervalId);
+        function downloadByJs(url, keyword, type) {
+            var form = $("<form>");   //定义一个form表单
+            form.attr('style', 'display:none');   //在form表单中添加查询参数
+            form.attr('target', '');
+            form.attr('method', 'get');
+            form.attr('action', url);
+
+            var input1 = $('<input>');
+            input1.attr('type', 'hidden');
+            input1.attr('name', 'keyword');
+            input1.attr('value', keyword);
+
+            var input2 = $('<input>');
+            input1.attr('type', 'hidden');
+            input1.attr('name', 'isSelfSupport');
+            input1.attr('value', type);
+
+            $('body').append(form);  //将表单放置在web中
+            form.append(input1);   //将查询参数控件提交到表单上
+            form.append(input2);
+            form.submit();
+        }
+
+        function downloadSelectedByJs(url, idList) {
+            var form = $("<form>");   //定义一个form表单
+            form.attr('style', 'display:none');   //在form表单中添加查询参数
+            form.attr('target', '');
+            form.attr('method', 'get');
+            form.attr('action', url);
+
+            var input1 = $('<input>');
+            input1.attr('type', 'hidden');
+            input1.attr('name', 'ids');
+            input1.attr('value', idList);
+
+            $('body').append(form);  //将表单放置在web中
+            form.append(input1);   //将查询参数控件提交到表单上
+            form.submit();
+        }
+
+        // 下载模板
+        $scope.download = function() {
+            if ($scope.currenctGoods && $scope.currenctGoods.length == 0) {
+                toaster.pop('info', '当前产品列表为空,无法下载');
+                return;
+            }
+            if ($scope.chooseAllPage) {
+                if ($scope.selfSupport === $scope.selfSupportType.SELF_SUPPORT) {
+                    $scope.param.isSelfSupport = true;
+                } else if ($scope.selfSupport === $scope.selfSupportType.CONSIGNMENT) {
+                    $scope.param.isSelfSupport = false;
+                } else {
+                    $scope.param.isSelfSupport = null;
                 }
-            });
+                downloadByJs('trade/goods/down/goods', $scope.param.keyword, $scope.param.isSelfSupport);
+            } else {
+                getChooseInfo();
+                if (!$scope.choosedIds || $scope.choosedIds.length == 0) {
+                    toaster.pop("info", "您尚未选中任何产品");
+                    return ;
+                }
+                var idStr = $scope.choosedIds.join('-');
+                downloadSelectedByJs('trade/goods/down/ids', idStr);
+            }
         };
 
         /**

+ 18 - 3
src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html

@@ -857,8 +857,8 @@
                     <span>更多操作</span>
                     <span class="expander">
                         <span ng-click="download()">导出选中</span>
-                        <span ng-click="batchDelete()" name="delete-material">删除选中</span>
-                        <span ng-click="updateCommodityInfo()">下架选中</span>
+                        <span ng-click="batchOperation(1)" name="delete-material">删除选中</span>
+                        <span ng-click="batchOperation(2)">下架选中</span>
                     </span>
                 </div>
                 <form style="display: none;" id="down-load-goods" method="get">
@@ -955,7 +955,7 @@
                     <tr class="edit-form" ng-if="!commodity.edit">
                         <td class="middle padding0 check-input">
                             <!-- <span><input type="checkbox" id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>-->
-                            <span><input type="checkbox" ng-checked="commodity.isChoosed"  ng-click="chooseOne(commodity, $event)" id="{{$index+1}}"/><label for="{{$index+1}}"></label></span>
+                            <span name="check-one"><input type="checkbox" ng-checked="commodity.isChoosed" ng-click="chooseOne(commodity, $event)" id="{{$index+1}}"/><label for="{{$index+1}}"></label></span>
                             <!--&lt;!&ndash;非标产品标志&ndash;&gt;-->
                             <!--<img ng-if="!commodity.uuid" src="static/img/store/common/nonstandard.png" alt="" class="standard"/>-->
                             <!--&lt;!&ndash;标产品标志&ndash;&gt;-->
@@ -1363,6 +1363,21 @@
         <div><a ng-click="cancleSoldOut()">取消</a><a ng-click="updateCommodityInfo(soldOutCommodity)">确认</a></div>
     </div>
 </div>
+<div class="com-out-box" ng-if="batchStatus">
+    <div class="title">
+        <a ng-click="cancelBatch()"><i class="fa fa-close fa-lg"></i></a>
+    </div>
+    <div class="content">
+        <p><i class="fa fa-exclamation-circle"></i>{{batchTitle}}</p>
+        <div class="red" ng-if="batchType==1">*<i ng-if="batchType==1">已有交易记录的产品无法删除</i>
+        </div>
+        <div>
+            <a ng-click="cancelBatch()">取消</a>
+            <a ng-if="batchType==1" ng-click="batchDelete()">确认</a>
+            <a ng-if="batchType==2" ng-click="batchDown()">确认</a>
+        </div>
+    </div>
+</div>
 
 <!--查看大图-->
 <div id="image-box"