Prechádzať zdrojové kódy

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

wangcz 7 rokov pred
rodič
commit
767eb97ac1
19 zmenil súbory, kde vykonal 473 pridanie a 344 odobranie
  1. 15 0
      src/main/java/com/uas/platform/b2c/core/constant/Status.java
  2. 5 0
      src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java
  3. 4 4
      src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java
  4. 11 0
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/IntegerConstant.java
  5. 5 0
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/StringConstant.java
  6. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java
  7. 27 14
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  8. 15 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductMatchResultDao.java
  9. 10 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductPersonDao.java
  10. 11 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/V_ProductPrivateDao.java
  11. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java
  12. 6 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsFilter.java
  13. 7 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  14. 192 232
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  15. 52 26
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  16. 2 37
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  17. 28 29
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java
  18. 29 0
      src/test/java/com/uas/platform/b2c/Test.java
  19. 52 0
      src/test/java/com/uas/platform/b2c/common/base/LockTest.java

+ 15 - 0
src/main/java/com/uas/platform/b2c/core/constant/Status.java

@@ -285,6 +285,21 @@ public enum Status {
      */
     UNAVAILABLE_NOPAID(603, "无效的(因未按时付款)"),
 
+    /**
+     * {@code 601 有货}
+     */
+    HAS_INVENTORY(601, "有货"),
+
+    /**
+     * {@code 602 不足起订量}
+     */
+    LESS_THAN_MINORDER(602, "不足起订量"),
+
+    /**
+     * {@code 601 无货}
+     */
+    HAS_NO_INVENTORY(603, "无货"),
+
     /**
      * {@code 604  无效的(因供应商拒绝)}
      */

+ 5 - 0
src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java

@@ -33,6 +33,11 @@ public class JxlsExcelView extends AbstractExcelView {
 	 */
 	public final static int MAX_SIZE = 50000;
 
+    /**
+     * 管理后台goods最大导出行
+     */
+	public final static int GOODS_MAX_SIZE = 1200;
+
     /**
      * 文件名
      */

+ 4 - 4
src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java

@@ -217,14 +217,14 @@ public class StringUtilB2C {
 	 * @return 连接的字符串
 	 */
 	public static <T> String joinListUseContact(List<T> tList, String contactStr) {
-		String str = "";
+		StringBuffer str = new StringBuffer();
 		for (T t : tList) {
-			str = str +  t.toString() + contactStr;
+			str.append(t.toString()).append(contactStr);
 		}
 		if(!StringUtils.isEmpty(str)) {
-			str = str.substring(0, str.length() - 1);
+			return str.substring(0, str.length() - 1);
 		}
-		return str;
+		return str.toString();
 	}
 
 	/**

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/constant/IntegerConstant.java

@@ -7,8 +7,14 @@ package com.uas.platform.b2c.prod.commodity.constant;
  */
 public class IntegerConstant {
 
+    /**
+     * 寄售
+     */
     public static final Integer B2C_SALE = 2;
 
+    /**
+     * 自营
+     */
     public static final Integer SELF_SALE = 1;
 
     /**
@@ -25,4 +31,9 @@ public class IntegerConstant {
      * 20条数据大小
      */
     public static final Integer PAGE_SIZE_TWENTY = 20;
+
+    /**
+     * 一天的毫秒数
+     */
+    public static final Integer ONE_DAY_MILLISECONDS = 60 * 60 * 24 * 1000;
 }

+ 5 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/constant/StringConstant.java

@@ -56,4 +56,9 @@ public class StringConstant {
      * 应用来源
      */
     public static final String SOURCE = "MALL";
+
+    /**
+     * 空字符串
+     */
+    public static final String BLANK = " ";
 }

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

@@ -858,7 +858,7 @@ public class GoodsController {
         if (!modelAndView.isEmpty()) {
             return modelAndView;
         }
-        PageInfo info = new PageInfo(params);
+        PageInfo info = new PageInfo(1, JxlsExcelView.GOODS_MAX_SIZE);
         Page<Goods> productsGoods = goodsService.getPageDataOfBackground(info, goodsFilter);
         if (CollectionUtils.isNotEmpty(productsGoods.getContent())) {
             logger.info("产品导出结果 products: " + productsGoods.getContent().size());

+ 27 - 14
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -102,11 +102,13 @@ public class ProductController {
 
 	/**
 	 * 根据ids绑定至个人产品库
-	 * @param ids
+	 * @param ids 物料id
 	 * @param isAll 是否将该企业下的所有添加至个人下
+     * @param isStardand 是否是标准产品
+     * @return ResultMap 返回值
 	 */
 	@RequestMapping(value = "/person", method = RequestMethod.POST)
-	ResultMap setAllProductsByPerson(@RequestBody String ids, Integer isAll, Integer isStardand) {
+	public ResultMap setAllProductsByPerson(@RequestBody String ids, Integer isAll, Integer isStardand) {
 		Integer count = productService.setAllProductsByProductIds(ids, isAll, isStardand);
 		if (count == 0) {
 			return new ResultMap(CodeType.SAVED, "个人产品库已存在产品");
@@ -117,9 +119,11 @@ public class ProductController {
 	/**
 	 * 批量保存个人替代物料信息
 	 * @param productReplaceList 替代物料数组
+     * @param productId 物料id
+     * @return ResultMap 返回值
 	 */
 	@RequestMapping(value = "/productReplace", method = RequestMethod.POST)
-	ResultMap setProductReplacesByPerson(@RequestParam("productId") Long productId, @RequestBody String productReplaceList) {
+	public ResultMap setProductReplacesByPerson(@RequestParam("productId") Long productId, @RequestBody String productReplaceList) {
 		List<ProductReplace> productReplaces = JSON.parseArray(productReplaceList,ProductReplace.class);
 		productService.setProductReplacesByPerson(productId, productReplaces);
 		return ResultMap.success("success");
@@ -183,9 +187,11 @@ public class ProductController {
      * 批量删除产品
      *
      * @param ids the ids
+     * @param isPerson 是否是个人
+     * @return ResultMap
      */
     @RequestMapping(value = "/{ids}", method = RequestMethod.DELETE)
-	public ResultMap deleteBatch(@PathVariable("ids") String ids , Integer isPerson) {
+	public ResultMap deleteBatch(@PathVariable("ids") String ids, Integer isPerson) {
 		String[] idstrs = ids.split(SplitChar.COMMA);
 		List<Long> idsLong = new ArrayList<Long>();
 		for (String id : idstrs) {
@@ -209,12 +215,12 @@ public class ProductController {
 
 	/**
 	 * 根据物料Id获取替代物料列表
-	 * @param id
-	 * @return
+	 * @param id 物料id
+	 * @return  List<ProductReplace> 替换物料
 	 */
 	@RequestMapping(value = "/{id}/replaces", method = RequestMethod.GET)
 	public List<ProductReplace> getReplacesByProductId(@PathVariable("id") Long id) {
-    	return productService.getReplacesByProductId(id);
+		return productService.getReplacesByProductId(id);
 	}
 
     /**
@@ -244,7 +250,7 @@ public class ProductController {
 	/**
 	 * 一键匹配物料信息
 	 * @param type  匹配类型
-	 * @return
+	 * @return ResultMap 返回结果集
 	 */
 	@RequestMapping(value = "/matchbytype/{type}", method = RequestMethod.GET)
 	@ResponseBody
@@ -256,10 +262,10 @@ public class ProductController {
 	 * 一键匹配物料信息
 	 *
 	 * @param json 填充的字段
-	 * @return
+	 * @return ResultMap
 	 */
-	@RequestMapping(value = "/update", method = RequestMethod.PUT)
 	@ResponseBody
+	@RequestMapping(value = "/update", method = RequestMethod.PUT)
 	private ResultMap updateMatch(@RequestBody String json) {
 		return productService.updateMatch(json);
 	}
@@ -268,27 +274,34 @@ public class ProductController {
 	 * 统计数量
 	 *
 	 * @param isPerson 是否个人
-	 * @return
+	 * @return ap<String, Integer>
 	 */
 	@RequestMapping(value = "/count", method = RequestMethod.GET)
-	public Map<String, Integer> getProductCount(Integer isPerson){
+	public Map<String, Integer> getProductCount(Integer isPerson) {
 		logger.info("统计个人或企业非标与标准数量");
 		return productService.getProductCount(isPerson);
 	}
 
 	/**
 	 * 批量删除所有的非标的产品
+	 * @param isPerson 是否是个人
+	 * @return ResultMap
 	 */
 	@RequestMapping(value = "/unstandard", method = RequestMethod.DELETE)
-	private ResultMap deleteUnstandardByBatch(Integer isPerson) {
+	public ResultMap deleteUnstandardByBatch(Integer isPerson) {
+		logger.info("删除非标物料信息:操作人:" + SystemSession.getUser().getUserName());
 		 return productService.deleteBatch(ProductConstant.NSTANDARD, isPerson);
 	}
 
+
 	/**
 	 * 批量删除所有的标准的产品
+	 * @param isPerson 是否是个人
+	 * @return ResultMap 结果
 	 */
 	@RequestMapping(value = "/standard", method = RequestMethod.DELETE)
-	private ResultMap deleteStandardByBatch(Integer isPerson) {
+	public ResultMap deleteStandardByBatch(Integer isPerson) {
+		logger.info("删除标准物料信息:操作人:" + SystemSession.getUser().getUserName());
 		return productService.deleteBatch(ProductConstant.STANDARD, isPerson);
 	}
 

+ 15 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductMatchResultDao.java

@@ -17,7 +17,22 @@ import java.util.List;
 @Repository
 public interface ProductMatchResultDao extends JpaRepository<ProductMatchResult, Long>, JpaSpecificationExecutor<ProductMatchResult> {
 
+
+    /**
+     * 批量删除根据物料找到的匹配结果
+     *
+     * @param productIds 物料的主键
+     */
     @Modifying
     @Query(value = "delete from ProductMatchResult p where p.prid in (:productIds)")
     void deleteByProductids(@Param("productIds") List<Long> productIds);
+
+    /**
+     * 根据物料删除
+     *
+     * @param prid 物料的id
+     */
+    @Modifying
+    @Query(value = "delete from ProductMatchResult p where p.prid = :prid")
+    void deleteByProductid(@Param("prid") Long prid);
 }

+ 10 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductPersonDao.java

@@ -35,6 +35,16 @@ public interface ProductPersonDao extends JpaRepository<ProductPerson, Long>, Jp
     @Query(value = "select p.productId from ProductPerson p where p.userUU = :useruu and p.productId in (:prids)")
     List<Long> findProductIdInProductPerson(@Param("prids") List<Long> prids, @Param("useruu") Long useruu);
 
+    /**
+     * 获取已存在个人物料库的主键
+     *
+     * @param prids 物料的id
+     * @param useruu 个人用户
+     * @return
+     */
+    @Query(value = "select p.id from ProductPerson p where p.userUU = :useruu and p.productId in (:prids)")
+    List<Long> findIdsInProductPerson(@Param("prids") List<Long> prids, @Param("useruu") Long useruu);
+
     /**
      * 根据productId查找物料信息
      * @param productId

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/V_ProductPrivateDao.java

@@ -72,4 +72,15 @@ public interface V_ProductPrivateDao extends JpaRepository<V_ProductPrivate, Lon
      */
     @Query(value = "select p from V_ProductPrivate p where p.pcmpcode=:pcmpcode and p.pbranden=:pbranden and p.enUU=:enUU order by p.b2cEnabled desc")
     List<V_ProductPrivate> findProductByPcmpcodeAndPbrandenAndEnUU(@Param("pcmpcode") String pcmpcode, @Param("pbranden") String pbranden, @Param("enUU") Long enUU);
+
+
+    /**
+     * 根据enuu查询所有的prids
+     *
+     * @param standard 是否是标准
+     * @param enUU     企业的enuu
+     * @return list
+     */
+    @Query(value = "select p.id from V_ProductPrivate p where p.standard = :standard and p.enUU = :enUU and coalesce(p.b2cEnabled, 1) = 1 and coalesce(p.pcmpcode, '') <> '' and coalesce(p.pbranden, '') <> '' ")
+    List<Long> findPridsByEnUUAndStandard(@Param("standard") Integer standard, @Param("enUU") Long enUU);
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java

@@ -75,7 +75,7 @@ public class Goods implements Serializable {
 	 * 对应的器件uuid
 	 */
 	@Column(name = "cmp_uuid")
-	private String uuid;
+	private String uuid = "";
 
 	/**
 	 * 是否已在售

+ 6 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsFilter.java

@@ -36,6 +36,12 @@ public class GoodsFilter {
 
     /**
      * 在售数量
+     * <note>
+     *     前端传入三种状态:
+     *     有货: 601
+     *     不足起订量: 602
+     *     无货: 603
+     * </note>
      */
     private Integer saleNum;
 

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

@@ -104,6 +104,13 @@ public interface ProductService {
      */
     ResultMap deleteBatch(String type, Integer isPerson);
 
+    /**
+     * 批量删除个人物料
+     * @param type
+     * @return
+     */
+    ResultMap deletePersonalProductByBatch(String type);
+
     /**
      * 单个匹配
      *

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

@@ -275,8 +275,8 @@ public class GoodsServiceImpl implements GoodsService {
     @Autowired
     private FloorsService floorsService;
 
-	@Autowired
-	private ProductDetailDao productDetailDao;
+    @Autowired
+    private ProductDetailDao productDetailDao;
 
     @Autowired
     private OrderDetailService orderDetailService;
@@ -331,8 +331,8 @@ public class GoodsServiceImpl implements GoodsService {
             throw new IllegalOperatorException("商品信息Goods不能为空");
         }
         if (!StringUtils.isEmpty(goods.getSpec())) {
-                String spec = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutStringIgnoreEncode(goods.getSpec().toString(), UploadConstant.SPEC_MAX_BYTE);
-                goods.setSpec(spec);
+            String spec = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutStringIgnoreEncode(goods.getSpec().toString(), UploadConstant.SPEC_MAX_BYTE);
+            goods.setSpec(spec);
         }
         if (goods.getCurrencyName() == null) {
             throw new IllegalOperatorException("必须选择一种币别");
@@ -550,24 +550,24 @@ public class GoodsServiceImpl implements GoodsService {
         }
         Double reserve = goods.getReserve() - number;
 
-		goods.setReserve(reserve);
-		// 检查是否小于最小发货量
-		if (reserve.doubleValue() < goods.getMinBuyQty().doubleValue()) {
-			goods.setStatus(Status.UNAVAILABLE.value());
-		}
-		goodsDao.modifyReserve(goods.getBatchCode(), goods.getUuid(), goods.getReserve(), goods.getStatus().intValue());
-		// 每次批次保存同时保存一遍历史信息
-		GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.DeductReserve.getPhrase(), false);
-		goodsHistoryService.save(goodsHistory);
-		// 更新器件属性的库存
-		updateComponentTradeInfos(goods.getUuid());
-
-		// 扣除库存时,同步产品推荐的信息
-		if (Status.UNAVAILABLE.value() == goods.getStatus()) {
+        goods.setReserve(reserve);
+        // 检查是否小于最小发货量
+        if (reserve.doubleValue() < goods.getMinBuyQty().doubleValue()) {
+            goods.setStatus(Status.UNAVAILABLE.value());
+        }
+        goodsDao.modifyReserve(goods.getBatchCode(), goods.getUuid(), goods.getReserve(), goods.getStatus().intValue());
+        // 每次批次保存同时保存一遍历史信息
+        GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.DeductReserve.getPhrase(), false);
+        goodsHistoryService.save(goodsHistory);
+        // 更新器件属性的库存
+        updateComponentTradeInfos(goods.getUuid());
+
+        // 扣除库存时,同步产品推荐的信息
+        if (Status.UNAVAILABLE.value() == goods.getStatus()) {
             recommendProductService.updateRecommendProductInfo(goods);
-		}
-		return ResultMap.success(null);
-	}
+        }
+        return ResultMap.success(null);
+    }
 
     /**
      * 释放库存
@@ -752,37 +752,37 @@ public class GoodsServiceImpl implements GoodsService {
         return backGoods;
     }
 
-	@Override
-	@Transactional
-	public Goods publish(Goods goods, String deviceInfo, Product product) {
-		ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
-		if (productDetail == null) {
-			productDetail = new ProductDetail();
-		} else if (product.getErpReserve() != null) {
-			ProductDetail newProductDetail = productService.findByProductId(product.getId());
-			if (product.getErpReserve() < goods.getReserve() + newProductDetail.getB2cReserve()) {
-				throw new IllegalOperatorException("本次上架数量和已上架数量之和不可超过ERP空闲库存数量");
-			}
-		}
-		productDetail.convertFromGoods(goods, product);
-		productDetailDao.save(productDetail);
-		Goods saveGoods = publish(goods, deviceInfo);
-		return saveGoods;
-	}
-
-	@Override
-	@Transactional
-	public List<Goods> publish(List<Goods> goodses, String deviceInfo) {
-		Set<String> uuids = new HashSet<String>();
-		List<Goods> list = new ArrayList<Goods>();
-		System.out.println("执行了publishByBatch-------start");
-		publishByBatch(goodses, uuids, list);
-		System.out.println("执行了publishByBatch-----end");
-		for (String uuid : uuids) {
-			updateComponentTradeInfos(uuid);
-		}
-		return list;
-	}
+    @Override
+    @Transactional
+    public Goods publish(Goods goods, String deviceInfo, Product product) {
+        ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
+        if (productDetail == null) {
+            productDetail = new ProductDetail();
+        } else if (product.getErpReserve() != null) {
+            ProductDetail newProductDetail = productService.findByProductId(product.getId());
+            if (product.getErpReserve() < goods.getReserve() + newProductDetail.getB2cReserve()) {
+                throw new IllegalOperatorException("本次上架数量和已上架数量之和不可超过ERP空闲库存数量");
+            }
+        }
+        productDetail.convertFromGoods(goods, product);
+        productDetailDao.save(productDetail);
+        Goods saveGoods = publish(goods, deviceInfo);
+        return saveGoods;
+    }
+
+    @Override
+    @Transactional
+    public List<Goods> publish(List<Goods> goodses, String deviceInfo) {
+        Set<String> uuids = new HashSet<String>();
+        List<Goods> list = new ArrayList<Goods>();
+        System.out.println("执行了publishByBatch-------start");
+        publishByBatch(goodses, uuids, list);
+        System.out.println("执行了publishByBatch-----end");
+        for (String uuid : uuids) {
+            updateComponentTradeInfos(uuid);
+        }
+        return list;
+    }
 
     /**
      * 批量更新库存信息 辅助方法
@@ -933,37 +933,37 @@ public class GoodsServiceImpl implements GoodsService {
     public void updateComponentTradeInfos(final String uuid) {
     }
 
-	/**
-	 * 导入Excel发布产品
-	 *
-	 * @author hejq
-	 */
-	@Override
-	public ModelMap publishByWorkbook(Workbook workbook) {
-		ModelMap modelMap = new ModelMap();
-		List<String> alters = new ArrayList<String>();
-		List<Goods> goodses = new ArrayList<Goods>();
-		Sheet sheet = workbook.getSheetAt(0);
-		int rowNum = sheet.getLastRowNum();
-		if(rowNum > 2000) {
-			throw new IllegalOperatorException
-					("信息超过2000条,请拆分成2000条以内");
-		}
-		Row headerRow = sheet.getRow(0);
-		try {
-			if (headerRow != null) {
-				for (int r = 1; r <= rowNum; r++) {
-					Row row = sheet.getRow(r);
-					if (row != null && row.getCell(3) != null) {
-						Goods goods = new Goods();
-						if (row.getCell(3) == null) {
-							throw new IllegalOperatorException("请上传从第一步操作中下载的发布模板");
-						}
-						String uuid = row.getCell(3).getStringCellValue();
-						if (StringUtils.isEmpty(uuid)) {
-							throw new IllegalOperatorException("请上传从商城下载的批量发布模板");
-						}
-						goods.setUuid(uuid);
+    /**
+     * 导入Excel发布产品
+     *
+     * @author hejq
+     */
+    @Override
+    public ModelMap publishByWorkbook(Workbook workbook) {
+        ModelMap modelMap = new ModelMap();
+        List<String> alters = new ArrayList<String>();
+        List<Goods> goodses = new ArrayList<Goods>();
+        Sheet sheet = workbook.getSheetAt(0);
+        int rowNum = sheet.getLastRowNum();
+        if(rowNum > 2000) {
+            throw new IllegalOperatorException
+                    ("信息超过2000条,请拆分成2000条以内");
+        }
+        Row headerRow = sheet.getRow(0);
+        try {
+            if (headerRow != null) {
+                for (int r = 1; r <= rowNum; r++) {
+                    Row row = sheet.getRow(r);
+                    if (row != null && row.getCell(3) != null) {
+                        Goods goods = new Goods();
+                        if (row.getCell(3) == null) {
+                            throw new IllegalOperatorException("请上传从第一步操作中下载的发布模板");
+                        }
+                        String uuid = row.getCell(3).getStringCellValue();
+                        if (StringUtils.isEmpty(uuid)) {
+                            throw new IllegalOperatorException("请上传从商城下载的批量发布模板");
+                        }
+                        goods.setUuid(uuid);
 
                         // 产品uuid
                         String cmpCode = row.getCell(2).getStringCellValue();
@@ -1574,16 +1574,16 @@ public class GoodsServiceImpl implements GoodsService {
         List<GoodsBrowsingHistory> browsingHistories = browsingHistoryService.updateGoodsBrowsingHistoryByGoods(nowGoods);
         updateGoodsRelateInfo(orders, cartList, browsingHistories, null, history, nowGoods);
 
-		//更新店铺推荐的信息
-		if(isChangeSaleType) { // 如果切换了销售方式
-			Set<String> uuids = new HashSet<>();
-			uuids.add(nowGoods.getBatchCode());
-			recommendProductService.deleteProductsWhenSellerUpdateReserve(storeuuid, uuids);
-		} else {
+        //更新店铺推荐的信息
+        if(isChangeSaleType) { // 如果切换了销售方式
+            Set<String> uuids = new HashSet<>();
+            uuids.add(nowGoods.getBatchCode());
+            recommendProductService.deleteProductsWhenSellerUpdateReserve(storeuuid, uuids);
+        } else {
             recommendProductService.updateRecommendProductInfo(nowGoods);
         }
-		return nowGoods;
-	}
+        return nowGoods;
+    }
 
     /**
      * 用户更新在售产品的信息, 设置店铺名称
@@ -2368,17 +2368,17 @@ public class GoodsServiceImpl implements GoodsService {
         return ResultMap.success(commodity);
     }
 
-	@Override
-	public ResultMap offShelfGoodsByProvider(String batchCodes, String downMsg, Boolean isERP) {
-		if (StringUtils.isEmpty(batchCodes)) {
-			return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号字符串不能为空");
-		}
-		String[] batchCodeArr = batchCodes.split(",");
-		if (batchCodeArr.length == 0) {
-			return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号不能为空");
-		}
-		Set<String> uuids = new HashSet<>();
-		List<String> batchCodeList = new ArrayList<>();
+    @Override
+    public ResultMap offShelfGoodsByProvider(String batchCodes, String downMsg, Boolean isERP) {
+        if (StringUtils.isEmpty(batchCodes)) {
+            return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号字符串不能为空");
+        }
+        String[] batchCodeArr = batchCodes.split(",");
+        if (batchCodeArr.length == 0) {
+            return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号不能为空");
+        }
+        Set<String> uuids = new HashSet<>();
+        List<String> batchCodeList = new ArrayList<>();
 
         List<Goods> list = new ArrayList<>();
         for (String batchCode : batchCodeArr) {
@@ -2490,11 +2490,11 @@ public class GoodsServiceImpl implements GoodsService {
         goodsHistoryService.save(goodsHist);
 
         Goods updateGoods = goodsDao.save(goods);
-		//下架对应的批次 目前确定下架之后不做删除动作。
-		// goodsDao.deleteByBatchCode(goods.getBatchCode());
-		// 需要替换首页的信息。
-		return ResultMap.success(updateGoods);
-	}
+        //下架对应的批次 目前确定下架之后不做删除动作。
+        // goodsDao.deleteByBatchCode(goods.getBatchCode());
+        // 需要替换首页的信息。
+        return ResultMap.success(updateGoods);
+    }
 
     @Override
     public Page<Goods> findGoodsPage(final PageInfo info) {
@@ -3012,7 +3012,7 @@ public class GoodsServiceImpl implements GoodsService {
             uuids.add(goods.getUuid());
         }
 
-		goodsDao.save(goodsUpdate);
+        goodsDao.save(goodsUpdate);
         goodsHistoryDao.save(histories);
         for (String uuid : uuids) {
             updateComponentTradeInfos(uuid);
@@ -3058,29 +3058,29 @@ public class GoodsServiceImpl implements GoodsService {
         return ResultMap.success(goods);
     }
 
-	/**
-	 * 更新库存的相关信息
-	 *
-	 * @param orders 订单
-	 * @param carts 购物车信息
-	 * @param browsingHistoryList 浏览历史
-	 * @param product 产品
-	 * @return
-	 */
-	@Transactional
-	@Override
-	public ResultMap updateGoodsRelateInfo(List<Order> orders, List<Cart> carts, List<GoodsBrowsingHistory> browsingHistoryList, Product product, GoodsHistory goodsHistory, Goods goods) {
-		goodsDao.save(goods);
-		orderDao.save(orders);
-		orderService.save(orders);
-		cartService.saveCart(carts);
-		browsingHistoryService.saveGoodsBrowsingHistoryList(browsingHistoryList);
-		goodsHistoryService.save(goodsHistory);
-		return ResultMap.success(null);
-	}
-
-	@Override
-	public void addVisitCount(String batchCode) {
+    /**
+     * 更新库存的相关信息
+     *
+     * @param orders 订单
+     * @param carts 购物车信息
+     * @param browsingHistoryList 浏览历史
+     * @param product 产品
+     * @return
+     */
+    @Transactional
+    @Override
+    public ResultMap updateGoodsRelateInfo(List<Order> orders, List<Cart> carts, List<GoodsBrowsingHistory> browsingHistoryList, Product product, GoodsHistory goodsHistory, Goods goods) {
+        goodsDao.save(goods);
+        orderDao.save(orders);
+        orderService.save(orders);
+        cartService.saveCart(carts);
+        browsingHistoryService.saveGoodsBrowsingHistoryList(browsingHistoryList);
+        goodsHistoryService.save(goodsHistory);
+        return ResultMap.success(null);
+    }
+
+    @Override
+    public void addVisitCount(String batchCode) {
         goodsDao.addVisitCount(batchCode);
     }
 
@@ -3508,22 +3508,16 @@ public class GoodsServiceImpl implements GoodsService {
         return String.valueOf(goodses.size());
     }
 
-	@Override
-	public Page<Goods> getPageDataOfBackground(final PageInfo info, GoodsFilter goodsFilter) {
-		if (info == null) {
-			throw new IllegalOperatorException("分页参数丢失");
-		}
-		if (goodsFilter != null) {
-			convertPageInfo(info, goodsFilter);
-		}
-        Page<Goods> page = goodsDao.findAll(new Specification<Goods>() {
-            @Override
-            public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> query,
-                                         CriteriaBuilder builder) {
-                query.where(info.getPredicates(root, query, builder));
-                return null;
-            }
-        }, info);
+    @Override
+    public Page<Goods> getPageDataOfBackground(final PageInfo info, GoodsFilter goodsFilter) {
+        if (info == null) {
+            throw new IllegalOperatorException("分页参数丢失");
+        }
+        if (goodsFilter != null) {
+            convertPageInfo(info, goodsFilter);
+        }
+        Page<Goods> page = goodsDao.findAll((Root<Goods> root, CriteriaQuery<?> query, CriteriaBuilder builder)
+                -> query.where(info.getPredicates(root, query, builder)).getRestriction(), info);
         List<Goods> goodsList = page.getContent();
         for (Goods goods : goodsList) {
             if (sysConf.getStoreid().equals(goods.getStoreid())) {
@@ -3534,8 +3528,8 @@ public class GoodsServiceImpl implements GoodsService {
             goods.setFrozen(getFrozenCount(goods.getBatchCode()));
             goods.setMaxPriceIndex(goods.getPrices().size() - 1);
         }
-		return page;
-	}
+        return page;
+    }
 
     /**
      * 根据店铺id查找店铺所属企业enUU
@@ -3630,27 +3624,32 @@ public class GoodsServiceImpl implements GoodsService {
         return stock;
     }
 
-	private void convertPageInfo(PageInfo info, GoodsFilter goodsFilter) {
+    /**
+     * 封装分页过滤条件
+     *
+     * @param info 分页信息
+     * @param goodsFilter 筛选条件
+     */
+    private void convertPageInfo(PageInfo info, GoodsFilter goodsFilter) {
         if (!StringUtils.isEmpty(goodsFilter.getStartTime())) {
             java.sql.Date startDate = new java.sql.Date(goodsFilter.getStartTime());
             info.expression(PredicateUtils.gte("createdDate", startDate, true));
         }
         if (!StringUtils.isEmpty(goodsFilter.getEndTime())) {
             // 截止日期是到当天23:59:59,java.sql.Date精确到天,这里采用加一天小于的方法设置截止日期判断
-            Integer addend = 60 * 60 * 24 * 1000;
-            java.sql.Date endDate = new java.sql.Date(goodsFilter.getEndTime() + addend);
+            java.sql.Date endDate = new java.sql.Date(goodsFilter.getEndTime() + IntegerConstant.ONE_DAY_MILLISECONDS);
             info.expression(PredicateUtils.lt("createdDate", endDate, true));
         }
-		if (!StringUtils.isEmpty(goodsFilter.getCode())) {
-			info.filter("code", goodsFilter.getCode());
-		}
-		if (!StringUtils.isEmpty(goodsFilter.getBrand())) {
-			SimpleExpression[] brandExpression = new SimpleExpression[2];
-			brandExpression[0] = PredicateUtils.like("brandNameCn", goodsFilter.getBrand(), false, true);
-			brandExpression[1] = PredicateUtils.like("brandNameEn", goodsFilter.getBrand(), false, true);
-			info.expression(PredicateUtils.or((CriterionExpression[]) brandExpression));
-		}
-		if (!StringUtils.isEmpty(goodsFilter.getStore())) {
+        if (!StringUtils.isEmpty(goodsFilter.getCode())) {
+            info.filter("code", goodsFilter.getCode());
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getBrand())) {
+            SimpleExpression[] brandExpression = new SimpleExpression[2];
+            brandExpression[0] = PredicateUtils.like("brandNameCn", goodsFilter.getBrand(), false, true);
+            brandExpression[1] = PredicateUtils.like("brandNameEn", goodsFilter.getBrand(), false, true);
+            info.expression(PredicateUtils.or((CriterionExpression[]) brandExpression));
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getStore())) {
             if (RegexConstant.onlyHaveNumber(goodsFilter.getStore())) {
                 SimpleExpression[] storeExpression = new SimpleExpression[2];
                 storeExpression[0] = PredicateUtils.eq("enUU", goodsFilter.getStore(), true);
@@ -3659,8 +3658,8 @@ public class GoodsServiceImpl implements GoodsService {
             } else {
                 info.filter("storeName", goodsFilter.getStore());
             }
-		}
-		if (!StringUtils.isEmpty(goodsFilter.getKindUuid())) {
+        }
+        if (!StringUtils.isEmpty(goodsFilter.getKindUuid())) {
             // 如果包含多个叶子类目ID,则获取所有的叶子类目对应的商品信息
             if (goodsFilter.getKindUuid().contains(SplitChar.COMMA)) {
                 String[] kindIds = goodsFilter.getKindUuid().split(SplitChar.COMMA);
@@ -3669,21 +3668,21 @@ public class GoodsServiceImpl implements GoodsService {
                 info.expression(PredicateUtils.eq("kindUuid", goodsFilter.getKindUuid(), false));
             }
         }
-		if (!StringUtils.isEmpty(goodsFilter.getCurrency())) {
-			info.expression(PredicateUtils.eq("currencyName", goodsFilter.getCurrency(), false));
-		}
-		if (goodsFilter.getSaleSelf() != null) {
-			if (goodsFilter.getSaleSelf()) {
-				info.expression(PredicateUtils.ne("storeid", sysConf.getStoreid(), false));
-			} else {
-				info.expression(PredicateUtils.eq("storeid", sysConf.getStoreid(), false));
-			}
-		}
-		if (goodsFilter.getBreakUp() != null) {
+        if (!StringUtils.isEmpty(goodsFilter.getCurrency())) {
+            info.expression(PredicateUtils.eq("currencyName", goodsFilter.getCurrency(), false));
+        }
+        if (goodsFilter.getSaleSelf() != null) {
+            if (goodsFilter.getSaleSelf()) {
+                info.expression(PredicateUtils.ne("storeid", sysConf.getStoreid(), false));
+            } else {
+                info.expression(PredicateUtils.eq("storeid", sysConf.getStoreid(), false));
+            }
+        }
+        if (goodsFilter.getBreakUp() != null) {
             int breakUp = goodsFilter.getBreakUp() ? 1 : 0;
-			info.filter("breakUp", breakUp, false);
-		}
-		if (goodsFilter.getHaveImg() != null) {
+            info.filter("breakUp", breakUp, false);
+        }
+        if (goodsFilter.getHaveImg() != null) {
             if (goodsFilter.getHaveImg()) {
                 info.expression(PredicateUtils.isNotNull("img"));
             } else {
@@ -3692,9 +3691,11 @@ public class GoodsServiceImpl implements GoodsService {
         }
         if (goodsFilter.getStandard() != null) {
             if (goodsFilter.getStandard()) {
-                info.expression(PredicateUtils.isNotNull("uuid"));
+                info.expression(PredicateUtils.and(PredicateUtils.isNotNull("uuid"),
+                        PredicateUtils.ne("uuid", StringConstant.BLANK, true)));
             } else {
-                info.expression(PredicateUtils.isNull("uuid"));
+                info.expression(PredicateUtils.or(PredicateUtils.isNull("uuid"),
+                        PredicateUtils.eq("uuid", StringConstant.BLANK, true)));
             }
         }
         if (goodsFilter.getAudited() != null) {
@@ -3712,7 +3713,7 @@ public class GoodsServiceImpl implements GoodsService {
                     statusSet.add(goodsFilter.getSaleStatus());
                 }
             }
-            if (goodsFilter.getSaleNum() != null && 603 != goodsFilter.getSaleNum()) {
+            if (goodsFilter.getSaleNum() != null && Status.HAS_NO_INVENTORY.value() != goodsFilter.getSaleNum()) {
                 statusSet.add(goodsFilter.getSaleNum());
             }
             if (CollectionUtils.isNotEmpty(statusSet)) {
@@ -3724,10 +3725,10 @@ public class GoodsServiceImpl implements GoodsService {
                 info.expression(PredicateUtils.or((CriterionExpression[]) statusExpression));
             }
         }
-        if (goodsFilter.getSaleNum() != null && 603 == goodsFilter.getSaleNum()) {
+        if (goodsFilter.getSaleNum() != null && Status.HAS_NO_INVENTORY.value() == goodsFilter.getSaleNum()) {
             info.expression(PredicateUtils.eq("reserve", 0, true));
         }
-	}
+    }
 
     @Override
     public Map<String, List<Goods>> getCmsPcb() {
@@ -4064,14 +4065,12 @@ public class GoodsServiceImpl implements GoodsService {
      */
     @Override
     public com.uas.sso.support.Page<BrandCount> getBrandProductsCount(Pageable pageable, Date startTime, Date endTime) {
-        java.sql.Date startDate = assignStartDate(startTime);
-        java.sql.Date endDate = assignEndDate(endTime);
         StringBuffer sql = new StringBuffer("select pr_brand as brand, count(1) as count from products where pr_brand is not null ");
-        if (null != startDate) {
-            sql.append(" and pr_create_time >= '").append(startDate).append("' ");
+        if (null != startTime) {
+            sql.append(" and pr_create_time >= '").append(new java.sql.Date(startTime.getTime())).append("' ");
         }
-        if (null != endDate) {
-            sql.append(" and pr_create_time < '").append(endDate).append("' ");
+        if (null != endTime) {
+            sql.append(" and pr_create_time < '").append(new java.sql.Date(endTime.getTime() + IntegerConstant.ONE_DAY_MILLISECONDS) ).append("' ");
         }
         sql.append("group by pr_brand");
         StringBuffer countSql = new StringBuffer("select count(1) from (").append(sql).append(") as a");
@@ -4083,43 +4082,6 @@ public class GoodsServiceImpl implements GoodsService {
         return new com.uas.sso.support.Page<>(pageable.getPageNumber(), pageable.getPageSize(), brandCountList, count);
     }
 
-    /**
-     * 设置开始时间
-     *
-     * @param startTime 前端传入开始时间
-     * @return java.sql.Date
-     */
-    private java.sql.Date assignStartDate(Date startTime) {
-        java.sql.Date startDate;
-        if (null == startTime) {
-            startDate = null;
-        } else {
-            startDate = new java.sql.Date(startTime.getTime());
-        }
-       return startDate;
-    }
-
-    /**
-     * 设置截止时间
-     * 截止时间+1是取到截止时间的23:59:59数据,
-     * java.sql.Date 精确到天,所以采用+1天小于来过滤
-     *
-     * @param endTime 前端传入截止时间
-     * @return java.sql.Date
-     */
-    private java.sql.Date assignEndDate(Date endTime) {
-        java.sql.Date endDate;
-        // 截止时间+1天
-        if (null == endTime) {
-            endDate = null;
-        } else {
-            endDate = new java.sql.Date(endTime.getTime());
-            Integer addend = 60 * 60 * 24 * 1000;
-            endDate = new java.sql.Date(endDate.getTime() + addend);
-        }
-        return endDate;
-    }
-
     /**
      * 通过分页参数获取类目数量
      *
@@ -4130,14 +4092,12 @@ public class GoodsServiceImpl implements GoodsService {
      */
     @Override
     public com.uas.sso.support.Page<KindHierarchicalCount> getKindProductsCount(Pageable pageable, Date startTime, Date endTime) {
-        java.sql.Date startDate = assignStartDate(startTime);
-        java.sql.Date endDate = assignEndDate(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 != startDate) {
-            sql.append(" and pr_create_time >= '").append(startDate).append("' ");
+        if (null != startTime) {
+            sql.append(" and pr_create_time >= '").append(new java.sql.Date(startTime.getTime())).append("' ");
         }
-        if (null != endDate) {
-            sql.append(" and pr_create_time < '").append(endDate).append("' ");
+        if (null != endTime) {
+            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");

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

@@ -601,7 +601,7 @@ public class ProductServiceImpl implements ProductService {
         if (CollectionUtils.isEmpty(ids)) {
             return new ResultMap(CodeType.NO_INFO, "没有传入有效信息");
         }
-        if (null != isPerson && isPerson.intValue() == IntegerConstant.YES_SHORT.intValue()) {
+        if (IntegerConstant.YES_SHORT.equals(isPerson)) {
             String sql = "delete from product$users where pu_prid in (:ids) and pu_useruu = " + SystemSession.getUser().getUserUU();
             Map<String, List<Long>> map = new HashedMap();
             map.put("ids", ids);
@@ -679,35 +679,27 @@ public class ProductServiceImpl implements ProductService {
      */
     @Override
     public ResultMap deleteBatch(String type, Integer isPerson) {
-        Integer standard;
+        //如果是删除个人物料
+        if (IntegerConstant.YES_SHORT.equals(isPerson)) {
+            ResultMap resultMap = deletePersonalProductByBatch(type);
+            return resultMap;
+        }
+        Integer standard = ProductConstant.STANDARD.equals(type) ? IntegerConstant.YES_SHORT : IntegerConstant.NO_SHORT;
         List<ProductPerson> personList;
         Integer fail = 0;
         Integer success = 0;
         Integer isHave = 0;
         Long uu = SystemSession.getUser().getEnterprise().getUu();
-        if (ProductConstant.STANDARD.equals(type)) {
-            standard = IntegerConstant.YES_SHORT;
-        } else {
-            standard = IntegerConstant.NO_SHORT;
-        }
-        List<Product> products = productDao.findProductByEnuuAndStandardAndEnabled(uu, standard, IntegerConstant.YES_SHORT);
-        for (Product product : products) {
-            if (null != isPerson && isPerson.intValue() == IntegerConstant.YES_SHORT.intValue()) {
-                List<ProductPerson> productPersonList = productPersonDao.findByProductIdAndUserUU(product.getId(),SystemSession.getUser().getUserUU());
-                if (!CollectionUtils.isEmpty(productPersonList)) {
-                    Long ppid = productPersonList.get(0).getId();
-                    productPersonDao.delete(ppid);
-                }
-                continue;
-            }
+        List<Long> products = v_productPrivateDao.findPridsByEnUUAndStandard(standard, uu);
+        for (Long prid : products) {
             try {
-                personList = productPersonDao.findByProductId(product.getId());
+                personList = productPersonDao.findByProductId(prid);
                 if (CollectionUtils.isNotEmpty(personList)) {
                     fail++;
                     continue;
                 }
                 //查看是否存在正常未取消的订单
-                List<Goods> goodses = goodsDao.findByProductId(product.getId());
+                List<Goods> goodses = goodsDao.findByProductId(prid);
                 Boolean isExistOrder = false;
                 String codes = OrderStatus.UNAVAILABLE.getCodes() + "-" + Status.TOBECONFIRMED.value();
                 for (Goods goods : goodses) {
@@ -730,13 +722,11 @@ public class ProductServiceImpl implements ProductService {
                 }
                 if (!isExistOrder) {
                     // 删除外键关联的匹配结果列表,不然删除product失败
-                    Set<ProductMatchResult> productMatchResultSet =  product.getMatchresults();
-                    productMatchResultDao.delete(productMatchResultSet);
+                    productMatchResultDao.deleteByProductid(prid);
                     goodsService.deleteGoods(goodses);
-                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(prid);
                     if (null == productPrivate) {
-                        productPrivate = new ProductPrivate();
-                        productPrivate.setPrId(product.getId());
+                        productPrivate = new ProductPrivate(prid);
                     } else {
                         if (productPrivate.getB2cEnabled().equals(IntegerConstant.NO_SHORT)) {
                             fail++;
@@ -773,6 +763,42 @@ public class ProductServiceImpl implements ProductService {
         return new ResultMap(status, message);
     }
 
+    /**
+     * 批量删除个人物料
+     *
+     * @param type
+     * @return
+     */
+    @Override
+    public ResultMap deletePersonalProductByBatch(String type) {
+        Integer standard;
+        Integer success = 0;
+        Long uu = SystemSession.getUser().getEnterprise().getUu();
+        if (ProductConstant.STANDARD.equals(type)) {
+            standard = IntegerConstant.YES_SHORT;
+        } else {
+            standard = IntegerConstant.NO_SHORT;
+        }
+        List<Long> prids = productDao.findPridsByEnuuAndStardand(uu, standard);
+        List<Long> personPrIds = null;
+        if (CollectionUtils.isNotEmpty(prids)) {
+            personPrIds = productPersonDao.findIdsInProductPerson(prids, SystemSession.getUser().getUserUU());
+            if (CollectionUtils.isNotEmpty(personPrIds)) {
+                success = personPrIds.size();
+                String ids = StringUtilB2C.joinListUseContact(personPrIds, SplitChar.COMMA);
+                jdbcTemplate.update("delete from product$users where pu_id in (" + ids +")");
+            }
+        }
+        String message = "";
+        if (IntegerConstant.NO_SHORT.equals(success)) {
+            message = "没有需要删除的信息";
+        } else {
+            message = "成功删除" + success + "条";
+        }
+        return new ResultMap(CodeType.OK, message);
+    }
+
+
     @Override
     public Product match(Long id) {
         Product product = productDao.findOne(id);
@@ -1500,11 +1526,11 @@ public class ProductServiceImpl implements ProductService {
         Map<String, Integer> resultMap = new HashMap<>();
         Long enUU = SystemSession.getUser().getEnterprise().getUu();
         Long userUU = SystemSession.getUser().getUserUU();
-        if (enUU == null){
+        if (enUU == null) {
             throw new IllegalOperatorException("店铺信息丢失,请刷新后重试");
         }
         int standard,nStandard;
-        if (null != isPerson && isPerson.intValue() == IntegerConstant.YES_SHORT.intValue()){
+        if (IntegerConstant.YES_SHORT.equals(isPerson)){
             standard = v_productPersonDao.getCountByEnuuAndUserUUAndStatusAndEnabled(enUU, userUU, ShortConstant.YES_SHORT, IntegerConstant.YES_SHORT);
             nStandard = v_productPersonDao.getCountByEnuuAndUserUUAndStatusAndEnabled(enUU, userUU, ShortConstant.NO_SHORT, IntegerConstant.YES_SHORT);
         } else {

+ 2 - 37
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java

@@ -1887,7 +1887,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 */
 	public Integer releaseToGoods(List<ReleaseProductByBatch> list, Integer ignoreImport, Set<Long> idSet) {
 		if (CollectionUtils.isNotEmpty(list)) {
-			List<Goods> goodses = new ArrayList<>();
 			Goods goods = null;
 			TradeDeliveryDelayTime delayTime = getDelayTime(list.get(0));
 			List<Goods> goodlist = null;
@@ -1927,19 +1926,16 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 					goods = new Goods();
 					goods.setGoodsByReleaseProductByBatch(releaseProductByBatch, delayTime);
 					goodsHistoryList.add(goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase(), false));
-					goodses.add(goods);
+					updateGoods.add(goods);
 				}
 			}
-			if (CollectionUtils.isNotEmpty(goodses)) {
-				commonDao.save(goodses, Goods.class);
-			}
 			if (CollectionUtils.isNotEmpty(updateGoods)) {
                 goodsDao.save(updateGoods);
             }
             if (CollectionUtils.isNotEmpty(goodsHistoryList)) {
 				goodsHistoryService.save(goodsHistoryList);
 			}
-			return (goodses.size() + updateGoods.size());
+			return updateGoods.size();
 		} else {
 			return 0;
 		}
@@ -2178,41 +2174,10 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
         final Runnable afterPublishToGoodsRunnable = new Runnable() {
 			@Override
 			public void run() {
-
-				//创建历史库存
-//				List<Goods> goodses1 = goodsService.findByBatchId(batchid);
-//				List<GoodsHistory> list = new ArrayList<>();
-//				for (Goods goods : goodses1) {
-//					GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase(), false);
-//					list.add(goodsHistory);
-//				}
-//				if (CollectionUtils.isNotEmpty(list)) {
-//					goodsHistoryService.save(list);
-//				}
 				//创建物料的私有信息
 				productPrivateService.newProductPrivateIfNotExist(productIds);
 				//添加个人关系
                 restTemplate.postForEntity(productServiceIp + "/product/assign/batch?userUU=" + userUU, productIds, String.class).getBody();
-
-//				if ((reIds != null) && (reIds.size() != 0)) {
-//					List<ReleaseProductByBatch> productByBatches = releaseProductByBatchDao.findAll(reIds);
-//					List<Long> prIds = new ArrayList<>();
-//					for (ReleaseProductByBatch productByBatch : productByBatches) {
-//						if (productByBatch.getProductid() != null) {
-//							prIds.add(productByBatch.getProductid());
-//						}
-//					}
-//					List<Product> products = productService.findByProductId(prIds);
-//					for (Product product : products) {
-//						for (ReleaseProductByBatch productByBatch : productByBatches) {
-//							if ((productByBatch.getProductid() != null) && (product.getId().longValue() == productByBatch.getProductid().longValue())) {
-//								product.setSpec(productByBatch.getSpec());
-//							}
-//						}
-//					}
-//					List<Goods> goodses = goodsDao.findByProductIds(prIds);
-//					goodsService.updateSpecByProducts(products, goodses);
-//				}
             }
 		};
 		try {

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

@@ -6,6 +6,7 @@ import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.UuidUtils;
+import com.uas.platform.b2c.prod.commodity.constant.IntegerConstant;
 import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
 import com.uas.platform.b2c.prod.store.model.EnterpriseSimple;
@@ -261,7 +262,8 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 		}, pageInfo);
 	}
 
-	public Page<StoreApply> pageStoreApplicationsByAuthor(final PageInfo pageInfo, StoreApply.ApplyStatus status, StoreType type, String keyword) {
+	@Override
+    public Page<StoreApply> pageStoreApplicationsByAuthor(final PageInfo pageInfo, StoreApply.ApplyStatus status, StoreType type, String keyword) {
 		if (status != null) {
 			if (StoreApply.ApplyStatus.PREPARE.equals(status)) {
 				SimpleExpression exCheck = new SimpleExpression("status", StoreApply.ApplyStatus.CHECK, CriterionExpression.Operator.EQ);
@@ -304,23 +306,9 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 			if (prepareApply != null && passApply != null) {
 				return new ResultMap(CodeType.NOT_PERMIT, "已审核和待审核的开铺申请同时存在");
 			} else if (prepareApply != null) {
-                Enterprise enterprise = enterpriseDao.findByUu(prepareApply.getEnterprise().getUu());
-                EnterpriseSimple enterpriseSimple = prepareApply.getEnterprise();
-                enterpriseSimple.setEnName(enterprise.getEnName());
-                enterpriseSimple.setEnShortname(enterprise.getEnShortname());
-                enterpriseSimple.setAddress(enterprise.getEnAddress());
-                enterpriseSimple.setEnUrl(enterprise.getEnUrl());
-                prepareApply.setEnterprise(enterpriseSimple);
-				return ResultMap.success(prepareApply);
-			} else if (passApply != null){
-                Enterprise enterprise = enterpriseDao.findByUu(passApply.getEnterprise().getUu());
-                EnterpriseSimple enterpriseSimple = passApply.getEnterprise();
-                enterpriseSimple.setEnName(enterprise.getEnName());
-                enterpriseSimple.setEnShortname(enterprise.getEnShortname());
-                enterpriseSimple.setAddress(enterprise.getEnAddress());
-                enterpriseSimple.setEnUrl(enterprise.getEnUrl());
-                passApply.setEnterprise(enterpriseSimple);
-				return ResultMap.success(passApply);
+				return ResultMap.success(covert(prepareApply));
+			} else if (passApply != null) {
+				return ResultMap.success(covert(passApply));
 			} else {
 				return ResultMap.success(null);
 			}
@@ -330,7 +318,24 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 		}
 	}
 
-	@Override
+    /**
+     * 店铺赋值方法提取出来
+     *
+     * @param storeApply 店铺信息
+     * @return StoreApply
+     */
+    private StoreApply covert(StoreApply storeApply) {
+        Enterprise enterprise = enterpriseDao.findByUu(storeApply.getEnterprise().getUu());
+        EnterpriseSimple enterpriseSimple = storeApply.getEnterprise();
+        enterpriseSimple.setEnName(enterprise.getEnName());
+        enterpriseSimple.setEnShortname(enterprise.getEnShortname());
+        enterpriseSimple.setAddress(enterprise.getEnAddress());
+        enterpriseSimple.setEnUrl(enterprise.getEnUrl());
+        storeApply.setEnterprise(enterpriseSimple);
+        return storeApply;
+    }
+
+    @Override
 	public com.uas.sso.support.Page<StoreInfoAndProdExport> getStoreInfoAndProdCount(Pageable pageable, Date startTime, Date endTime) {
 		if (pageable == null) {
 			return null;
@@ -341,11 +346,8 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 		if (!StringUtils.isEmpty(startTime)) {
 			sql.append(" where pr_create_time >= '" + new java.sql.Date(startTime.getTime()) + "'");
 		}
-		if (!StringUtils.isEmpty(endTime) && !StringUtils.isEmpty(startTime)) {
-			sql.append(" and pr_create_time <= '" + new java.sql.Date(endTime.getTime()) + "' ");
-		}
-		if (!StringUtils.isEmpty(endTime) && StringUtils.isEmpty(startTime)) {
-			sql.append(" where pr_create_time <= '" + new java.sql.Date(endTime.getTime()) + "' ");
+		if (!StringUtils.isEmpty(endTime)) {
+			sql.append(" where 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() + ","
@@ -354,11 +356,8 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 		if (!StringUtils.isEmpty(startTime)) {
 			totalSql.append(" where pr_create_time >= '" + new java.sql.Date(startTime.getTime()) + "'");
 		}
-		if (!StringUtils.isEmpty(endTime) && !StringUtils.isEmpty(startTime)) {
-			totalSql.append(" and pr_create_time <= '" + new java.sql.Date(endTime.getTime()) + "' ");
-		}
-		if (!StringUtils.isEmpty(endTime) && StringUtils.isEmpty(startTime)) {
-			totalSql.append(" where pr_create_time <= '" + new java.sql.Date(endTime.getTime()) + "' ");
+		if (!StringUtils.isEmpty(endTime)) {
+			totalSql.append(" and pr_create_time < '" + new java.sql.Date(endTime.getTime() + IntegerConstant.ONE_DAY_MILLISECONDS) + "' ");
 		}
 		totalSql.append(" group by pr_enuu) p on p.pr_enuu = a.apply_store_enuu where a.apply_status='PASS' and count > 0 ");
 		Integer total = commonDao.queryForObject(totalSql.toString(), Integer.class);

+ 29 - 0
src/test/java/com/uas/platform/b2c/Test.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c;
 
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,4 +41,31 @@ public class Test {
         UUID uuid = UUID.randomUUID();
         System.out.println(uuid);
     }
+
+    @org.junit.Test
+    public void testCopy() {
+        List<Integer> list = new ArrayList<>();
+        list.add(1);
+        list.add(2);
+        list.add(3);
+        Integer[] list2 = new Integer[list.size()];
+        System.arraycopy(list.toArray(), 0, list2, 0, list.size());
+        System.out.println(list2);
+    }
+
+    @org.junit.Test
+    public void stringBufferTest() {
+        List<Long> list = new ArrayList<>();
+        list.add(1l);
+        list.add(2l);
+        String s1 = StringUtilB2C.joinListUseContact(list, SplitChar.COMMA);
+        System.out.println(s1);
+        StringBuffer st = new StringBuffer();
+        for (Long aLong : list) {
+            st.append(aLong);
+            String s = st.substring(0, 1);
+            System.out.println(s);
+        }
+        System.out.println(st.toString());
+    }
 }

+ 52 - 0
src/test/java/com/uas/platform/b2c/common/base/LockTest.java

@@ -0,0 +1,52 @@
+package com.uas.platform.b2c.common.base;
+
+import com.uas.platform.b2c.BaseJunitTest;
+import com.uas.platform.b2c.common.base.dao.CommonDao;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author yuj
+ * @date 2018/10/30 21:08
+ */
+public class LockTest extends BaseJunitTest {
+
+    @Autowired
+    private GoodsDao goodsDao;
+
+    @Autowired
+    private CommonDao commonDao;
+
+    @Autowired
+    private CreateNumberService createNumberService;
+
+    /**
+     * 通过commmonDao批量插入信息和goodsDao批量更新信息,查看是否能导致死锁
+     */
+    @Test
+    public void testSaveLock() {
+        // 2811条数据
+        List<Goods> goods = goodsDao.findByEnUU(10043516l);
+        Goods[] goodsList = new Goods[goods.size()];
+        System.arraycopy(goods.toArray(), 0 , goodsList, 0, goods.size());
+        for (Goods good : goods) {
+            String code = createNumberService.getTimeNumber("trade$goods", 8);
+            good.setBatchCode(code);
+            good.setSampleAppliedQty(1d);
+        }
+        for (Goods goods1 : goodsList) {
+            String code = createNumberService.getTimeNumber("trade$goods", 8);
+            goods1.setBatchCode(code);
+            goods1.setId(null);
+        }
+        List<Goods> list = Arrays.asList(goodsList);
+        commonDao.save(list, Goods.class);
+        goodsDao.save(goods);
+    }
+}