Browse Source

评价:买家定时任务

wangdy 8 years ago
parent
commit
632682d012

+ 12 - 0
src/main/java/com/uas/platform/b2c/trade/rate/service/RateService.java

@@ -31,6 +31,18 @@ public interface RateService {
      */
     void savebuyerRate(String orderId , RateVendor rateVendor , List<RateGoods> rateGoodsList);
 
+    /**
+     * (到期自动评价)买家对商品的初评
+     * @param ids
+     */
+    void autosavebuyerRate(String ids);
+
+    /**
+     * (到期自动追评价)买家对商品的初评
+     * @param ids
+     */
+    void autosaveAfterbuyerRate(String ids);
+
     /**
      * 买家对商品的追评
      * @param rateGoodsList

+ 60 - 3
src/main/java/com/uas/platform/b2c/trade/rate/service/impl/RateServiceImpl.java

@@ -1,8 +1,10 @@
 package com.uas.platform.b2c.trade.rate.service.impl;
 
+import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import com.uas.platform.b2c.trade.rate.dao.RateBuyerDao;
 import com.uas.platform.b2c.trade.rate.dao.RateGoodsDao;
 import com.uas.platform.b2c.trade.rate.dao.RateTemplateDao;
@@ -12,14 +14,13 @@ import com.uas.platform.b2c.trade.rate.model.RateGoods;
 import com.uas.platform.b2c.trade.rate.model.RateTemplate;
 import com.uas.platform.b2c.trade.rate.model.RateVendor;
 import com.uas.platform.b2c.trade.rate.service.RateService;
-import com.uas.platform.b2c.trade.support.CodeType;
-import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.Status;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -44,6 +45,8 @@ public class RateServiceImpl implements RateService{
     @Autowired
     OrderDao orderDao;
 
+    final private short isAnony = 1;
+
     @Override
     public RateVendor saveRateVendor(String orderId , RateVendor rateVendor) {
         rateVendor.setUserUU(SystemSession.getUser().getUserUU());
@@ -58,7 +61,7 @@ public class RateServiceImpl implements RateService{
     public void saveRateGoods(String orderId , List<RateGoods> rateGoodsList) {
         for (RateGoods rateGoods : rateGoodsList){
             //默认匿名评价
-            rateGoods.setIsAnony(rateGoods.getIsAnony() == null ? 1 : rateGoods.getIsAnony());
+            rateGoods.setIsAnony(rateGoods.getIsAnony() == null ? isAnony : rateGoods.getIsAnony());
             rateGoods.setUserUU(SystemSession.getUser().getUserUU());
             rateGoods.setUserEnuu(SystemSession.getUser().getEnterprise().getUu());
             rateGoods.setOrderId(orderId);
@@ -84,6 +87,60 @@ public class RateServiceImpl implements RateService{
         saveRateGoods(orderId,rateGoodsList);
     }
 
+    @Override
+    public void autosavebuyerRate(String ids) {
+        String[] idArray = ids.split(SplitChar.HYPHEN);
+        List<RateGoods> rateGoodsList = new ArrayList<>();
+        for (String id : idArray) {
+            Order order = orderDao.findByOrderid(id);
+            for (OrderDetail orderDetail : order.getOrderDetails()){
+                RateGoods rateGoods = new RateGoods();
+                rateGoods.setBuyerRateTime(new Date(System.currentTimeMillis()));
+                rateGoods.setBuyerRate("此用户未及时做出评价,系统默认好评!");
+                rateGoods.setIsAnony(isAnony);
+                rateGoods.setEnuu(order.getSellerenuu());
+                rateGoods.setGoodsId(orderDetail.getId());
+                rateGoods.setLevel(isAnony);
+                rateGoods.setOrderId(order.getOrderid());
+                rateGoods.setStoreId(order.getStoreid());
+                rateGoods.setUserEnuu(order.getBuyerenuu());
+                rateGoods.setUserUU(order.getBuyeruu());
+            }
+            rateGoodsDao.save(rateGoodsList);
+            RateVendor rateVendor = new RateVendor();
+            rateVendor.setUserUU(order.getBuyeruu());
+            rateVendor.setUserEnuu(order.getBuyerenuu());
+            rateVendor.setOrderId(order.getOrderid());
+            rateVendor.setTime(new Date(System.currentTimeMillis()));
+            rateVendor.setStoreId(order.getStoreid());
+            rateVendor.setEnuu(order.getSellerenuu());
+            rateVendor.setDescribeLevel((short)5);
+            rateVendor.setLogisticsLevel((short)5);
+            rateVendor.setVendorLevel((short)5);
+            rateVendorDao.save(rateVendor);
+            //订单状态变更
+            if (order.getStatus().intValue() != Status.COMPLETED.value()) {
+                throw new IllegalOperatorException("当前订单不在已完成状态,不能收货!");
+            }
+            order.setStatusToBeAfterReviewed(SystemSession.getUser().getUserUU());
+            orderDao.save(order);
+        }
+    }
+
+    @Override
+    public void autosaveAfterbuyerRate(String ids) {
+        String[] idArray = ids.split(SplitChar.HYPHEN);
+        for (String id : idArray) {
+            //订单状态变更
+            Order order = orderDao.findByOrderid(id);
+            if (order.getStatus().intValue() != Status.TO_BE_AFTERREVIEWED.value()) {
+                throw new IllegalOperatorException("当前订单未完成初评,不能追评!");
+            }
+            order.setStatusReviewed(SystemSession.getUser().getUserUU());
+            orderDao.save(order);
+        }
+    }
+
     @Override
     public void saveAfterRateGoods(List<RateGoods> rateGoodsList) {
         rateGoodsDao.save(rateGoodsList);

+ 196 - 1
src/main/java/com/uas/platform/b2c/trade/rate/task/RateTask.java

@@ -4,14 +4,209 @@ package com.uas.platform.b2c.trade.rate.task;
  * Created by uas on 2017-08-30.
  */
 
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.UserDao;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.StatusHistory;
+import com.uas.platform.b2c.trade.order.service.OrderService;
+import com.uas.platform.b2c.trade.presale.dao.TradeBasicPropertiesDao;
+import com.uas.platform.b2c.trade.rate.service.RateService;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.model.Type;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 评价的一些自动任务
  *
  * @author wangdy
- * @version 2017-08-81 8:59:06 创建文件
+ * @version 2017-08-31 8:59:06 创建文件
  */
 @Component("RateTask")
 public class RateTask {
+
+    private final OrderDao orderDao;
+
+    private final OrderService orderService;
+
+    private final TradeBasicPropertiesDao tradeBasicPropertiesDao;
+
+    private final UserDao userDao;
+
+    private final SysConf sysConf;
+
+    private final EnterpriseDao enterpriseDao;
+
+    private final RateService rateService;
+
+
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    public RateTask(OrderDao orderDao, OrderService orderService, TradeBasicPropertiesDao tradeBasicPropertiesDao, UserDao userDao, SysConf sysConf, EnterpriseDao enterpriseDao, RateService rateService) {
+        this.orderDao = orderDao;
+        this.orderService = orderService;
+        this.tradeBasicPropertiesDao = tradeBasicPropertiesDao;
+        this.userDao = userDao;
+        this.sysConf = sysConf;
+        this.enterpriseDao = enterpriseDao;
+        this.rateService = rateService;
+    }
+
+    /**
+     * 对超过初评时间的订单,自动初评
+     */
+    @Transactional
+    public void autoRate() {
+        try {
+            User user = null;
+            List<User> userUUs = userDao.findUserByUserUU(sysConf.getAdminUU());
+            if(CollectionUtils.isEmpty(userUUs)) {
+                throw new IllegalOperatorException("根据配置文件的adminUU 找不到对应的个人信息");
+            }
+            user = userUUs.get(0);
+            Enterprise enterprise = enterpriseDao.findByUu(sysConf.getEnUU());
+            user.setEnterprise(enterprise);
+            SystemSession.setUser(user);
+            String infoByType = tradeBasicPropertiesDao.findInfoByType(Type.B2C_AUTO_RECEVIED_TIME.value());
+            if(StringUtils.isEmpty(infoByType)) {
+                throw new IllegalOperatorException("买家自动初评时间为空,不能继续操作");
+            }
+            Integer automaticReceipt = null;
+            try {
+                automaticReceipt = Integer.valueOf(infoByType);
+            } catch (NumberFormatException e) {
+                e.printStackTrace();
+            }
+            //先写在代码上,20个工作日自动好评
+            automaticReceipt = 20;
+
+            List<Order> orderList = orderService.findByStatus(Status.COMPLETED.value());
+            String ids = "-";
+            for (Order order : orderList) {
+                List<StatusHistory> statusHistories = FastjsonUtils.fromJsonArray(order.getStatushistory(), StatusHistory.class);
+                for (int i = statusHistories.size() - 1; i > 0 ; i--) {
+                    StatusHistory statusHistory = statusHistories.get(i);
+                    if(statusHistory.getStatus().intValue() == Status.COMPLETED.value()) {
+                        Calendar calendar = Calendar.getInstance();
+                        Date date = new Date();
+                        calendar.setTime(date);
+                        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - automaticReceipt);
+                        Date time = calendar.getTime();
+                        time.setHours(0);
+                        time.setMinutes(0);
+                        time.setSeconds(0);
+                        Date shipTime = statusHistory.getTime();
+                        shipTime.setHours(0);
+                        shipTime.setMinutes(0);
+                        shipTime.setSeconds(0);
+                        if(compareTimeIsGigger24Hours(time, shipTime)) {
+                            ids = ids + order.getId() + "-";
+                        }
+                    }
+                }
+
+            }
+            if(ids.length() > 1) {
+                ids = ids.substring(1, ids.length() - 1);
+                rateService.autosavebuyerRate(ids);
+            }
+            logger.log("自动初评", "买家自动初评订单:" + ids);
+        }catch (Exception e) {
+        } finally {
+        }
+    }
+    /**
+     * 对超过追评时间的订单,自动初评
+     */
+    @Transactional
+    public void autoAfterRate() {
+        try {
+            User user = null;
+            List<User> userUUs = userDao.findUserByUserUU(sysConf.getAdminUU());
+            if(CollectionUtils.isEmpty(userUUs)) {
+                throw new IllegalOperatorException("根据配置文件的adminUU 找不到对应的个人信息");
+            }
+            user = userUUs.get(0);
+            Enterprise enterprise = enterpriseDao.findByUu(sysConf.getEnUU());
+            user.setEnterprise(enterprise);
+            SystemSession.setUser(user);
+            String infoByType = tradeBasicPropertiesDao.findInfoByType(Type.B2C_AUTO_RECEVIED_TIME.value());
+            if(StringUtils.isEmpty(infoByType)) {
+                throw new IllegalOperatorException("买家自动追评时间为空,不能继续操作");
+            }
+            Integer automaticReceipt = null;
+            try {
+                automaticReceipt = Integer.valueOf(infoByType);
+            } catch (NumberFormatException e) {
+                e.printStackTrace();
+            }
+//          //先写在代码上,180个工作日自动追评价
+            automaticReceipt = 180;
+            List<Order> orderList = orderService.findByStatus(Status.COMPLETED.value());
+            String ids = "-";
+            for (Order order : orderList) {
+                List<StatusHistory> statusHistories = FastjsonUtils.fromJsonArray(order.getStatushistory(), StatusHistory.class);
+                for (int i = statusHistories.size() - 1; i > 0 ; i--) {
+                    StatusHistory statusHistory = statusHistories.get(i);
+                    if(statusHistory.getStatus().intValue() == Status.COMPLETED.value()) {
+                        Calendar calendar = Calendar.getInstance();
+                        Date date = new Date();
+                        calendar.setTime(date);
+                        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - automaticReceipt);
+                        Date time = calendar.getTime();
+                        time.setHours(0);
+                        time.setMinutes(0);
+                        time.setSeconds(0);
+                        Date shipTime = statusHistory.getTime();
+                        shipTime.setHours(0);
+                        shipTime.setMinutes(0);
+                        shipTime.setSeconds(0);
+                        if(compareTimeIsGigger24Hours(time, shipTime)) {
+                            ids = ids + order.getId() + "-";
+                        }
+                    }
+                }
+            }
+            if(ids.length() > 1) {
+                ids = ids.substring(1, ids.length() - 1);
+                rateService.autosaveAfterbuyerRate(ids);
+            }
+            logger.log("自动追评", "买家自动追加评价:" + ids);
+        }catch (Exception e) {
+        } finally {
+        }
+    }
+
+
+    /**
+     * 比较日期的大小(只比较年、月、日),,相隔的时间是否超过24小时
+     * @param date1
+     * @param date2
+     * @return  date1 - date2 > 0 return true else false
+     */
+    private boolean compareTimeIsGigger24Hours (Date date1, Date date2) {
+        long mills = date1.getTime() - date2.getTime();
+        if(mills > 0) {
+            return true;
+        }else {
+            return false;
+        }
+    }
 }

+ 8 - 3
src/main/resources/spring/task.xml

@@ -6,12 +6,17 @@
 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
 		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
-
+    <!--超时自动确认收货-->
     <task:scheduled-tasks>
         <task:scheduled ref="OrderTask" method="autoConfirmOrderRevice" cron="0 0 1 * * ?"/>
     </task:scheduled-tasks>
-    <!--<task:scheduled-tasks>
+    <!--超时自动初评-->
+    <task:scheduled-tasks>
         <task:scheduled ref="RateTask" method="autoRate" cron="0 0 1 * * ?"/>
-    </task:scheduled-tasks>-->
+    </task:scheduled-tasks>
+    <!--超时自动追评-->
+    <task:scheduled-tasks>
+        <task:scheduled ref="RateTask" method="autoAfterRate" cron="0 0 1 * * ?"/>
+    </task:scheduled-tasks>
     <context:annotation-config />
 </beans>