Browse Source

B2B新增轮询同步个人物料信息,将业务操作个人物料信息提取出来,因为同步时间比较慢

hejq 7 years ago
parent
commit
43d255ab21

+ 53 - 0
src/main/java/com/uas/platform/b2b/ps/SyncTask.java

@@ -0,0 +1,53 @@
+package com.uas.platform.b2b.ps;
+
+import com.uas.platform.b2b.ps.model.PersonalProduct;
+import com.uas.platform.b2b.ps.service.PersonalProductService;
+import com.uas.platform.b2b.service.ProductUsersService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 数据同步任务
+ *
+ * Created by hejq on 2018-06-05.
+ */
+@Component
+public class SyncTask {
+
+    @Autowired
+    private PersonalProductService personalProductService;
+
+    @Autowired
+    private ProductUsersService productUsersService;
+
+    /**
+     * 单据操作时将物料信息同步到个人物料
+     * <note>
+     *     因为这一块耗费时间比较长,如果放在业务操作中进行,会很大程度上影响客户操作体验
+     * </note>
+     */
+    @Scheduled(cron = "0 0/2 * * * ?")
+    public void SyncPersonalProduct() {
+        PageInfo pageInfo = new PageInfo(1, 10);
+        pageInfo.setSort(new Sort(Sort.Direction.ASC, "id"));
+        pageInfo.filter("status", Status.NOT_UPLOAD.value());
+        List<PersonalProduct> products = personalProductService.findByPageInfo(pageInfo);
+        if (!CollectionUtils.isEmpty(products)) {
+            for (PersonalProduct product : products) {
+                try {
+                    productUsersService.coverToMyProduct(product.getPrId(), product.getEnUU(), product.getUserUU(), product.getMethod());
+                    personalProductService.updateStatusById(Status.DOWNLOADED.value(), product.getId());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

+ 41 - 0
src/main/java/com/uas/platform/b2b/ps/dao/PersonalProductDao.java

@@ -0,0 +1,41 @@
+package com.uas.platform.b2b.ps.dao;
+
+import com.uas.platform.b2b.ps.model.PersonalProduct;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+
+/**
+ * 个人物料处理数据库操作
+ *
+ * Created by hejq on 2018-06-05.
+ */
+@Repository
+public interface PersonalProductDao extends JpaSpecificationExecutor<PersonalProduct>, JpaRepository<PersonalProduct, Long> {
+
+    /**
+     * 通过id更新状态
+     *
+     * @param status
+     * @param id
+     */
+    @Modifying
+    @Transactional
+    @Query("update PersonalProduct p set p.status = :status where p.id = :id")
+    void updateStatusById(@Param("status") Integer status, @Param("id") Long id);
+
+    /**
+     * 查询个人物料是否已存在
+     *
+     * @param userUU 用户UU
+     * @param enUU 企业UU
+     * @param prId 物料Id
+     * @return
+     */
+    Integer countByUserUUAndEnUUAndPrId(Long userUU, Long enUU, Long prId);
+}

+ 147 - 0
src/main/java/com/uas/platform/b2b/ps/model/PersonalProduct.java

@@ -0,0 +1,147 @@
+package com.uas.platform.b2b.ps.model;
+
+import com.uas.platform.core.model.Status;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 待转的个人物料信息
+ *
+ * Created by hejq on 2018-06-05.
+ */
+@Table(name = "personl$product")
+@Entity
+public class PersonalProduct implements Serializable {
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "pr_id")
+    private Long id;
+
+    /**
+     * 企业UU
+     */
+    @Column(name = "pr_enuu")
+    private Long enUU;
+
+    /**
+     * 用户UU
+     */
+    @Column(name = "pr_useruu")
+    private Long userUU;
+
+    /**
+     * 物料ID
+     */
+    @Column(name = "pr_prid")
+    private Long prId;
+
+    /**
+     * 状态
+     *  <node>
+     *      NOT_UPLOAD(202, "待上传")
+     *      DOWNLOADED(203, "已下载")
+     *  </node>
+     */
+    @Column(name = "pr_status")
+    private Integer status;
+
+    /**
+     * 方法
+     */
+    @Column(name = "pr_method")
+    private String method;
+
+    /**
+     * 时间
+     */
+    @Column(name = "pr_date")
+    private Date date;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getPrId() {
+        return prId;
+    }
+
+    public void setPrId(Long prId) {
+        this.prId = prId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getMethod() {
+        return method;
+    }
+
+    public void setMethod(String method) {
+        this.method = method;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public PersonalProduct() {
+
+    }
+
+    /**
+     * 根据物料Id,企业UU,个人UU和方法记录待处理个人物料信息
+     *
+     * @param prId 物料id
+     * @param enUU 企业UU
+     * @param userUU 用户UU
+     * @param method 方法
+     */
+    public PersonalProduct(Long prId, Long enUU, Long userUU, String method) {
+        this.date = new Date(System.currentTimeMillis());
+        this.enUU = enUU;
+        this.userUU = userUU;
+        this.prId = prId;
+        this.status = Status.NOT_UPLOAD.value();
+        this.method = method;
+    }
+}

+ 38 - 0
src/main/java/com/uas/platform/b2b/ps/service/PersonalProductService.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2b.ps.service;
+
+import com.uas.platform.b2b.ps.model.PersonalProduct;
+import com.uas.platform.core.model.PageInfo;
+
+import java.util.List;
+
+/**
+ * 待处理个人物料接口
+ *
+ * Created by hejq on 2018-06-05.
+ */
+public interface PersonalProductService {
+
+    /**
+     * 通过分页信息查询待处理个人物料
+     *
+     * @param pageInfo 分页信息
+     * @return
+     */
+    List<PersonalProduct> findByPageInfo(PageInfo pageInfo);
+
+    /**
+     * 通过id更新处理状态
+     *
+     * @param status 状态
+     * @param id id
+     */
+    void updateStatusById(Integer status, Long id);
+
+    /**
+     * 通过物料id和方法进行待处理个人物料信息
+     *
+     * @param prId 物料id
+     * @param method 方法
+     */
+    void covertPersonalProduct(Long prId, String method);
+}

+ 71 - 0
src/main/java/com/uas/platform/b2b/ps/service/impl/PersonalProductServiceImpl.java

@@ -0,0 +1,71 @@
+package com.uas.platform.b2b.ps.service.impl;
+
+import com.uas.platform.b2b.ps.dao.PersonalProductDao;
+import com.uas.platform.b2b.ps.model.PersonalProduct;
+import com.uas.platform.b2b.ps.service.PersonalProductService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.List;
+
+/**
+ * 待处理个人物料
+ *
+ * Created by hejq on 2018-06-05.
+ */
+@Service
+public class PersonalProductServiceImpl implements PersonalProductService {
+
+    @Autowired
+    private PersonalProductDao personlProductDao;
+
+    /**
+     * 通过分页信息查询待处理个人物料
+     *
+     * @param pageInfo 分页信息
+     * @return
+     */
+    @Override
+    public List<PersonalProduct> findByPageInfo(final PageInfo pageInfo) {
+        return personlProductDao.findAll(new Specification<PersonalProduct>() {
+            public Predicate toPredicate(Root<PersonalProduct> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        });
+    }
+
+    /**
+     * 通过id更新处理状态
+     *
+     * @param status 状态
+     * @param id     id
+     */
+    @Override
+    public void updateStatusById(Integer status, Long id) {
+        personlProductDao.updateStatusById(status, id);
+    }
+
+    /**
+     * 通过物料id和方法进行待处理个人物料信息
+     *
+     * @param prId   物料id
+     * @param method 方法
+     */
+    @Override
+    public void covertPersonalProduct(Long prId, String method) {
+        final Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        final Long userUU = SystemSession.getUser().getUserUU();
+        Integer count = personlProductDao.countByUserUUAndEnUUAndPrId(userUU, enUU, prId);
+        if (count == 0) {
+            personlProductDao.save(new PersonalProduct(prId, enUU, userUU, method));
+        }
+    }
+}