Administrator
2018-11-13 f770b1a9a18218f2c09974528001d2bfe097923a
订单丢失相关处理
7个文件已修改
203 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/ClientJspController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/UserInfoController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/LostOrder.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/LostOrderServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/PidOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/LostOrderService.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/ClientJspController.java
@@ -226,17 +226,22 @@
    }
    @RequestMapping("findThreeFriendsCount")
    public void findThreeFriendsCount(long id, PrintWriter out) {
    public void findThreeFriendsCount(long id, String callback, PrintWriter out) {
        int count1 = userInfoService.findFriendsCount(id, 1);
        int count2 = userInfoService.findFriendsCount(id, 2);
        JSONObject data = new JSONObject();
        data.put("count1", count1);
        data.put("count2", count2);
        if (!StringUtil.isNullOrEmpty(callback)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        } else {
        out.print(JsonUtil.loadTrueResult(data));
        }
    }
    @RequestMapping("findThreeFriends")
    public void findThreeFriends(long id, int type, int page, PrintWriter out) {
    public void findThreeFriends(long id, int type, int page, String callback, PrintWriter out) {
        int pageSize = 30;
        List<InviteUser> list = userInfoService.getFriendsList(id, type, page, pageSize);
        JSONArray array = new JSONArray();
@@ -251,8 +256,12 @@
        JSONObject data = new JSONObject();
        data.put("list", array);
        data.put("pages", count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
        if (!StringUtil.isNullOrEmpty(callback)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        } else {
        out.print(JsonUtil.loadTrueResult(data));
    }
    }
    @RequestMapping("findThreeSales")
    public void findThreeSales(long id, PrintWriter out) {
fanli/src/main/java/com/yeshi/fanli/controller/client/UserInfoController.java
@@ -456,9 +456,7 @@
            data.put("inviteList", String.format("http://%s/%s/client/share/friends_new_online.html",
                    Constant.systemCommonConfig.getProjectHost(), Constant.systemCommonConfig.getProjectName()));
        else
            data.put("inviteList", String.format("http://%s/%s/client/share/friends_new.html",
                    Constant.systemCommonConfig.getProjectHost(), Constant.systemCommonConfig.getProjectName()));
            data.put("inviteList", configService.get("team_list"));
        out.print(JsonUtil.loadTrueResult(data));
        final UserInfo uuser = user;
        ThreadUtil.run(new Runnable() {
@@ -1432,6 +1430,7 @@
    
    /**
     * h5收藏
     *
     * @param callback
     * @param acceptData
     * @param uid
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/LostOrder.java
@@ -8,45 +8,77 @@
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.yeshi.utils.mybatis.Column;
import com.google.gson.annotations.Expose;
/**
 * 丢失订单
 *
 * @author cxx
 *
 * @date 2018年1月29日
 */
@Entity
@Table(name="yeshi_ec_lost_order")
@org.yeshi.utils.mybatis.Table("yeshi_ec_lost_order")
public class LostOrder {
    public final static int RESULT_CODE_VERFING = 1;// 审核中
    public final static int RESULT_CODE_SUCCESS = 2;// 成功
    public final static int RESULT_CODE_FAIL = 3;// 失败(通过后3日未处理成功则判断为失败)
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Expose
    @Column(name="id")
    private Long id;
    @Expose
    @Column(name="orderId")
    private String orderId;//订单号
    @Column(name="type")
    @Expose
    private Integer type;//订单类型
    private Integer type;// 订单类型 1-淘宝订单
    @Column(name="state")
    @Expose
    private Integer state;//订单状态 0:审核 1:通过 2:拒绝
    @Column(name="createTime")
    @Expose
    private Long createTime;
    @Column(name="handleTime")
    @Expose
    private Long handleTime;
    
    @Column(name="uid")
    @ManyToOne
    @JoinColumn(name="uid")
    @Expose
    private UserInfo userInfo;
    
    @Column(name="oid")
    @ManyToOne
    @JoinColumn(name="oid")
    @Expose
    private Order order;
    @Column(name="remake")
    @Expose
    private String remake;
    @Column(name="judge")
    @Expose
    private String judge;//系统判定:如果用户在本系统购买并成功上传过订单,且上传的丢失订单后6为相同的话,那么系统判定为匹配
    private String judge;// 系统判定:如果用户在本系统购买并成功上传过订单,且上传的丢失订单后6位相同的话,那么系统判定为匹配
    @Column(name="result_code")
    @javax.persistence.Column(name="result_code")
    @Expose
    private Integer resultCode;// 第三方平台订单爬取结果
    public Integer getResultCode() {
        return resultCode;
    }
    public void setResultCode(Integer resultCode) {
        this.resultCode = resultCode;
    }
    
    public Long getId() {
        return id;
@@ -127,6 +159,5 @@
    public void setOrder(Order order) {
        this.order = order;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/LostOrderServiceImpl.java
@@ -8,7 +8,10 @@
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.NumberUtil;
import com.yeshi.fanli.dao.mybatis.order.LostOrderMapper;
import com.yeshi.fanli.dao.order.LostOrderDao;
import com.yeshi.fanli.dao.order.PidOrderDao;
import com.yeshi.fanli.entity.bus.user.LostOrder;
@@ -17,7 +20,6 @@
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.Utils;
import org.yeshi.utils.NumberUtil;
@Service
public class LostOrderServiceImpl implements LostOrderService {
@@ -31,6 +33,9 @@
    @Resource
    private PidOrderDao pidOrderDao;
    @Resource
    private LostOrderMapper lostOrderMapper;
    @Override
    public int addLostOrder(LostOrder lostOrder) {
        String orderId = lostOrder.getOrderId();
@@ -38,6 +43,16 @@
        if (type == null) { // 默认为淘宝订单
            lostOrder.setType(1);
            type = 1;
        }
        // 查询是否提交
        List<LostOrder> orderList = lostOrderMapper.selectByOrderId(orderId);
        if (orderList != null && orderList.size() > 0) {
            if (orderList.get(0).getState() == 0) {
                return -2;
            } else {
                return -1;
            }
        }
        Order order = orderService.findOrderByOrderIdAndType(orderId, type);
@@ -177,4 +192,62 @@
        return lostOrderDao.find(LostOrder.class, id);
    }
    @Override
    public List<LostOrder> getLostOrderListByUid(Long uid, int page, int pageSize) {
        return lostOrderDao.list("from LostOrder lo where lo.userInfo.id=? order by lo.createTime desc",
                (page - 1) * pageSize, pageSize, new Serializable[] { uid });
    }
    @Override
    public long getLostOrderCountByUid(Long uid) {
        return lostOrderDao.getCount("select count(*)  from LostOrder lo where lo.userInfo.id=?",
                new Serializable[] { uid });
    }
    @Transactional
    @Override
    public void processSuceess(String orderId) {
        // 查询订单号是否在申诉列表中
        List<LostOrder> list = lostOrderMapper.selectByOrderId(orderId);
        if (list == null || list.size() == 0)
            return;
        for (LostOrder lo : list) {
            if (lo.getState() == 1 && lo.getResultCode() != null
                    && lo.getResultCode() == LostOrder.RESULT_CODE_VERFING) {
                LostOrder update = new LostOrder();
                update.setId(lo.getId());
                update.setResultCode(LostOrder.RESULT_CODE_SUCCESS);
                lostOrderMapper.updateByPrimaryKeySelective(update);
            }
        }
    }
    @Override
    public void processFail(String orderId) {
        lostOrderDao.update("update LostOrder lo set lo.resultCode=? where lo.orderId=?",
                new Serializable[] { LostOrder.RESULT_CODE_FAIL, orderId });
    }
    @Override
    public void processFail() {
        // 订单申诉人工通过后,但是隔了3天还未处理成功就视为该订单申诉失败
        lostOrderDao.update(
                "update LostOrder lo set lo.resultCode=? where lo.state=1 and lo.resultCode=? and lo.handleTime<?",
                new Serializable[] { LostOrder.RESULT_CODE_FAIL, LostOrder.RESULT_CODE_VERFING,
                        System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 3L });
    }
    @Override
    public void deleteLostOrder(long id) {
        LostOrder lostOrder = new LostOrder();
        lostOrder.setId(id);
        lostOrderDao.delete(lostOrder);
    }
    @Override
    public void deleteLostOrderByUid(long uid) {
        lostOrderDao.update("delete from LostOrder lo where lo.userInfo.id=?", new Serializable[] { uid });
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -45,6 +45,7 @@
import com.yeshi.fanli.exception.TaoBaoWeiQuanException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderItemServcie;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.service.inter.order.OrderService;
@@ -128,6 +129,9 @@
    @Resource
    private RedisManager redisManager;
    @Resource
    private LostOrderService lostOrderService;
    @Override
    public void processOrder(Map<String, List<TaoBaoOrder>> orders) {
        List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID);
@@ -163,6 +167,7 @@
    /**
     * 利用redis的原子性将订单号锁住,不让其他处理
     *
     * @param orderId
     */
    private void redisLockOrder(String orderId) {
@@ -172,6 +177,7 @@
    /**
     * 订单解锁
     *
     * @param orderId
     */
    private void redisUnlockOrder(String orderId) {
@@ -181,6 +187,7 @@
    /**
     * 订单是否被锁住了
     *
     * @param orderId
     * @return
     */
@@ -208,6 +215,10 @@
                processShopingFanliOrder(orderId, orders.get(orderId));
//                redisUnlockOrder(orderId);
                // 出错了就不处理该订单了,需要定期检查
                // 更改丢失订单的状态
                lostOrderService.processSuceess(orderId);
            } catch (HongBaoException e1) {
                e1.printStackTrace();
            } catch (OrderItemException e2) {
fanli/src/main/java/com/yeshi/fanli/service/impl/order/PidOrderServiceImpl.java
@@ -89,6 +89,9 @@
    @Resource
    private RedisManager redisManager;
    // @Resource
    // private LostOrderService lostOrderService;
    @Override
    @Transactional
    public void addPidOrderFromTaoBao(Map<String, List<PidOrder>> map) {
@@ -205,6 +208,8 @@
//                continue;
//            redisLockOrder(orderId);
            doPidOrder(orderId);
            // 处理订单找回
            // lostOrderService.processSuceess(orderId);
//            redisUnlockOrder(orderId);
        }
    }
fanli/src/main/java/com/yeshi/fanli/service/inter/order/LostOrderService.java
@@ -10,9 +10,66 @@
    static final ReentrantReadWriteLock lostOrderLock = new ReentrantReadWriteLock(true); 
    
    int addLostOrder(LostOrder lostOrder);
    void pass(LostOrder lostOrder);
    void reject(LostOrder lostOrder);
    List<LostOrder> findLostOrderList(String key, int page);
    int getCount(String key);
    LostOrder getOne(long id);
    /**
     * 按用户查找丢失订单
     *
     * @param uid
     * @param page
     * @param pageSize
     * @return
     */
    List<LostOrder> getLostOrderListByUid(Long uid, int page, int pageSize);
    /**
     * 获取丢失订单数量
     *
     * @param uid
     * @return
     */
    long getLostOrderCountByUid(Long uid);
    /**
     * 订单处理成功
     *
     * @param orderId
     */
    void processSuceess(String orderId);
    /**
     * 订单处理失败
     *
     * @param orderId
     */
    void processFail(String orderId);
    /**
     * 订单处理失败批量处理
     */
    void processFail();
    /**
     * 删除记录
     *
     * @param id
     */
    void deleteLostOrder(long id);
    /**
     * 删除用户的所有记录
     *
     * @param uid
     */
    void deleteLostOrderByUid(long uid);
}