Browse Source

ERP的物料 批量上架

yujia 8 years ago
parent
commit
5f1d4da4b6
17 changed files with 829 additions and 15 deletions
  1. 5 0
      src/main/java/com/uas/platform/b2c/core/constant/IntegerConstant.java
  2. 10 0
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/DoubleConstant.java
  3. 20 0
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/StringConstant.java
  4. 10 6
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  5. 55 0
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/UASBatchPutOnPropertyController.java
  6. 20 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java
  7. 21 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/UASBatchPutOnPropertyDao.java
  8. 13 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/UASBatchPutOnPropertyHistoryDao.java
  9. 145 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/UASBatchPutOnProperty.java
  10. 154 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/UASBatchPutOnPropertyHistory.java
  11. 8 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  12. 17 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/UASBatchPutOnPropertyHistoryService.java
  13. 27 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/UASBatchPutOnPropertyService.java
  14. 6 5
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  15. 157 4
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  16. 34 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/UASBatchPutOnPropertyHistoryServiceImpl.java
  17. 127 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/UASBatchPutOnPropertyServiceImpl.java

+ 5 - 0
src/main/java/com/uas/platform/b2c/core/constant/IntegerConstant.java

@@ -19,4 +19,9 @@ public class IntegerConstant {
      * 否Integer 类型
      */
     public static final Integer NO_SHORT = 0;
+
+    /**
+     * 默认单价的精确小数
+     */
+    public static final Integer PRICE_FRACTION = 6;
 }

+ 10 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/constant/DoubleConstant.java

@@ -36,4 +36,14 @@ public class DoubleConstant {
      * 最大价格
      */
     public static final Double maxPrice = 10000d;
+
+    /**
+     * 最小的浮动率 值
+     */
+    public static final Double minFluctuateRate = 0.01d;
+
+    /**
+     * 最大的浮动率 值
+     */
+    public static final Double maxFluctuateRate = 2d;
 }

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

@@ -11,8 +11,28 @@ public class StringConstant {
      */
     public static final String SELF_TAG = "类型";
 
+    /**
+     * 初始的标签
+     */
+    public static final String INIT_TAG = "类型1";
+
     /**
      * 商城单位
      */
     public static final String UNIT = "PCS";
+
+    /**
+     * erp 标识
+     */
+    public static final String ERP = "ERP";
+
+    /**
+     * 币别
+     */
+    public static final String RMB = "RMB";
+
+    /**
+     * 无物料
+     */
+    public static final String DEFAULTPACKAGING = "无";
 }

+ 10 - 6
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -1,10 +1,5 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
-import com.alibaba.fastjson.JSONObject;
-import com.uas.platform.b2c.core.constant.SplitChar;
-import com.uas.platform.b2c.core.support.view.JxlsExcelView;
-import com.uas.platform.b2c.core.constant.SplitChar;
-import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
@@ -13,7 +8,6 @@ import com.uas.platform.b2c.prod.commodity.model.Goods;
 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.service.GoodsService;
-import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -310,4 +304,14 @@ public class ProductController {
 	public ProductDetail saveDetail(@PathVariable("productId") Long productId, @RequestBody Goods goods) {
 		return productService.saveDetail(productId, goods);
 	}
+
+	/**
+	 * 用户批量上架
+	 *
+	 * @return
+	 */
+	@RequestMapping(value = "/batch", method = RequestMethod.PUT)
+	public ResultMap batchPutOn() {
+		return productService.batchPutOn();
+	}
 }

+ 55 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/controller/UASBatchPutOnPropertyController.java

@@ -0,0 +1,55 @@
+package com.uas.platform.b2c.prod.commodity.controller;
+
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import org.springframework.beans.factory.annotation.Autowired;
+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.RestController;
+
+/**
+ * UAS批量上架的参数设置
+ *
+ * @author yuj 2018-01-19 14:05
+ */
+@RestController
+@RequestMapping(value = "/UASBatchPutOnProperty")
+public class UASBatchPutOnPropertyController {
+
+    private final UASBatchPutOnPropertyService uasBatchPutOnPropertyService;
+
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    public UASBatchPutOnPropertyController(UASBatchPutOnPropertyService uasBatchPutOnPropertyService) {
+        this.uasBatchPutOnPropertyService = uasBatchPutOnPropertyService;
+    }
+
+    /**
+     * 保存用户配置的信息
+     *
+     * @param property 传入的数据
+     * @return
+     */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public ResultMap save(@RequestBody UASBatchPutOnProperty property) {
+        ResultMap resultMap = uasBatchPutOnPropertyService.save(property);
+        logger.log("UAS批量上架", "保存批量上架的配置信息");
+        return resultMap;
+    }
+
+    /**
+     * 获取的商城的配置信息
+     *
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    public UASBatchPutOnProperty getUASBatchPutOnProperty() {
+        logger.log("UAS批量上架", "获取配置信息");
+        return uasBatchPutOnPropertyService.get();
+    }
+}

+ 20 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java

@@ -116,6 +116,26 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
      */
     List<Product> findByEnUUAndCmpUuIdAndSourceApp(Long enuu, String uuid, String sourceapp);
 
+    /**
+     * 通过企业uu,标准器件uuid,来源获取物料信息
+     *
+     * @param enuu 企业uu
+     * @param sourceapp 来源
+     * @return
+     */
+    @Query(value = "select p from Product p where p.enUU = :enuu and p.sourceApp = :sourceapp and (p.batchCount = 0 or p.batchCount is null) and (p.erpReserve is not null and p.erpReserve <> 0)")
+    List<Product> findByEnUUAndSourceAppNotPutOn(Long enuu, String sourceapp);
+
+    /**
+     * 统计数量 通过企业uu,来源获取物料信息 并且未存在上架信息
+     *
+     * @param enuu 企业uu
+     * @param sourceapp 来源
+     * @return
+     */
+    @Query(value = "select count(1) from Product p where p.enUU = :enuu and p.sourceApp = :sourceapp and (p.batchCount = 0 or p.batchCount is null)")
+    Integer findCountByEnUUAndSourceAppNotPutOn(@Param("enuu") Long enuu, @Param("sourceapp") String sourceapp);
+
     /**
      * 获取该企业的产品信息
      * @param enuu 企业的uu号

+ 21 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/UASBatchPutOnPropertyDao.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2c.prod.commodity.dao;
+
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by yujia on 2018/1/19.
+ */
+@Repository
+public interface UASBatchPutOnPropertyDao extends JpaRepository<UASBatchPutOnProperty, Long>, JpaSpecificationExecutor<UASBatchPutOnProperty> {
+
+    /**
+     * 根据企业enuu  获取配置信息
+     *
+     * @param enuu
+     * @return
+     */
+    UASBatchPutOnProperty findUASBatchPutOnPropertyByEnuu(Long enuu);
+}

+ 13 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/UASBatchPutOnPropertyHistoryDao.java

@@ -0,0 +1,13 @@
+package com.uas.platform.b2c.prod.commodity.dao;
+
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnPropertyHistory;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by yujia on 2018/1/19.
+ */
+@Repository
+public interface UASBatchPutOnPropertyHistoryDao extends JpaRepository<UASBatchPutOnPropertyHistory, Long>, JpaSpecificationExecutor<UASBatchPutOnPropertyHistory> {
+}

+ 145 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/UASBatchPutOnProperty.java

@@ -0,0 +1,145 @@
+package com.uas.platform.b2c.prod.commodity.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.sql.Date;
+
+/**
+ * 批量上架设置
+ *
+ * @author yuj 2018-01-19 11:48
+ */
+@Entity
+@Table(name = "trade$uasbatchputonproperty")
+public class UASBatchPutOnProperty implements Serializable{
+
+
+    private static final long serialVersionUID = -8754103388134435773L;
+
+    @Id
+    @Column(name = "ubpp_id")
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    private Long id;
+
+    /**
+     * 最长交期
+     */
+    @Column(name = "ubpp_maxdelivery")
+    private Short maxDelivery;
+
+    /**
+     * 最短交期
+     */
+    @Column(name = "ubpp_mindelivery")
+    private Short minDelivery;
+
+    /**
+     * 上下浮动率
+     */
+    @Column(name = "ubpp_fluctuaterate")
+    private Double fluctuateRate;
+
+    /**
+     * 所属企业
+     */
+    @Column(name = "ubpp_enuu", unique = true)
+    private Long enuu;
+
+    /**
+     * 上架的企业
+     */
+    @Column(name = "ubpp_enname")
+    private String enName;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "ubpp_updatetime")
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public UASBatchPutOnProperty setId(Long id) {
+        this.id = id;
+        return this;
+    }
+
+    public Short getMaxDelivery() {
+        return maxDelivery;
+    }
+
+    public UASBatchPutOnProperty setMaxDelivery(Short maxDelivery) {
+        this.maxDelivery = maxDelivery;
+        return this;
+    }
+
+    public Short getMinDelivery() {
+        return minDelivery;
+    }
+
+    public UASBatchPutOnProperty setMinDelivery(Short minDelivery) {
+        this.minDelivery = minDelivery;
+        return this;
+    }
+
+    public Double getFluctuateRate() {
+        return fluctuateRate;
+    }
+
+    public UASBatchPutOnProperty setFluctuateRate(Double fluctuateRate) {
+        this.fluctuateRate = fluctuateRate;
+        return this;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public UASBatchPutOnProperty setEnuu(Long enuu) {
+        this.enuu = enuu;
+        return this;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public UASBatchPutOnProperty setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+        return this;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public UASBatchPutOnProperty setEnName(String enName) {
+        this.enName = enName;
+        return this;
+    }
+
+    public UASBatchPutOnProperty() {
+    }
+
+    public UASBatchPutOnProperty(Short maxDelivery, Short minDelivery, Double fluctuateRate, Long enuu, Date updateTime) {
+        this.maxDelivery = maxDelivery;
+        this.minDelivery = minDelivery;
+        this.fluctuateRate = fluctuateRate;
+        this.enuu = enuu;
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "UASBatchPutOnProperty{" +
+                "id=" + id +
+                ", maxDelivery=" + maxDelivery +
+                ", minDelivery=" + minDelivery +
+                ", fluctuateRate=" + fluctuateRate +
+                ", enuu=" + enuu +
+                ", updateTime=" + updateTime +
+                '}';
+    }
+}

+ 154 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/UASBatchPutOnPropertyHistory.java

@@ -0,0 +1,154 @@
+package com.uas.platform.b2c.prod.commodity.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.sql.Date;
+
+/**
+ * uas 上架配置记录
+ *
+ * @author yuj 2018-01-19 11:53
+ */
+@Entity
+@Table(name = "trade$uasbatchputonpropertyhist")
+public class UASBatchPutOnPropertyHistory implements Serializable {
+
+    private static final long serialVersionUID = 931368136734539832L;
+
+    @Id
+    @Column(name = "ubpph_id")
+    @GeneratedValue(strategy = GenerationType.SEQUENCE)
+    private Long id;
+
+    /**
+     * 最长交期
+     */
+    @Column(name = "ubpph_maxdelivery")
+    private Short maxDelivery;
+
+    /**
+     * 最短交期
+     */
+    @Column(name = "ubpph_mindelivery")
+    private Short minDelivery;
+
+    /**
+     * 上下浮动率
+     */
+    @Column(name = "ubpph_fluctuaterate")
+    private Double fluctuateRate;
+
+    /**
+     * 所属企业
+     */
+    @Column(name = "ubpph_enuu")
+    private Long enuu;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "ubpph_updatetime")
+    private Date updateTime;
+
+    /**
+     * 上架的企业
+     */
+    @Column(name = "ubpp_enname")
+    private String enName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public UASBatchPutOnPropertyHistory setId(Long id) {
+        this.id = id;
+        return this;
+    }
+
+    public Short getMaxDelivery() {
+        return maxDelivery;
+    }
+
+    public UASBatchPutOnPropertyHistory setMaxDelivery(Short maxDelivery) {
+        this.maxDelivery = maxDelivery;
+        return this;
+    }
+
+    public Short getMinDelivery() {
+        return minDelivery;
+    }
+
+    public UASBatchPutOnPropertyHistory setMinDelivery(Short minDelivery) {
+        this.minDelivery = minDelivery;
+        return this;
+    }
+
+    public Double getFluctuateRate() {
+        return fluctuateRate;
+    }
+
+    public UASBatchPutOnPropertyHistory setFluctuateRate(Double fluctuateRate) {
+        this.fluctuateRate = fluctuateRate;
+        return this;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public UASBatchPutOnPropertyHistory setEnName(String enName) {
+        this.enName = enName;
+        return this;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public UASBatchPutOnPropertyHistory setEnuu(Long enuu) {
+        this.enuu = enuu;
+        return this;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public UASBatchPutOnPropertyHistory setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+        return this;
+    }
+
+    public UASBatchPutOnPropertyHistory() {
+    }
+
+    public UASBatchPutOnPropertyHistory(UASBatchPutOnProperty property) {
+        this.maxDelivery = property.getMaxDelivery();
+        this.minDelivery = property.getMinDelivery();
+        this.fluctuateRate = property.getFluctuateRate();
+        this.updateTime = property.getUpdateTime();
+        this.enName = property.getEnName();
+        this.enuu = property.getEnuu();
+    }
+
+
+    public UASBatchPutOnPropertyHistory(Short maxDelivery, Short minDelivery, Double fluctuateRate, Long enuu, Date updateTime) {
+        this.maxDelivery = maxDelivery;
+        this.minDelivery = minDelivery;
+        this.fluctuateRate = fluctuateRate;
+        this.enuu = enuu;
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "UASBatchPutOnPropertyHistory{" +
+                "id=" + id +
+                ", maxDelivery=" + maxDelivery +
+                ", minDelivery=" + minDelivery +
+                ", fluctuateRate=" + fluctuateRate +
+                ", enuu=" + enuu +
+                ", updateTime=" + updateTime +
+                '}';
+    }
+}

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

@@ -183,4 +183,12 @@ public interface ProductService {
      * @return
      */
     ProductDetail saveDetail(Long productId, Goods goods);
+
+
+    /**
+     * 用户批量上架
+     *
+     * @return
+     */
+    ResultMap batchPutOn();
 }

+ 17 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/UASBatchPutOnPropertyHistoryService.java

@@ -0,0 +1,17 @@
+package com.uas.platform.b2c.prod.commodity.service;
+
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnPropertyHistory;
+
+/**
+ * Created by yujia on 2018/1/19.
+ */
+public interface UASBatchPutOnPropertyHistoryService {
+
+    /**
+     * 保存历史信息
+     *
+     * @param propertyHistory
+     * @return
+     */
+    UASBatchPutOnPropertyHistory save(UASBatchPutOnPropertyHistory propertyHistory);
+}

+ 27 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/UASBatchPutOnPropertyService.java

@@ -0,0 +1,27 @@
+package com.uas.platform.b2c.prod.commodity.service;
+
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
+import com.uas.platform.b2c.trade.support.ResultMap;
+
+/**
+ * UAS 批量上架的配置
+ *
+ * Created by yujia on 2018/1/19.
+ */
+public interface UASBatchPutOnPropertyService {
+
+    /**
+     * 保存用户配置的信息
+     *
+     * @param property 传入的数据
+     * @return
+     */
+    ResultMap save(UASBatchPutOnProperty property);
+
+    /**
+     * 获取该企业的批量上架的信息
+     *
+     * @return
+     */
+    UASBatchPutOnProperty get();
+}

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

@@ -708,9 +708,9 @@ public class GoodsServiceImpl implements GoodsService {
 		for (String uuid : uuids) {
 			updateComponentTradeInfos(uuid);
 		}
-		for (Goods goods : list) {// 更新价格库用到了线程,所以要单独提出来
-			saveOrUpdatePriceInfos(goods, deviceInfo);
-		}
+//		for (Goods goods : list) {// 更新价格库用到了线程,所以要单独提出来
+//			saveOrUpdatePriceInfos(goods, deviceInfo);
+//		}
 		return list;
 	}
 
@@ -728,11 +728,12 @@ public class GoodsServiceImpl implements GoodsService {
             if (resultMap.getCode() != CodeType.OK.code()) {
                 continue;
             }
-            updateGoodTransactional(goods);
             GoodsHistory g = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase());
             goodsHistorys.add(g);
             list.add(goods);
-            uuids.add(goods.getUuid());
+            if (goods.getUuid() != null) {
+                uuids.add(goods.getUuid());
+            }
         }
         goodsDao.save(goodses);
         goodsHistoryDao.save(goodsHistorys);

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

@@ -10,11 +10,14 @@ import com.uas.platform.b2c.core.constant.ShortConstant;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
+import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
+import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
 import com.uas.platform.b2c.prod.commodity.dao.*;
 import com.uas.platform.b2c.prod.commodity.model.*;
 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.ProductService;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
@@ -23,6 +26,9 @@ import com.uas.platform.b2c.prod.product.component.dao.ComponentSubmitDao;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentSubmit;
 import com.uas.platform.b2c.prod.product.kind.model.Kind;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreStatus;
+import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
@@ -46,7 +52,6 @@ import com.uas.platform.core.model.Type;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
-import oracle.jdbc.oracore.OracleType;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -55,8 +60,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
-import org.springframework.jdbc.core.CallableStatementCallback;
-import org.springframework.jdbc.core.CallableStatementCreator;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.StatementCallback;
 import org.springframework.stereotype.Service;
@@ -68,10 +71,10 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.lang.reflect.Field;
-import java.sql.CallableStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -155,6 +158,12 @@ public class ProductServiceImpl implements ProductService {
     @Autowired
     private GoodsService goodsService;
 
+    @Autowired
+    private StoreInService storeInService;
+
+    @Autowired
+    private UASBatchPutOnPropertyService uasBatchPutOnPropertyService;
+
     private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
     @Override
@@ -1177,5 +1186,149 @@ public class ProductServiceImpl implements ProductService {
             return productDao.findOne(id);
         }
     }
+
+    /**
+     * 用户批量上架
+     *
+     * @return
+     */
+    @Override
+    public ResultMap batchPutOn() {
+        Long uu = SystemSession.getUser().getEnterprise().getUu();
+        ResultMap registerAddress = enterpriseService.getCurrencyByRegisterAddress();
+        String currency = null;
+        List<Goods> goodsList = new ArrayList<>();
+        Set<String> uuids = new HashSet<>();
+        if (registerAddress.getCode() != CodeType.OK.code()) {
+            currency = StringConstant.RMB;
+        } else {
+            currency = registerAddress.getData().toString();
+        }
+        StoreIn storeIn = storeInService.findByEnUU(uu);
+        String storeName = null, storeid = null;
+        if (storeIn == null || storeIn.getStatus() != StoreStatus.OPENED) {
+            storeName = sysConf.getEnName();
+            storeid = sysConf.getStoreid();
+        } else {
+            storeName = storeIn.getStoreName();
+            storeid = storeIn.getUuid();
+        }
+        UASBatchPutOnProperty property = uasBatchPutOnPropertyService.get();
+        // 暂时先不考虑数据过多的情况
+//        Integer count = productDao.findCountByEnUUAndSourceAppNotPutOn(uu, StringConstant.ERP);
+//        if (count > 1000) {
+//            pa
+//        } else {
+//            List<Product> sourceAppNotPutOn = productDao.findByEnUUAndSourceAppNotPutOn(uu, StringConstant.ERP);
+//            List<Goods> goodses = productDetailPutOn(sourceAppNotPutOn, storeName, storeid, currency, property);
+//            goodsList.addAll(goodses);
+//        }
+
+        List<Product> sourceAppNotPutOn = productDao.findByEnUUAndSourceAppNotPutOn(uu, StringConstant.ERP);
+        if (sourceAppNotPutOn.size() == 0) {
+            return new ResultMap(CodeType.OK.code(), "没有可上架的信息", null);
+        }
+        List<Goods> goodses = productDetailPutOn(sourceAppNotPutOn, storeName, storeid, currency, property);
+        goodsList.addAll(goodses);
+        List<Goods> result = new ArrayList<Goods>();
+        goodsService.publishByBatch(goodsList, uuids, result);
+        for (String uuid : uuids) {
+            goodsService.updateComponentTradeInfos(uuid);
+        }
+        String message = "";
+        if (result.size() != 0) {
+            message = "成功上架" + result.size() + "个";
+        }
+        if ((sourceAppNotPutOn.size() - result.size()) != 0) {
+            if (!StringUtils.isEmpty(message)) {
+                message = " ,";
+            }
+            message = "失败" + (sourceAppNotPutOn.size()-  result.size()) + "个";
+        }
+        return new ResultMap(CodeType.OK.code(), message);
+    }
+
+
+    private List<Goods> productDetailPutOn(List<Product> products, String storeName, String storeid, String currency, UASBatchPutOnProperty property) {
+        List<Goods> goodses = new ArrayList<>();
+        for (Product product : products) {
+            ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
+            ResultMap resultMap = productsConvertGoods(product, productDetail, storeName, storeid, currency, property);
+            if (resultMap.getCode() == CodeType.OK.code()) {
+                goodses.add((Goods) resultMap.getData());
+            }
+        }
+        return goodses;
+    }
+
+    /**
+     * 物料转 goods 信息
+     *
+     * @param product
+     * @param detail
+     * @return
+     */
+    private ResultMap productsConvertGoods(Product product, ProductDetail detail, String storeName, String storeid, String currency, UASBatchPutOnProperty property) {
+        Goods g = new Goods();
+        g.setProductid(product.getId());
+        g.setUnit(product.getUnit());
+        g.setImg(product.getCmpImg());
+        g.setUuid(product.getCmpUuId());
+        g.setCode(product.getPcmpcode());
+        g.setBrandNameCn(product.getPbrand());
+        g.setBrandid(product.getPbrandid());
+        g.setBranduuid(product.getPbranduuid());
+        g.setBrandNameEn(product.getPbranden());
+        g.setKindNameCn(product.getKind());
+        g.setKindUuid(product.getKindid());
+        g.setCurrencyName(currency);
+        g.setStoreName(storeName);
+        g.setStoreid(storeid);
+        g.setMaxDelivery(property.getMaxDelivery());
+        g.setMinDelivery(property.getMinDelivery());
+        g.setProdNum(product.getProdNum());
+        g.setTag(StringConstant.INIT_TAG);
+        g.setPackaging(detail.getPackaging() == null ? product.getPackaging(): detail.getPackaging());
+        if (g.getPackaging() == null) {
+            g.setPackaging(StringConstant.DEFAULTPACKAGING);
+        }
+        g.setProduceDate(detail.getProduceDate() == null ? product.getProduceDate() : detail.getProduceDate());
+        if (g.getProduceDate() == null) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+            String format = formatter.format(new Date());
+            g.setProduceDate(format);
+        }
+        g.setBreakUp(Boolean.FALSE);
+        g.setReserve(detail.getReserve());
+        g.setMinPackQty(detail.getMinPackQty() == null ? product.getMinPackQty() : detail.getMinPackQty());
+        g.setMinBuyQty(detail.getMinBuyQty());
+        if (g.getMinPackQty() == null && g.getMinBuyQty() == null) {
+            return new ResultMap(CodeType.NOT_COMPLETE_INFO, "上架必填信息缺失");
+        } else {
+            if (g.getMinBuyQty() == null || g.getMinPackQty() == null) {
+                Double d = g.getMinBuyQty() == null ? g.getMinPackQty() : g.getMinBuyQty();
+                g.setMinBuyQty(d);
+                g.setMinPackQty(d);
+            }
+            double div = NumberUtil.div(g.getMinBuyQty(), g.getMinPackQty());
+            if (NumberUtil.compare(div, DoubleConstant.zero) != 0) {
+                g.setMinBuyQty(NumberUtil.sub(g.getMinBuyQty(), div));
+            }
+        }
+        double price = NumberUtil.mul(detail.getPrice(), property.getFluctuateRate());
+        price = NumberUtil.fractionNumCeil(price, IntegerConstant.PRICE_FRACTION);
+        List<GoodsQtyPrice> list = new ArrayList<>();
+        GoodsQtyPrice price1 = new GoodsQtyPrice();
+        price1.setStart(g.getMinBuyQty());
+        price1.setEnd(DoubleConstant.maxReserve);
+        if (currency.equals(StringConstant.RMB)) {
+            price1.setRMBPrice(price);
+        } else {
+            price1.setUSDPrice(price);
+        }
+        list.add(price1);
+        g.setPrices(list);
+        return new ResultMap(CodeType.OK.code(), "成功", g);
+    }
 }
 

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

@@ -0,0 +1,34 @@
+package com.uas.platform.b2c.prod.commodity.service.impl;
+
+import com.uas.platform.b2c.prod.commodity.dao.UASBatchPutOnPropertyHistoryDao;
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnPropertyHistory;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * UAS批量上架的配置属性
+ *
+ * @author yuj 2018-01-19 14:04
+ */
+@Service
+public class UASBatchPutOnPropertyHistoryServiceImpl implements UASBatchPutOnPropertyHistoryService {
+
+    private final UASBatchPutOnPropertyHistoryDao uasBatchPutOnPropertyHistoryDao;
+
+    @Autowired
+    public UASBatchPutOnPropertyHistoryServiceImpl(UASBatchPutOnPropertyHistoryDao uasBatchPutOnPropertyHistoryDao) {
+        this.uasBatchPutOnPropertyHistoryDao = uasBatchPutOnPropertyHistoryDao;
+    }
+
+    /**
+     * 保存历史信息
+     *
+     * @param propertyHistory
+     * @return
+     */
+    @Override
+    public UASBatchPutOnPropertyHistory save(UASBatchPutOnPropertyHistory propertyHistory) {
+        return uasBatchPutOnPropertyHistoryDao.save(propertyHistory);
+    }
+}

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

@@ -0,0 +1,127 @@
+package com.uas.platform.b2c.prod.commodity.service.impl;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.NumberUtil;
+import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
+import com.uas.platform.b2c.prod.commodity.dao.UASBatchPutOnPropertyDao;
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnPropertyHistory;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyHistoryService;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyService;
+import com.uas.platform.b2c.trade.support.CodeType;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Date;
+
+/**
+ * UAS 批量上架的配置
+ *
+ * @author yuj 2018-01-19 14:07
+ */
+@Service
+public class UASBatchPutOnPropertyServiceImpl implements UASBatchPutOnPropertyService {
+
+    private final UASBatchPutOnPropertyDao uasBatchPutOnPropertyDao;
+
+    private final UASBatchPutOnPropertyHistoryService uasBatchPutOnPropertyHistoryService;
+
+    @Autowired
+    public UASBatchPutOnPropertyServiceImpl(UASBatchPutOnPropertyDao uasBatchPutOnPropertyDao, UASBatchPutOnPropertyHistoryService uasBatchPutOnPropertyHistoryService) {
+        this.uasBatchPutOnPropertyDao = uasBatchPutOnPropertyDao;
+        this.uasBatchPutOnPropertyHistoryService = uasBatchPutOnPropertyHistoryService;
+    }
+
+    /**
+     * 保存用户配置的信息
+     *
+     * @param property 传入的数据
+     * @return
+     */
+    @Override
+    public ResultMap save(UASBatchPutOnProperty property) {
+        if (property == null) {
+            return new ResultMap(CodeType.NO_INFO.code(), "传入的数据为空", null);
+        }
+        ResultMap resultMap = validateProperty(property);
+        if (resultMap.getCode() != CodeType.OK.code()) {
+            return resultMap;
+        }
+        Enterprise enterprise = SystemSession.getUser().getEnterprise();
+        property.setEnName(enterprise.getEnName());
+        property.setEnuu(enterprise.getUu());
+        property.setUpdateTime(new Date(System.currentTimeMillis()));
+        UASBatchPutOnProperty putOnProperty = uasBatchPutOnPropertyDao.save(property);
+        UASBatchPutOnPropertyHistory putOnPropertyHistory = new UASBatchPutOnPropertyHistory(putOnProperty);
+        uasBatchPutOnPropertyHistoryService.save(putOnPropertyHistory);
+        return new ResultMap(CodeType.OK.code(), "成功", putOnProperty);
+    }
+
+    /**
+     * 验证传入的数据的合理
+     *
+     * @param property 传入的数据
+     * @return
+     */
+    private ResultMap validateProperty(UASBatchPutOnProperty property) {
+        Short maxDelivery = property.getMaxDelivery();
+        Short minDelivery = property.getMinDelivery();
+        Double fluctuateRate = property.getFluctuateRate();
+        if (maxDelivery == null && minDelivery == null) {
+            return new ResultMap(CodeType.NO_INFO.code(), "设置的交期为空", null);
+        } else {
+            if (maxDelivery == null || minDelivery == null) {
+                if (maxDelivery == null) {
+                    maxDelivery = minDelivery;
+                } else {
+                    minDelivery = maxDelivery;
+                }
+            }
+            // 如果 最小值大于最大值
+            int i = maxDelivery.compareTo(minDelivery);
+            if (i < 0) {
+                Short  k = maxDelivery;
+                maxDelivery = minDelivery;
+                minDelivery = k;
+            }
+            int i1 = minDelivery.compareTo(com.uas.platform.b2c.core.constant.ShortConstant.YES_SHORT);
+            if (i1 < 0) {
+                return new ResultMap(CodeType.ERROR_STATE.code(), "交期必须大于0", null);
+            }
+            property.setMinDelivery(minDelivery);
+            property.setMaxDelivery(maxDelivery);
+        }
+
+        // 浮动率
+        if (fluctuateRate == null) {
+            fluctuateRate = 1D;
+        } else {
+            int i = NumberUtil.compare(fluctuateRate, DoubleConstant.minFluctuateRate);
+            if (i < 0) {
+                fluctuateRate = DoubleConstant.minFluctuateRate;
+            }
+
+            // 是否大于最大的浮动率值
+            int j = NumberUtil.compare(fluctuateRate, DoubleConstant.maxFluctuateRate);
+            if (j > 0) {
+                fluctuateRate = DoubleConstant.maxFluctuateRate;
+            }
+        }
+        property.setFluctuateRate(fluctuateRate);
+        return new ResultMap(CodeType.OK.code(), "成功", null);
+    }
+
+    /**
+     * 获取该企业的批量上架的信息
+     *
+     * @return
+     */
+    @Override
+    public UASBatchPutOnProperty get() {
+        Enterprise enterprise = SystemSession.getUser().getEnterprise();
+        UASBatchPutOnProperty onPropertyByEnuu = uasBatchPutOnPropertyDao.findUASBatchPutOnPropertyByEnuu(enterprise.getUu());
+        return onPropertyByEnuu;
+    }
+}