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

Merge remote-tracking branch 'origin/feature-201836-wangcz' into feature-201836-wangcz

yuj 7 лет назад
Родитель
Сommit
7203cf6fc6

+ 1 - 1
pom.xml

@@ -685,7 +685,7 @@
 				<artifactId>tomcat7-maven-plugin</artifactId>
 				<version>2.2</version>
 				<configuration>
-					<port>8080</port>
+					<port>8090</port>
 					<path>/</path>
 					<uriEncoding>utf-8</uriEncoding>
 				</configuration>

+ 45 - 0
src/main/java/com/uas/platform/b2c/core/utils/CollectionUtils.java

@@ -0,0 +1,45 @@
+package com.uas.platform.b2c.core.utils;
+
+import com.uas.platform.b2c.prod.commodity.model.AbstractKeyEntity;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 集合处理工具类
+ *
+ * @author hejq
+ * @date 2018-07-19 11:03
+ */
+public class CollectionUtils {
+
+    /**
+     * 用继承自KeyEntity的类,重写的getKey方法来取值,封装成List一次性查询数据
+     *
+     * @param paramArray
+     * @return
+     */
+    public static Set<Long> getKeyCollection(Collection<? extends AbstractKeyEntity> paramArray) {
+        Set<Long> idList = new HashSet<>();
+        if (!org.springframework.util.CollectionUtils.isEmpty(paramArray)) {
+            for (AbstractKeyEntity param : paramArray) {
+                Object val = param.getKey();
+                if (val != null) {
+                    idList.add(Long.valueOf(val.toString()));
+                }
+            }
+        }
+        return idList;
+    }
+
+    /**
+     * 集合是否为空
+     *
+     * @param coll 集合
+     * @return true or false
+     */
+    public static boolean isEmpty(Collection<?> coll) {
+        return (coll == null || coll.isEmpty());
+    }
+}

+ 31 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
@@ -855,7 +856,7 @@ public class GoodsController {
         if (!modelAndView.isEmpty()) {
             return modelAndView;
         }
-        PageInfo info = new PageInfo(1, JxlsExcelView.GOODS_MAX_SIZE);
+        PageInfo info = new PageInfo(params);
         List<Goods> goodsList = goodsService.multiSearch(info, goodsFilter);
         if (CollectionUtils.isNotEmpty(goodsList)) {
             logger.info("产品导出结果 products: " + goodsList.size());
@@ -872,6 +873,35 @@ public class GoodsController {
         return modelAndView;
     }
 
+    /**
+     * 根据ID查询导出goods信息
+     *
+     * @param idStr 拼接的id
+     * @return ModelAndView
+     */
+    @RequestMapping(value = "/background/downloadByIds", method = RequestMethod.GET)
+    public ModelAndView exportProductsStandard(HttpServletRequest request, String idStr, @RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax) {
+        HttpSession session = request.getSession();
+        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
+        if (!modelAndView.isEmpty()) {
+            return modelAndView;
+        }
+        List<Long> idList = JSON.parseArray(idStr, Long.class);
+        List<Goods> privates = goodsService.findByIds(idList);
+        if (CollectionUtils.isNotEmpty(privates)) {
+            logger.info("产品导出结果 products: " + privates.size());
+        } else {
+            logger.info("产品导出结果 products为空");
+        }
+        FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy年MM月dd日 HH:mm");
+        modelAndView.addObject("dateFormat", dateFormat);
+        modelAndView.addObject("data", privates);
+        modelAndView.addObject("title", "优软商城--产品库列表");
+        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/background", "优软商城--产品库列表"));
+        session.setAttribute("loading", false);
+        return modelAndView;
+    }
+
 	/**
 	 * 根据id返回一个Goods数据
 	 * @param goodsId

+ 102 - 3
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -7,28 +7,43 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.prod.commodity.facade.ProductFacade;
-import com.uas.platform.b2c.prod.commodity.model.*;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.GoodsFilter;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
+import com.uas.platform.b2c.prod.commodity.model.ProductReplace;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPerson;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
+import com.uas.platform.b2c.trade.order.support.AjaxUtil;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.time.FastDateFormat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+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.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -483,4 +498,88 @@ public class ProductController {
         USELOG.log("卖家中心物料", "单个物料录入操作");
 	    return productService.editOne(jsonObject);
     }
+
+	/**
+	 * 根据分页参数和过滤对象分页获取数据
+	 *
+	 * @param params 分页参数
+	 * @param goodsFilter 过滤对象
+	 * @return Page<Product>
+	 */
+	@RequestMapping(value = "/background/page", method = RequestMethod.POST)
+	public Page<V_ProductPrivate> getPageDataOfBackground(PageParams params, @RequestBody GoodsFilter goodsFilter) {
+		PageInfo info = new PageInfo(params);
+		logger.info("后台产品管理", "分页获取Product信息");
+		return productService.getPageDataOfBackground(info, goodsFilter);
+	}
+
+    /**
+     * 根据分页参数和过滤对象导出数据
+     *
+     * @param goodsFilter 过滤对象
+     * @return ModelAndView
+     */
+    @RequestMapping(value = "/background/download", method = RequestMethod.GET)
+    public ModelAndView exportProductsStandard(GoodsFilter goodsFilter, HttpServletRequest request, PageParams params, HttpServletResponse response,
+                                               @RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax) {
+        HttpSession session = request.getSession();
+        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
+        if (!modelAndView.isEmpty()) {
+            return modelAndView;
+        }
+        PageInfo info = new PageInfo(params);
+        Page<V_ProductPrivate> page = productService.getPageDataOfBackground(info, goodsFilter);
+        if (CollectionUtils.isNotEmpty(page.getContent())) {
+            logger.info("产品导出结果 products: " + page.getContent().size());
+        } else {
+            logger.info("产品导出结果 products为空");
+        }
+        FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy年MM月dd日 HH:mm");
+        modelAndView.addObject("dateFormat", dateFormat);
+        modelAndView.addObject("data", page.getContent());
+        modelAndView.addObject("title", "优软商城--产品库列表");
+        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/product_background", "优软商城--产品库列表"));
+        session.setAttribute("loading", false);
+        return modelAndView;
+    }
+
+    /**
+     * 根据id返回一个Goods数据
+     * @param productId productId
+     * @return V_ProductPrivate
+     */
+    @RequestMapping(value = "/one", method = RequestMethod.GET)
+    public V_ProductPrivate getGoodsById(Long productId) {
+        logger.info("后台产品管理", "根据id: " + productId + "返回product和goods数据");
+        return productService.getProductAndGoodsById(productId);
+    }
+
+    /**
+     * 根据ID查询导出products和goods信息
+     *
+     * @param idStr 拼接的id
+     * @return ModelAndView
+     */
+    @RequestMapping(value = "/background/downloadByIds", method = RequestMethod.GET)
+    public ModelAndView exportProductsStandard(HttpServletRequest request, String idStr, @RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax) {
+        HttpSession session = request.getSession();
+        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
+        if (!modelAndView.isEmpty()) {
+            return modelAndView;
+        }
+        List<Long> idList = JSON.parseArray(idStr, Long.class);
+        List<V_ProductPrivate> privates = productService.findProductAndGoodsByIds(idList);
+        if (CollectionUtils.isNotEmpty(privates)) {
+            logger.info("产品导出结果 products: " + privates.size());
+        } else {
+            logger.info("产品导出结果 products为空");
+        }
+        FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy年MM月dd日 HH:mm");
+        modelAndView.addObject("dateFormat", dateFormat);
+        modelAndView.addObject("data", privates);
+        modelAndView.addObject("title", "优软商城--产品库列表");
+        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/product_background", "优软商城--产品库列表"));
+        session.setAttribute("loading", false);
+        return modelAndView;
+    }
 }

+ 21 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/AbstractKeyEntity.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2c.prod.commodity.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 外键值
+ *
+ * @author hejq
+ * @date 2018-11-06 9:10
+ */
+public abstract class AbstractKeyEntity {
+
+
+    /**
+     * 主键值
+     *
+     * @return
+     */
+    @JsonIgnore
+    public abstract Object getKey();
+}

+ 16 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPrivate.java

@@ -15,6 +15,11 @@ import java.io.*;
 import java.util.Date;
 import java.util.Set;
 
+/**
+ * 商城物料私有字段
+ *
+ * @author US50
+ */
 @Entity
 @Table(name = "v$product$private")
 public class V_ProductPrivate implements Serializable {
@@ -309,6 +314,9 @@ public class V_ProductPrivate implements Serializable {
     @Transient
     private Goods goods;
 
+    @Transient
+    private String enterpriseName;
+
     public Long getId() {
         return id;
     }
@@ -672,4 +680,12 @@ public class V_ProductPrivate implements Serializable {
         this.goods = goods;
         return this;
     }
+
+    public String getEnterpriseName() {
+        return enterpriseName;
+    }
+
+    public void setEnterpriseName(String enterpriseName) {
+        this.enterpriseName = enterpriseName;
+    }
 }

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

@@ -843,4 +843,34 @@ public interface GoodsService {
      * @return List<Goods>
      */
     List<Goods> multiSearch(PageInfo info, GoodsFilter goodsFilter);
+
+    /**
+     * 通过batchCode查询冻结数量
+     *
+     * @param batchCode 批号
+     * @return 冻结数量
+     */
+    int getFrozenCount(String batchCode);
+
+    /**
+     * 给goods信息赋值
+     *
+     * @param goods Goods
+     */
+    void defineGoodsInfo(Goods goods);
+
+    /**
+     * 封装goods信息
+     *
+     * @param goods goods
+     * @return Goods
+     */
+    Goods covertGoodsInfo(Goods goods);
+
+    /**
+     * 通过goods id查询goods信息
+     * @param idList goods idList
+     * @return List<Goods>
+     */
+    List<Goods> findByIds(List<Long> idList);
 }

+ 26 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.commodity.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.GoodsFilter;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
@@ -403,4 +404,29 @@ public interface ProductService {
      * @return ResultMap
      */
     ResultMap checkCriterion(Product product);
+
+    /**
+     * 根据分页参数和过滤对象分页获取数据
+     *
+     * @param info 分页参数
+     * @param goodsFilter 过滤对象
+     * @return Page<Product>
+     */
+    Page<V_ProductPrivate> getPageDataOfBackground(PageInfo info, GoodsFilter goodsFilter);
+
+    /**
+     * 通过物料id查询 V_ProductPrivate
+     * @param id 物料id
+     *
+     * @return V_ProductPrivate
+     */
+    V_ProductPrivate getProductAndGoodsById(Long id);
+
+    /**
+     * 通过传入ID查询数据
+     *
+     * @param idList V_ProductPrivate的idList
+     * @return V_ProductPrivate
+     */
+    List<V_ProductPrivate> findProductAndGoodsByIds(List<Long> idList);
 }

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

@@ -3450,13 +3450,25 @@ public class GoodsServiceImpl implements GoodsService {
     public Goods getGoodsById(Long id) {
         Goods goods = goodsDao.findOne(id);
         if (goods != null) {
-            if (sysConf.getStoreid().equals(goods.getStoreid())) {
-                goods.setSelfSale("寄售");
-            } else {
-                goods.setSelfSale("自营");
-            }
-            goods.setFrozen(getFrozenCount(goods.getBatchCode()));
+            goods = covertGoodsInfo(goods);
+        }
+        return goods;
+    }
+
+    /**
+     * 封装goods信息
+     *
+     * @param goods goods
+     * @return Goods
+     */
+    @Override
+    public Goods covertGoodsInfo(Goods goods) {
+        if (sysConf.getStoreid().equals(goods.getStoreid())) {
+            goods.setSelfSale("寄售");
+        } else {
+            goods.setSelfSale("自营");
         }
+        goods.setFrozen(getFrozenCount(goods.getBatchCode()));
         if (StringUtils.isEmpty(goods.getAttach()) && goods.getUuid() != null) {
             Component component = componentDao.findByUuid(goods.getUuid());
             if (component != null) {
@@ -3524,33 +3536,43 @@ public class GoodsServiceImpl implements GoodsService {
                 -> query.where(info.getPredicates(root, query, builder)).getRestriction(), info);
         List<Goods> goodsList = page.getContent();
         for (Goods goods : goodsList) {
-            if (sysConf.getStoreid().equals(goods.getStoreid())) {
-                goods.setSelfSale(StringConstant.CONSIGNMENT);
-            } else {
-                goods.setSelfSale(StringConstant.SALE_SELF);
-            }
-            goods.setFrozen(getFrozenCount(goods.getBatchCode()));
-            List<GoodsQtyPrice> prices = goods.getPrices();
-            if (CollectionUtils.isNotEmpty(prices)) {
-                int size = prices.size();
-                StringBuffer gradeBuffer = new StringBuffer();
-                StringBuffer priceBuffer = new StringBuffer();
-                for (int i = 0; i < size; i++) {
-                    if (gradeBuffer.length() > 0) {
-                        gradeBuffer.append("\n");
-                        priceBuffer.append("\n");
-                    }
-                    String priceEnd = i + 1 == size ? "以上" : prices.get(i).getEnd().toString();
-                    gradeBuffer.append(prices.get(i).getStart()).append("-").append(priceEnd);
-                    String currencyName = StringConstant.RMB.equals(goods.getCurrencyName()) ? "¥" : "$";
-                    Double price = StringConstant.RMB.equals(goods.getCurrencyName()) ? prices.get(i).getRMBPrice() : prices.get(i).getUSDPrice();
-                    priceBuffer.append(currencyName).append(price);
+           defineGoodsInfo(goods);
+        }
+        return page;
+    }
+
+    /**
+     * 给goods赋值
+     *
+     * @param goods goods
+     */
+    @Override
+    public void defineGoodsInfo(Goods goods) {
+        if (sysConf.getStoreid().equals(goods.getStoreid())) {
+            goods.setSelfSale(StringConstant.CONSIGNMENT);
+        } else {
+            goods.setSelfSale(StringConstant.SALE_SELF);
+        }
+        goods.setFrozen(getFrozenCount(goods.getBatchCode()));
+        List<GoodsQtyPrice> prices = goods.getPrices();
+        if (CollectionUtils.isNotEmpty(prices)) {
+            int size = prices.size();
+            StringBuffer gradeBuffer = new StringBuffer();
+            StringBuffer priceBuffer = new StringBuffer();
+            for (int i = 0; i < size; i++) {
+                if (gradeBuffer.length() > 0) {
+                    gradeBuffer.append("\n");
+                    priceBuffer.append("\n");
                 }
-                goods.setPriceGradeStr(gradeBuffer.toString());
-                goods.setPriceStr(priceBuffer.toString());
+                String priceEnd = i + 1 == size ? "以上" : prices.get(i).getEnd().toString();
+                gradeBuffer.append(prices.get(i).getStart()).append("-").append(priceEnd);
+                String currencyName = StringConstant.RMB.equals(goods.getCurrencyName()) ? "¥" : "$";
+                Double price = StringConstant.RMB.equals(goods.getCurrencyName()) ? prices.get(i).getRMBPrice() : prices.get(i).getUSDPrice();
+                priceBuffer.append(currencyName).append(price);
             }
+            goods.setPriceGradeStr(gradeBuffer.toString());
+            goods.setPriceStr(priceBuffer.toString());
         }
-        return page;
     }
 
     /**
@@ -3632,7 +3654,9 @@ public class GoodsServiceImpl implements GoodsService {
 
         return goodsPage;
     }
-    private int getFrozenCount(String batchCode) {
+
+    @Override
+    public int getFrozenCount(String batchCode) {
         String statusStr = OrderStatus.TOBEPAID.getCodes() + SplitChar.HYPHEN + OrderStatus.TOBEDELIVER.getCodes();
         List<Integer> statusList = new ArrayList<>();
         for (String str : statusStr.split(SplitChar.HYPHEN)) {
@@ -4114,7 +4138,10 @@ public class GoodsServiceImpl implements GoodsService {
      */
     @Override
     public com.uas.sso.support.Page<KindHierarchicalCount> getKindProductsCount(Pageable pageable, Date startTime, Date endTime) {
+        // 查询一段时间内类目数量,按类目分组查询统计数量
         StringBuffer sql = new StringBuffer("select pr_kind as thirdKind, pr_kindid as kindId, count(1) as count from products where pr_kind is not null ");
+
+        // 根据物料创建时间筛选
         if (null != startTime) {
             sql.append(" and pr_create_time >= '").append(new java.sql.Date(startTime.getTime())).append("' ");
         }
@@ -4122,30 +4149,34 @@ public class GoodsServiceImpl implements GoodsService {
             sql.append(" and pr_create_time < '").append(new java.sql.Date(endTime.getTime() + IntegerConstant.ONE_DAY_MILLISECONDS)).append("' ");
         }
         sql.append("group by pr_kind, pr_kindid");
+
+        // 统计数量
         StringBuffer countSql = new StringBuffer("select count(1) from (").append(sql).append(") as a");
         Integer count = commonDao.queryForObject(countSql.toString(), Integer.class);
+
         // 分页参数
         Integer offset = (pageable.getPageNumber() - 1) * pageable.getPageSize();
         sql.append(" limit ? offset ?");
         List<KindHierarchicalCount> kindList = commonDao.query(sql.toString(), KindHierarchicalCount.class, pageable.getPageSize(), offset);
+
+        // 根据父级类目id一层层判断是否存在
         if (CollectionUtils.isNotEmpty(kindList)) {
-            kindList.forEach(kind -> {
-                if (null != kind.getKindId()) {
-                    KindInfo kindInfo = kindInfoDao.findOne(kind.getKindId());
-                    if (null != kindInfo && null != kindInfo.getParentid() && kindInfo.getParentid() != 0) {
-                        KindInfo parentKind = kindInfoDao.findOne(kindInfo.getParentid());
-                        if (null != parentKind) {
-                            kind.setSecondKind(parentKind.getNameCn());
-                            if (null != parentKind.getParentid() && parentKind.getParentid() != 0) {
-                                KindInfo firstKind = kindInfoDao.findOne(parentKind.getParentid());
-                                if (null != firstKind) {
-                                    kind.setFirstKind(firstKind.getNameCn());
+            kindList.stream().filter(kind -> null != kind.getKindId())
+                    .forEach(kind -> {
+                        KindInfo kindInfo = kindInfoDao.findOne(kind.getKindId());
+                        if (null != kindInfo && null != kindInfo.getParentid() && 0 != kindInfo.getParentid()) {
+                            KindInfo parentKind = kindInfoDao.findOne(kindInfo.getParentid());
+                            if (null != parentKind) {
+                                kind.setSecondKind(parentKind.getNameCn());
+                                if (null != parentKind.getParentid() && 0 != parentKind.getParentid()) {
+                                    KindInfo firstKind = kindInfoDao.findOne(parentKind.getParentid());
+                                    if (null != firstKind) {
+                                        kind.setFirstKind(firstKind.getNameCn());
+                                    }
                                 }
                             }
                         }
-                    }
-                }
-            });
+                    });
         }
         return new com.uas.sso.support.Page<>(pageable.getPageNumber(), pageable.getPageSize(), kindList, count);
     }
@@ -4194,10 +4225,12 @@ public class GoodsServiceImpl implements GoodsService {
          * 线程序号
          */
         Integer i;
+
         /**
          * 过滤条件
          */
         GoodsFilter goodsFilter;
+
         /**
          * 分页大小
          */
@@ -4226,4 +4259,16 @@ public class GoodsServiceImpl implements GoodsService {
         }
     }
 
+    /**
+     * 通过goods id查询goods信息
+     *
+     * @param idList goods idList
+     * @return List<Goods>
+     */
+    @Override
+    public List<Goods> findByIds(List<Long> idList) {
+        List<Goods> goodsList = goodsDao.findAll(idList);
+        goodsList.forEach(goods ->  defineGoodsInfo(goods));
+        return goodsList;
+    }
 }

+ 156 - 9
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java

@@ -43,6 +43,7 @@ import com.uas.platform.b2c.prod.commodity.dao.V_ProductPersonDao;
 import com.uas.platform.b2c.prod.commodity.dao.V_ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.GoodsFilter;
 import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
 import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
@@ -59,7 +60,13 @@ import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
 import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
 import com.uas.platform.b2c.prod.commodity.model.V_ProductPerson;
 import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
-import com.uas.platform.b2c.prod.commodity.service.*;
+import com.uas.platform.b2c.prod.commodity.service.GoodsHistoryService;
+import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import com.uas.platform.b2c.prod.commodity.service.ProductAttachService;
+import com.uas.platform.b2c.prod.commodity.service.ProductPersonService;
+import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyService;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
@@ -93,6 +100,7 @@ import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
@@ -2482,14 +2490,7 @@ public class ProductServiceImpl implements ProductService {
         }
         Long enUU = SystemSession.getUser().getEnterprise().getUu();
         Long userUU = SystemSession.getUser().getUserUU();
-        product.setPbrand(product.getBrand());
-        product.setPbranden(product.getBrand());
-        product.setPcmpcode(product.getCmpCode());
-        product.setKind(product.getProdName());
-        product.setSourceApp("B2C");
-        product.setEnUU(enUU);
-        product.setUserUU(userUU);
-        product.setCreateTime(new Date(System.currentTimeMillis()));
+        setDefaultInfo(enUU, userUU, product);
         // PCB产品做标准判断处理
         if (null != isPcb && Objects.equals(IntegerConstant.YES_SHORT, isPcb)) {
             // 判断传入的数据是否是标准的
@@ -2558,6 +2559,33 @@ public class ProductServiceImpl implements ProductService {
         return ResultMap.success();
     }
 
+    /**
+     * 物料信息赋值
+     *
+     * @param enUU 企业UU
+     * @param userUU 用户UU
+     * @param product 物料信息
+     */
+    private void setDefaultInfo(Long enUU, Long userUU, Product product) {
+        product.setPbrand(product.getBrand());
+        product.setPbranden(product.getBrand());
+        product.setPcmpcode(product.getCmpCode());
+        product.setKind(product.getProdName());
+        product.setSourceApp("B2C");
+        product.setEnUU(enUU);
+        product.setUserUU(userUU);
+        product.setCreateTime(new Date(System.currentTimeMillis()));
+        if (null == product.getPackaging()) {
+            product.setPackaging("其他");
+        }
+        if (null == product.getErpReserve()) {
+            product.setErpReserve(DoubleConstant.zero);
+        }
+        if (null == product.getMinPackQty()) {
+            product.setMinPackQty(DoubleConstant.minReserve);
+        }
+    }
+
     /**
      * 判断是否是标准物料
      *
@@ -2876,4 +2904,123 @@ public class ProductServiceImpl implements ProductService {
         goods = goodsDao.save(goods);
         LOGGER.log("上架商品", "新增上架商品", "通过卖家中心单个物料上传新增上架商品", goods.getCode(), goods.getId());
     }
+
+    /**
+     * 根据分页参数和过滤对象分页获取数据
+     *
+     * @param info        分页参数
+     * @param goodsFilter 过滤对象
+     * @return Page<Product>
+     */
+    @Override
+    public Page<V_ProductPrivate> getPageDataOfBackground(PageInfo info, GoodsFilter goodsFilter) {
+        if (info == null) {
+            throw new IllegalOperatorException("分页参数丢失");
+        }
+        if (goodsFilter != null) {
+            convertPageInfo(info, goodsFilter);
+        }
+        Page<V_ProductPrivate> page = v_productPrivateDao.findAll((Root<V_ProductPrivate> root, CriteriaQuery<?> query, CriteriaBuilder builder)
+                -> query.where(info.getPredicates(root, query, builder)).getRestriction(), info);
+        page.getContent().forEach(product -> {
+            List<Goods> goodsList = goodsDao.findByProductId(product.getId());
+            Enterprise enterprise = enterpriseService.getEnterpriseInfo(product.getEnUU());
+            product.setEnterpriseName(enterprise.getEnName());
+            if (CollectionUtils.isNotEmpty(goodsList)) {
+                Goods goods = goodsList.get(0);
+                goodsService.defineGoodsInfo(goods);
+                product.setGoods(goods);
+            }
+        });
+        return page;
+    }
+
+    /**
+     * 封装分页条件
+     *
+     * @param info 分页信息
+     * @param goodsFilter 过滤条件
+     */
+    private void convertPageInfo(PageInfo info, GoodsFilter goodsFilter) {
+        info.filter("b2cEnabled", Constant.YES);
+        if (!StringUtils.isEmpty(goodsFilter.getStartTime())) {
+            java.sql.Date startDate = new java.sql.Date(goodsFilter.getStartTime());
+            info.expression(PredicateUtils.gte("createTime", startDate, true));
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getEndTime())) {
+            // 截止日期是到当天23:59:59,java.sql.Date精确到天,这里采用加一天小于的方法设置截止日期判断
+            java.sql.Date endDate = new java.sql.Date(goodsFilter.getEndTime() + com.uas.platform.b2c.prod.commodity.constant.IntegerConstant.ONE_DAY_MILLISECONDS);
+            info.expression(PredicateUtils.lt("createTime", endDate, true));
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getCode())) {
+            info.filter("cmpCode", goodsFilter.getCode());
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getBrand())) {
+            SimpleExpression[] brandExpression = new SimpleExpression[2];
+            brandExpression[0] = PredicateUtils.like("pbrand", goodsFilter.getBrand(), false, true);
+            brandExpression[1] = PredicateUtils.like("pbranden", goodsFilter.getBrand(), false, true);
+            info.expression(PredicateUtils.or((CriterionExpression[]) brandExpression));
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getKindUuid())) {
+            // 如果包含多个叶子类目ID,则获取所有的叶子类目对应的商品信息
+            if (goodsFilter.getKindUuid().contains(SplitChar.COMMA)) {
+                String[] kindIds = goodsFilter.getKindUuid().split(SplitChar.COMMA);
+                info.expression(PredicateUtils.in("kindid", kindIds, false));
+            } else {
+                info.expression(PredicateUtils.eq("kindid", goodsFilter.getKindUuid(), false));
+            }
+        }
+        if (goodsFilter.getHaveImg() != null) {
+            if (goodsFilter.getHaveImg()) {
+                info.expression(PredicateUtils.isNotNull("cmpImg"));
+            } else {
+                info.expression(PredicateUtils.isNull("cmpImg"));
+            }
+        }
+        if (goodsFilter.getStandard() != null) {
+            info.filter("standard", goodsFilter.getStandard() ? Constant.YES : Constant.NO);
+        }
+    }
+
+    /**
+     * 通过物料id查询 V_ProductPrivate
+     *
+     * @param id 物料id
+     * @return V_ProductPrivate
+     */
+    @Override
+    public V_ProductPrivate getProductAndGoodsById(Long id) {
+        V_ProductPrivate productPrivate = v_productPrivateDao.findOne(id);
+        List<Goods> goodsList = goodsDao.findByProductId(productPrivate.getId());
+        if (CollectionUtils.isNotEmpty(goodsList)) {
+            Goods goods = goodsList.get(0);
+            if (goods != null) {
+                goods = goodsService.covertGoodsInfo(goods);
+                productPrivate.setGoods(goods);
+            }
+        }
+        return productPrivate;
+    }
+
+    /**
+     * 通过传入ID查询数据
+     *
+     * @param idList V_ProductPrivate的idList
+     * @return V_ProductPrivate
+     */
+    @Override
+    public List<V_ProductPrivate> findProductAndGoodsByIds(List<Long> idList) {
+        List<V_ProductPrivate> privates = v_productPrivateDao.findProductInId(idList);
+        privates.forEach(product -> {
+            List<Goods> goodsList = getGoodsByProductId(product.getId());
+            Enterprise enterprise = enterpriseService.getEnterpriseInfo(product.getEnUU());
+            product.setEnterpriseName(enterprise.getEnName());
+            if (CollectionUtils.isNotEmpty(goodsList)) {
+                Goods goods = goodsList.get(0);
+                goodsService.defineGoodsInfo(goods);
+                product.setGoods(goods);
+            }
+        });
+        return privates;
+    }
 }

+ 3 - 3
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java

@@ -342,12 +342,12 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 		}
 		StringBuilder sql = new StringBuilder("select a.apply_create_time applyTime, a.apply_store_name storeName, "
 				+ "a.apply_store_enuu enuu,a.apply_auth_time agreeTime, a.apply_auth_person_name agreeName, "
-				+ "ifnull(p.count, 0) count from `store$apply` a left join (select pr_enuu, count(1) count from products");
+				+ "ifnull(p.count, 0) count from `store$apply` a left join (select pr_enuu, count(1) count from products where 1=1 ");
 		if (!StringUtils.isEmpty(startTime)) {
-			sql.append(" where pr_create_time >= '" + new java.sql.Date(startTime.getTime()) + "'");
+			sql.append(" and pr_create_time >= '" + new java.sql.Date(startTime.getTime()) + "'");
 		}
 		if (!StringUtils.isEmpty(endTime)) {
-			sql.append(" where pr_create_time < '" + new java.sql.Date(endTime.getTime() + IntegerConstant.ONE_DAY_MILLISECONDS) + "' ");
+			sql.append(" and pr_create_time < '" + new java.sql.Date(endTime.getTime() + IntegerConstant.ONE_DAY_MILLISECONDS) + "' ");
 		}
 		sql.append(" group by pr_enuu) p on p.pr_enuu = a.apply_store_enuu where a.apply_status='PASS'  and count > 0 "
 				+ "order by a.apply_create_time limit " + (pageable.getPageNumber() - 1) * pageable.getPageSize() + ","

+ 7 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseProductServiceImpl.java

@@ -4,6 +4,7 @@ import com.uas.platform.b2c.core.constant.IntegerConstant;
 import com.uas.platform.b2c.core.constant.ReleaseStatus;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.ErrorInfoConstant;
 import com.uas.platform.b2c.prod.commodity.constant.UploadConstant;
 import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
@@ -197,6 +198,12 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
         aProduct.setPublisherName(SystemSession.getUser().getUserName());
         aProduct.setPublisherTel(SystemSession.getUser().getUserTel());
         aProduct.setPublisherUu(SystemSession.getUser().getUserUU());
+        if (null == aProduct.getReserve()) {
+            aProduct.setReserve(DoubleConstant.zero);
+        }
+        if (null == aProduct.getPackaging()) {
+            aProduct.setPackaging("其他");
+        }
     }
 
     /**

BIN
src/main/resources/jxls-tpl/trade/product_background.xls