Authored by sailing-PC\sailing

Merge branch 'master' of http://git.yoho.cn/ufo/yohoufo-fore

# Conflicts:
#	order/src/main/java/com/yohoufo/order/service/proxy/ProductProxyService.java
Showing 28 changed files with 540 additions and 96 deletions
... ... @@ -27,13 +27,6 @@ public interface ExpressInfoMapper {
*/
List<ExpressInfo> queryExpressInfo(@Param("uid") Integer uid, @Param("orderCode") Long orderCode, @Param("expressType") Integer expressType);
/**
* 根据uid、订单号和快递单号查询快递信息查找第一笔订单信息
* @param uid
* @param orderCode 订单号
* @return
*/
ExpressInfo queryFirstExpressInfo(@Param("uid") Integer uid, @Param("orderCode") Long orderCode, @Param("waybillCode") String waybillCode);
/**
* 根据uid、订单号、物流类型和快递状态查询快递信息
... ...
package com.yohoufo.dal.order;
import com.yohoufo.dal.order.model.ExpressRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ExpressRecordMapper {
int insert(ExpressRecord record);
/**
* 根据uid、订单号和快递单号查询快递信息查找第一笔订单信息
* @param uid
* @param orderCode 订单号
* @return
*/
ExpressRecord queryExpressRecord(@Param("uid") Integer uid, @Param("orderCode") Long orderCode, @Param("waybillCode") String waybillCode);
/**
* 根据uid、订单号、物流类型和快递状态查询快递信息
* @param uid
* @param orderCode
* @param states 0:未签收 1签收 2未发货
* @param expressType 物流类型; 1:卖家到鉴定中心,2:鉴定中心到买家,3:鉴定中心退回到卖家
* @return
*/
ExpressRecord selectByUidAndOrderCodeAndExpressType(@Param("uid") Integer uid, @Param("orderCode") Long orderCode, @Param("states") List<Integer> states, @Param("expressType") Integer expressType);
}
\ No newline at end of file
... ...
package com.yohoufo.dal.order;
import com.yohoufo.dal.order.model.TradeBills;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
public interface TradeBillsMapper {
TradeBills selectByPrimaryKey(Integer id);
int selectCountGoodsIncomeOrCompensateIncomeByUid(@Param("uid") Integer uid);
int insert(TradeBills record);
//根据用户uid ,获取流水(分页)
List<TradeBills> selectTradeBillsWithPageByUid(@Param("uid") Integer uid,@Param("start") Integer start,@Param("limit") Integer limit);
//根据用户uid,获取用户总收入
List<Map<String, Object>> selectIncomeAmountByUid(@Param("uid") Integer uid);
//根据用户uid,获取用户总支出
List<Map<String, Object>> selectSpendAmountByUid(@Param("uid") Integer uid);
}
... ...
... ... @@ -20,6 +20,8 @@ public class ExpressCompany implements Serializable {
private String pinYin;
private String logoUrl;
@Override
public String toString() {
... ... @@ -27,6 +29,7 @@ public class ExpressCompany implements Serializable {
"id=" + id +
", companyName='" + companyName + '\'' +
", pinYin='" + pinYin + '\'' +
", logoUrl='" + logoUrl + '\'' +
'}';
}
}
... ...
package com.yohoufo.dal.order.model;
import lombok.Data;
@Data
public class ExpressRecord {
private Integer id;
private Integer uid;
private Long orderCode;
private String waybillCode;
private Integer logisticsType;
private Integer createTime;
private Byte expressType;
private Integer depotNum;
}
\ No newline at end of file
... ...
package com.yohoufo.dal.order.model;
import lombok.Data;
import java.math.BigDecimal;
/**
* 交易流水表
*/
@Data
public class TradeBills {
private Integer id;
private Integer uid;
private Long orderCode;
//1:买家uid; 2:卖家uid
private Integer userType;
//1:支付宝; 2:微信
private Integer payType;
//1:保证金;2:货款;3:补偿款
private Integer tradeType;
//1:用户收入; 2:用户支出
private Integer incomeOutcome;
private BigDecimal amount;
//yoho收入
private BigDecimal systemAmount;
//0:订单未完结;1:订单完结
private Integer tradeStatus;
private Integer createTime;
}
... ...
... ... @@ -6,10 +6,11 @@
<id property="id" column="id"/>
<result property="companyName" column="company_name"/>
<result property="pinYin" column="pinyin"/>
<result property="logoUrl" column="logo_url"/>
</resultMap>
<select id="queryAllExpressCompany" resultMap="expressCompany">
select id, company_name,pinyin
select id, company_name,pinyin,logo_url
from express_company
</select>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yohoufo.dal.order.ExpressRecordMapper">
<resultMap id="BaseResultMap" type="com.yohoufo.dal.order.model.ExpressRecord">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="uid" jdbcType="INTEGER" property="uid" />
<result column="order_code" jdbcType="BIGINT" property="orderCode" />
<result column="waybill_code" jdbcType="VARCHAR" property="waybillCode" />
<result column="logistics_type" jdbcType="INTEGER" property="logisticsType" />
<result column="create_time" jdbcType="INTEGER" property="createTime" />
<result column="express_type" jdbcType="TINYINT" property="expressType" />
<result column="depot_num" jdbcType="INTEGER" property="depotNum" />
</resultMap>
<sql id="Base_Column_List">
id, uid, order_code, waybill_code, logistics_type,
create_time, express_type, depot_num
</sql>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.yohoufo.dal.order.model.ExpressRecord" useGeneratedKeys="true">
insert into express_record ( uid, order_code, waybill_code, logistics_type,
create_time, express_type, depot_num
)
values (#{uid,jdbcType=INTEGER}, #{orderCode,jdbcType=BIGINT}, #{waybillCode,jdbcType=VARCHAR},
#{logisticsType,jdbcType=INTEGER},
#{createTime,jdbcType=INTEGER},
#{expressType,jdbcType=TINYINT}, #{depotNum,jdbcType=INTEGER}
)
</insert>
<select id="queryExpressRecord" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM express_record
where uid = #{uid} and order_code = #{orderCode} and waybill_code = #{waybillCode}
limit 1
</select>
<select id="selectByUidAndOrderCodeAndExpressType" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM express_record
where uid = #{uid} and order_code = #{orderCode} and express_type = #{expressType}
ORDER BY create_time DESC
</select>
</mapper>
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yohoufo.dal.order.TradeBillsMapper">
<resultMap id="BaseResultMap" type="com.yohoufo.dal.order.model.TradeBills">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="uid" jdbcType="INTEGER" property="uid" />
<result column="order_code" jdbcType="BIGINT" property="orderCode" />
<result column="user_type" jdbcType="TINYINT" property="userType" />
<result column="pay_type" jdbcType="TINYINT" property="payType" />
<result column="trade_type" jdbcType="INTEGER" property="tradeType" />
<result column="income_outcome" jdbcType="TINYINT" property="incomeOutcome" />
<result column="amount" jdbcType="DECIMAL" property="amount" />
<result column="system_amount" jdbcType="DECIMAL" property="systemAmount" />
<result column="trade_status" jdbcType="TINYINT" property="tradeStatus" />
<result column="create_time" jdbcType="INTEGER" property="createTime" />
</resultMap>
<sql id="Base_Column_List">
id,uid, order_code, user_type,pay_type,trade_type,
income_outcome,amount,system_amount,trade_status,create_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from trade_bills
where id = #{id,jdbcType=INTEGER}
</select>
<select id="selectCountGoodsIncomeOrCompensateIncomeByUid" resultType="java.lang.Integer" parameterType="java.lang.Integer" >
select
count(id)
from trade_bills
where uid = #{uid,jdbcType=INTEGER} and ( trade_type = 2 or trade_type = 3 )
</select>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.yohoufo.dal.order.model.TradeBills" useGeneratedKeys="true">
insert into trade_bills (uid, order_code, user_type,pay_type,trade_type,
income_outcome,amount,system_amount,trade_status,create_time)
values (#{uid},#{orderCode},#{userType},#{payType},#{tradeType},
#{incomeOutcome},#{amount},#{systemAmount},
#{tradeStatus},#{createTime})
</insert>
<select id="selectTradeBillsWithPageByUid" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from trade_bills
where uid = #{uid,jdbcType=INTEGER}
order by id desc
limit #{start,jdbcType=INTEGER},#{limit,jdbcType=INTEGER}
</select>
<select id="selectIncomeAmountByUid" resultType="java.util.HashMap">
select trade_type as tradeType,sum(amount) as allAmount from trade_bills
where uid = #{uid} and income_outcome = 1 group by trade_type
</select>
<select id="selectSpendAmountByUid" resultType="java.util.HashMap">
select trade_type as tradeType,sum(amount) as allAmount from trade_bills
where uid = #{uid} and income_outcome = 2 group by trade_type
</select>
</mapper>
\ No newline at end of file
... ...
package com.yohoufo.order.common;
public enum TradeType {
compensateIncome(3, "补偿款"),
goods_income(2, "货款"),
guarantee_cash(1, "保证金");
int code;
String desc;
TradeType(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
/**
* 检查是否存在该支付方式
* @param code
* @return
*/
public static TradeType getTradeTypeByCode(int code){
for(TradeType v : values()){
if(v.code == code){
return v;
}
}
return null;
}
}
... ...
... ... @@ -30,12 +30,13 @@ public class ExpressInfoController {
* @param expressCompanyId 快递公司id
* @param orderCode 订单号
* @param wayBillCode 运单号(快递单号)
* @param depotNum 鉴定中心id
* @return
*/
@RequestMapping(params = "method=ufo.order.deliverToDepot")
public ApiResponse deliverToDepot(@RequestParam("uid") Integer uid,@RequestParam("expressCompanyId") Integer expressCompanyId,
@RequestParam("orderCode") Long orderCode, @RequestParam("wayBillCode") String wayBillCode) {
expressInfoService.deliverToDepot(uid,expressCompanyId, orderCode, wayBillCode);
@RequestParam("orderCode") Long orderCode, @RequestParam("wayBillCode") String wayBillCode, @RequestParam("depotNum") Integer depotNum) {
expressInfoService.deliverToDepot(uid,expressCompanyId, orderCode, wayBillCode,depotNum);
return new ApiResponse();
}
... ...
... ... @@ -212,7 +212,7 @@ public class PaymentController {
if(!alipayService.notifyVerify(params)) {
notifyResponse.setNotifyResult(NotifyResponse.PAYMENT_NOTIFY_RESULT_VERFAIL);
alipayLogger.error("[{}] notification verify failed", out_trade_no);
//return notifyResponse;
return notifyResponse;
}
PaymentData paymentData = null;
... ...
... ... @@ -15,6 +15,8 @@ import java.math.BigDecimal;
public class OrderInfo {
public static int PAY_TIME_SECOND = 15 * 60;
private Integer id;
private Integer uid;
... ...
... ... @@ -5,6 +5,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Builder;
import java.math.BigDecimal;
/**
* Created by chenchao on 2018/9/28.
*/
... ... @@ -15,4 +17,21 @@ import lombok.experimental.Builder;
public class TradeBillsBo {
private int uid;
private Long orderCode;
//1:保证金;2:货款;3:补偿款
private Integer tradeType;
private String tradeTypeDesc;
//1:用户收入; 2:用户支出
private Integer incomeOutcome;
private BigDecimal amount;
}
... ...
... ... @@ -10,8 +10,10 @@ import com.yohoufo.common.constant.ExpressInfoConstant;
import com.yohoufo.common.utils.DateUtil;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.ExpressInfoMapper;
import com.yohoufo.dal.order.ExpressRecordMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.ExpressInfo;
import com.yohoufo.dal.order.model.ExpressRecord;
import com.yohoufo.order.mq.publisher.ConsumerExceptionPublisher;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
... ... @@ -35,6 +37,9 @@ private static final Logger LOGGER = LoggerFactory.getLogger(ExpressInfoUpdateCo
private ExpressInfoMapper expressInfoMapper;
@Autowired
private ExpressRecordMapper expressRecordMapper;
@Autowired
private BuyerOrderMapper buyerOrderMapper;
... ... @@ -82,8 +87,8 @@ private static final Logger LOGGER = LoggerFactory.getLogger(ExpressInfoUpdateCo
String waybillCode = jsonMsg.getString("waybillCode");
//根据uid,orderCode,waybillCode查状态expressType
ExpressInfo firstExpressInfo = expressInfoMapper.queryFirstExpressInfo(uid,orderCode,waybillCode);
if(firstExpressInfo==null){
ExpressRecord firstExpressRecord = expressRecordMapper.queryExpressRecord(uid,orderCode,waybillCode);
if(firstExpressRecord==null){
LOGGER.warn("updateExpressInfo first express info not exist, uid is {} orderCode is {} waybillCode is {}", uid,orderCode,waybillCode);
throw new ServiceException(400,"not find express type info");
}
... ... @@ -94,7 +99,7 @@ private static final Logger LOGGER = LoggerFactory.getLogger(ExpressInfoUpdateCo
// 正常订单,签收消息
if (state == ExpressInfoConstant.EXPRESS_STATUS_SIGN) {
handleAcceptExpress(jsonMsg,firstExpressInfo.getExpressType().intValue());
handleAcceptExpress(jsonMsg,firstExpressRecord.getExpressType().intValue());
return;
}
int logisticsType = jsonMsg.getIntValue("logisticsType");
... ... @@ -120,7 +125,7 @@ private static final Logger LOGGER = LoggerFactory.getLogger(ExpressInfoUpdateCo
expressInfo.setAcceptRemark(StringUtils.defaultString(acceptRemark));
expressInfo.setLogisticsType(logisticsType);
expressInfo.setCreateTime(createTime);
expressInfo.setExpressType(firstExpressInfo.getExpressType());
expressInfo.setExpressType(firstExpressRecord.getExpressType());
expressInfo.setState(state);
expressInfoMapper.insert(expressInfo);
}
... ...
... ... @@ -171,6 +171,7 @@ public class BuyerOrderPaymentService extends AbstractOrderPaymentService {
private OrderInfo buildOrderInfo(BuyerOrder buyerOrder) {
OrderInfo orderInfo = OrderInfo.builder()
.id(buyerOrder.getId())
.uid(buyerOrder.getUid())
.orderCode(buyerOrder.getOrderCode())
.payment(buyerOrder.getPayment())
... ...
... ... @@ -16,7 +16,7 @@ public interface IExpressInfoService {
* @param orderCode 订单号
* @param wayBillCode 快递单号
*/
void deliverToDepot(Integer sellerUid,Integer expressCompanyId, Long orderCode, String wayBillCode);
void deliverToDepot(Integer sellerUid,Integer expressCompanyId, Long orderCode, String wayBillCode,Integer depotNum);
/**
... ...
... ... @@ -148,7 +148,8 @@ public class SellerOrderPaymentService extends AbstractOrderPaymentService {
SellerOrder sellerOrder = new SellerOrder();
// 更新预支付方式
sellerOrder.setPayment(orderInfo.getPayment());
sellerOrder.setId(orderInfo.getId());
sellerOrder.setPayment(payment);
sellerOrder.setUpdateTime(DateUtil.getCurrentTimeSecond());
sellerOrderMapper.updateByPrimaryKeySelective(sellerOrder);
... ... @@ -188,6 +189,7 @@ public class SellerOrderPaymentService extends AbstractOrderPaymentService {
private OrderInfo buildOrderInfo(long orderCode, int uid, SellerOrder sellerOrder) {
OrderInfo orderInfo = OrderInfo.builder()
.id(sellerOrder.getId())
.uid(uid)
.orderCode(orderCode)
.payment(sellerOrder.getPayment())
... ...
package com.yohoufo.order.service.impl;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.yoho.core.cache.LocalCache;
import com.yohoufo.dal.order.TradeBillsMapper;
import com.yohoufo.dal.order.model.TradeBills;
import com.yohoufo.order.common.TradeType;
import com.yohoufo.order.model.bo.TradeBillsBo;
import com.yohoufo.order.model.bo.TradeBillsSummaryBo;
import com.yohoufo.order.model.response.AssetsResp;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/**资产
* Created by chenchao on 2018/9/28.
*/
@Service
public class AssetsService {
final Logger logger = LoggerFactory.getLogger(getClass());
private Cache<String,List<TradeBillsBo>> localContentCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(5, TimeUnit.MINUTES).build();
private Cache<Integer,TradeBillsSummaryBo> localTradeBillsSummaryBoCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(2, TimeUnit.MINUTES).build();
@Autowired
private TradeBillsMapper tradeBillsMapper;
public AssetsResp getAssetsDetails(int uid, int page, int pageSize){
//TODO get count
int total = 0;
int total = tradeBillsMapper.selectCountGoodsIncomeOrCompensateIncomeByUid(uid);
TradeBillsSummaryBo summary = null;
List<TradeBillsBo> detailList = null;
if (total>0){
detailList = buildTradeBills(uid, page, pageSize);
summary = buildTradeBillsSummary(uid);
detailList = buildTradeBills(uid, page, pageSize);
}
AssetsResp assetsResp = new AssetsResp();
assetsResp.setSummary(summary);
assetsResp.setData(detailList);
... ... @@ -42,9 +64,41 @@ public class AssetsService {
* @return
*/
List<TradeBillsBo> buildTradeBills(int uid,int page, int pageSize){
List<TradeBillsBo> detailList = null;
//把第一页缓存
String key=uid+"-"+page+"-"+pageSize;
if(page==1){
try{
return localContentCache.get(key, new Callable<List<TradeBillsBo>>() {
@Override
public List<TradeBillsBo> call() throws Exception {
return detailList;
return loadTradeBillFromDb(uid,page,pageSize);
}
});
}catch (ExecutionException e){
throw new RuntimeException(e);
}
}else{
return loadTradeBillFromDb(uid,page,pageSize);
}
}
private List<TradeBillsBo> loadTradeBillFromDb(int uid,int page, int pageSize){
List<TradeBills> detailList = tradeBillsMapper.selectTradeBillsWithPageByUid(uid,pageSize*(page-1),pageSize);
List<TradeBillsBo> rtnList=new ArrayList<>();
for(TradeBills bills:detailList){
TradeBillsBo bo = new TradeBillsBo();
bo.setUid(uid);
bo.setAmount(bills.getAmount());
bo.setIncomeOutcome(bills.getIncomeOutcome());
bo.setOrderCode(bills.getOrderCode());
bo.setTradeType(bills.getTradeType());
bo.setTradeTypeDesc(TradeType.getTradeTypeByCode(bills.getTradeType()).getDesc());
rtnList.add(bo);
}
return rtnList;
}
/**
... ... @@ -53,11 +107,66 @@ public class AssetsService {
* @return
*/
TradeBillsSummaryBo buildTradeBillsSummary(int uid){
TradeBillsSummaryBo summary = null;
//TODO 使用 sql sum 货款
//TODO 使用 sql sum 补偿款
try{
return localTradeBillsSummaryBoCache.get(uid,new Callable<TradeBillsSummaryBo>() {
@Override
public TradeBillsSummaryBo call() throws Exception {
TradeBillsSummaryBo summary = new TradeBillsSummaryBo();
BigDecimal sum_goods_income=new BigDecimal(0);
BigDecimal compensate_income=new BigDecimal(0);
//计算收入
List<Map<String, Object>> incomeList=tradeBillsMapper.selectIncomeAmountByUid(uid);
if(CollectionUtils.isNotEmpty(incomeList)){
for(Map<String, Object> tmpMap:incomeList){
if(tmpMap.get("tradeType")==null){
continue;
}
Integer key = (Integer)tmpMap.get("tradeType");
if(TradeType.goods_income.getCode()==key){
sum_goods_income.add((BigDecimal)tmpMap.get("allAmount"));
}
if(TradeType.compensateIncome.getCode()==key){
compensate_income.add((BigDecimal)tmpMap.get("allAmount"));
}
//TODO 内存中计算total
return summary;
}
}
//计算支出
List<Map<String, Object>> spendList=tradeBillsMapper.selectSpendAmountByUid(uid);
if(CollectionUtils.isNotEmpty(spendList)){
for(Map<String, Object> tmpMap:incomeList){
if(tmpMap.get("tradeType")==null){
continue;
}
Integer key = (Integer)tmpMap.get("tradeType");
if(TradeType.goods_income.getCode()==key){
sum_goods_income.subtract((BigDecimal)tmpMap.get("allAmount"));
}
if(TradeType.compensateIncome.getCode()==key){
compensate_income.subtract((BigDecimal)tmpMap.get("allAmount"));
}
}
}
//TODO 内存中计算total
summary.setGoods_income(sum_goods_income);
summary.setGoodsIncome(String.valueOf(sum_goods_income));
summary.setCompensate_income(compensate_income);
summary.setCompensateIncome(String.valueOf(compensate_income));
summary.setTotal_income(sum_goods_income.add(compensate_income));
summary.setTotalIncome(String.valueOf(compensate_income));
return summary;
}
});
}catch (ExecutionException e){
throw new RuntimeException(e);
}
}
}
... ...
... ... @@ -83,7 +83,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
OrderStatus orderStatus = OrderStatus.BUYER_CANCEL_BEFORE_PAY;
BuyerOrder tbo = new BuyerOrder();
tbo.setUpdateTime(orderStatus.getCode());
tbo.setStatus(orderStatus.getCode());
tbo.setUid(orderRequest.getUid());
tbo.setOrderCode(orderRequest.getOrderCode());
tbo.setUpdateTime(DateUtil.getCurrentTimeSecond());
... ...
... ... @@ -5,30 +5,20 @@ import com.alibaba.fastjson.JSONObject;
import com.yoho.core.rabbitmq.YhProducer;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yoho.service.model.request.LoginSuccessBO;
import com.yohobuy.ufo.model.order.resp.ExpressInfoDetail;
import com.yohobuy.ufo.model.order.resp.ExpressInfoRespBo;
import com.yohoufo.common.constant.ExpressInfoConstant;
import com.yohoufo.common.utils.DateUtil;
import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.ExpressInfoMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.SellerOrderMetaMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.ExpressInfo;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.dal.order.model.SellerOrderMeta;
import com.yohoufo.dal.order.*;
import com.yohoufo.dal.order.model.*;
import com.yohoufo.order.common.ExpressForMqSend;
import com.yohoufo.order.common.OrderCodeType;
import com.yohoufo.order.common.OrderStatus;
import com.yohoufo.order.common.SellerOrderStatus;
import com.yohoufo.order.constants.MetaKey;
import com.yohoufo.order.model.AddressInfo;
import com.yohoufo.order.model.response.AppraiseAddressResp;
import com.yohoufo.order.service.IExpressCompanyService;
import com.yohoufo.order.service.IExpressInfoService;
import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator;
import com.yohoufo.order.service.support.codegenerator.bean.CodeMeta;
import com.yohoufo.order.service.proxy.ProductProxyService;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -38,7 +28,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author kun.wang
... ... @@ -53,10 +42,10 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
private ExpressInfoMapper expressInfoMapper;
@Autowired
private IExpressCompanyService expressCompanyService;
private ExpressRecordMapper expressRecordMapper;
@Autowired
private SellerOrderMapper sellerOrderMapper;
private IExpressCompanyService expressCompanyService;
@Autowired
... ... @@ -71,6 +60,15 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
@Autowired
private AppraiseAddressService appraiseAddressService;
@Autowired
private BuyerOrderGoodsMapper buyerOrderGoodsMapper;
@Autowired
private SellerOrderGoodsMapper sellerOrderGoodsMapper;
@Autowired
private ProductProxyService productProxyService;
private static String EXPRESS_MQ_SEND = "logistics.logistics_data";
/**
... ... @@ -79,16 +77,18 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
* @param expressCompanyId 快递公司id
* @param orderCode 订单号 :一定是买家订单编号
* @param wayBillCode 快递单号
* @param depotNum 鉴定中心id
*/
@Override
public void deliverToDepot(Integer sellerUid,Integer expressCompanyId, Long orderCode, String wayBillCode) {
public void deliverToDepot(Integer sellerUid,Integer expressCompanyId, Long orderCode, String wayBillCode,Integer depotNum) {
//保存物流信息+更新订单状态;
//本阶段的物流类型和订单状态
OrderStatus orderStatus=OrderStatus.SELLER_SEND_OUT;
final OrderStatus expectOrderStatus = OrderStatus.HAS_PAYED;
final OrderStatus targetOrderStatus=OrderStatus.SELLER_SEND_OUT;
Integer expressType = ExpressInfoConstant.EXPRESS_TYPE_1;
LOGGER.info("deliverToDepot saveExpressAndUpdateBuyerOrderStatus sellerUid={} ,expressCompanyId = {}, orderCode = {}, wayBillCode = {} " +
",expressType = {} ,orderStatus = {}", new Object[]{sellerUid ,expressCompanyId, orderCode, wayBillCode,expressType,orderStatus});
",expressType = {} ,expectOrderStatus = {} ,targetOrderStatus = {} ,depotNum = {}", new Object[]{sellerUid ,expressCompanyId, orderCode, wayBillCode,expressType,expectOrderStatus,targetOrderStatus,depotNum});
BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
if (buyerOrder == null){
... ... @@ -96,24 +96,32 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
throw new ServiceException(ServiceError.ORDER_NULL);
}
/* //卖家的uid
if(sellerUid.intValue()!=buyerOrder.getSellerUid().intValue()){
LOGGER.warn("deliverToDepot saveExpressAndUpdateBuyerOrderStatus uid {} not equal buyer order sellerUid {}",uid, buyerOrder.getSellerUid());
throw new ServiceException(400,"参数错误,传入的卖家uid与订单卖家uid不一致");
}*/
//获取skup
BuyerOrderGoods buyerOrderGoods= buyerOrderGoodsMapper.selectByOrderCode(buyerOrder.getUid(),orderCode);
if(buyerOrderGoods==null){
LOGGER.warn("deliverToDepot buyerOrderGoods order not exist, orderCode is {}", orderCode);
throw new ServiceException(ServiceError.ORDER_NULL);
}
// 保存订单物流信息
saveExpress(sellerUid,expressCompanyId,orderCode,wayBillCode,expressType);
saveExpress(sellerUid,expressCompanyId,orderCode,wayBillCode,expressType,depotNum);
// 发送mq获取物流信息
sendExpressMQ(sellerUid,expressCompanyId,orderCode,wayBillCode);
LOGGER.info("deliverToDepot end ! send express to erp ");
//根据skup ,更新鉴定中心
SellerOrderGoods sellerOrderGoods=new SellerOrderGoods();
sellerOrderGoods.setId(buyerOrderGoods.getSkup());
sellerOrderGoods.setDepotNo(depotNum);
sellerOrderGoodsMapper.updateByPrimaryKeySelective(sellerOrderGoods);
productProxyService.setDepotNum(buyerOrderGoods.getSkup(),depotNum);
// 更新买家订单状态
buyerOrder.setStatus(orderStatus.getCode());
buyerOrder.setUpdateTime(DateUtil.getCurrentTimeSecond());
LOGGER.info("deliverToDepot update buyer order {} ", buyerOrder);
buyerOrderMapper.updateByPrimaryKeySelective(buyerOrder);
int updateBuyerCnt = buyerOrderMapper.updateStatusByOrderCode(orderCode, buyerOrder.getUid(),
expectOrderStatus.getCode(), targetOrderStatus.getCode(), DateUtil.getCurrentTimeSecond());
LOGGER.info("deliverToDepot update buyer order status result {} ",updateBuyerCnt);
}
@Override
... ... @@ -124,7 +132,7 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
",expressType = {}", new Object[]{expressCompanyId, orderCode, wayBillCode,expressType});
// 保存订单物流信息
saveExpress(sellerUid,expressCompanyId,orderCode,wayBillCode,expressType);
saveExpress(sellerUid,expressCompanyId,orderCode,wayBillCode,expressType,null);
// 发送mq获取物流信息
sendExpressMQ(sellerUid,expressCompanyId,orderCode,wayBillCode);
... ... @@ -139,7 +147,7 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
",expressType = {} ", new Object[]{expressCompanyId, orderCode, wayBillCode,expressType});
// 保存订单物流信息
saveExpress(uid,expressCompanyId,orderCode,wayBillCode,expressType);
saveExpress(uid,expressCompanyId,orderCode,wayBillCode,expressType,null);
// 发送mq获取物流信息
sendExpressMQ(uid,expressCompanyId,orderCode,wayBillCode);
... ... @@ -156,17 +164,17 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
* @param wayBillCode
* @param expressType
*/
private void saveExpress(Integer uid,Integer expressCompanyId, Long orderCode, String wayBillCode,Integer expressType ){
ExpressInfo expressInfo=new ExpressInfo();
expressInfo.setUid(uid);/// 存卖家的uid
expressInfo.setOrderCode(orderCode);
expressInfo.setWaybillCode(wayBillCode);
expressInfo.setLogisticsType(expressCompanyId);
expressInfo.setCreateTime(DateUtil.getCurrentTimeSecond());
expressInfo.setExpressType(expressType.byteValue());
expressInfo.setState(0);
LOGGER.info("deliverToDepot save express info {} ", expressInfo);
expressInfoMapper.insert(expressInfo);
private void saveExpress(Integer uid,Integer expressCompanyId, Long orderCode, String wayBillCode,Integer expressType,Integer depotNum ){
ExpressRecord record=new ExpressRecord();
record.setUid(uid);/// 存卖家的uid
record.setOrderCode(orderCode);
record.setWaybillCode(wayBillCode);
record.setLogisticsType(expressCompanyId);
record.setCreateTime(DateUtil.getCurrentTimeSecond());
record.setExpressType(expressType.byteValue());
record.setDepotNum(depotNum);
LOGGER.info("deliverToDepot save express record {} ", record);
expressRecordMapper.insert(record);
}
/**
... ...
package com.yohoufo.order.service.impl;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.common.collect.Lists;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
... ... @@ -16,7 +26,13 @@ import com.yohoufo.dal.order.BuyerOrderMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.order.common.*;
import com.yohoufo.order.common.CancelType;
import com.yohoufo.order.common.DelStatus;
import com.yohoufo.order.common.OrderCodeType;
import com.yohoufo.order.common.OrderStatus;
import com.yohoufo.order.common.SellerOrderStatus;
import com.yohoufo.order.common.SkupStatus;
import com.yohoufo.order.common.TabType;
import com.yohoufo.order.convert.AddressInfoConvertor;
import com.yohoufo.order.convert.SellerOrderConvertor;
import com.yohoufo.order.event.ErpCancelSellerOrderEvent;
... ... @@ -45,14 +61,6 @@ import com.yohoufo.order.service.support.codegenerator.bean.CodeMeta;
import com.yohoufo.product.model.GoodsSize;
import com.yohoufo.product.model.ProductInfo;
import com.yohoufo.product.response.StorageDataResp;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* Created by chenchao on 2018/9/13.
... ... @@ -61,7 +69,15 @@ import java.util.Objects;
@Slf4j
public class SellerOrderService implements IOrderListService, IOrderDetailService {
private final static List<Integer> canDelStatusList = Lists.newArrayList(OrderStatus.DONE.getCode(),OrderStatus.DONE.getCode(), OrderStatus.BUYER_CANCEL_BEFORE_PAY.getCode(),
private final static List<Integer> sellerCanDelStatusList = Lists.newArrayList(
SellerOrderStatus.PLAY_SELF.getCode(),
SellerOrderStatus.SELf_CANCEL_PAY.getCode(),
SellerOrderStatus.TIMEOUT_CANCEL.getCode(),
SellerOrderStatus.FINISH.getCode());
private final static List<Integer> buyerCanDelStatusList = Lists.newArrayList(
OrderStatus.DONE.getCode(),
OrderStatus.BUYER_CANCEL_BEFORE_PAY.getCode(),
OrderStatus.BUYER_CANCEL_TIMEOUT.getCode());
@Autowired
... ... @@ -353,7 +369,7 @@ public class SellerOrderService implements IOrderListService, IOrderDetailServi
SellerOrder sellerOrder = sellerOrderMapper.selectByOrderCodeUid(orderCode, uid);
//todo 判断状态后更新
checkCanDelStatus(sellerOrder.getStatus());
checkSellCanDelStatus(sellerOrder.getStatus());
SellerOrder target = new SellerOrder();
target.setId(sellerOrder.getId());
... ... @@ -367,7 +383,7 @@ public class SellerOrderService implements IOrderListService, IOrderDetailServi
if(OrderCodeType.BUYER_TYPE.getType() == codeMeta.getType()){
BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
//todo 判断状态后更新
checkCanDelStatus(buyerOrder.getStatus());
checkBuyCanDelStatus(buyerOrder.getStatus());
BuyerOrder target = new BuyerOrder();
target.setId(buyerOrder.getId());
... ... @@ -378,8 +394,16 @@ public class SellerOrderService implements IOrderListService, IOrderDetailServi
return true;
}
private void checkCanDelStatus(Integer status) {
if (!canDelStatusList.contains(status)) {
private void checkBuyCanDelStatus(Integer status) {
if (!buyerCanDelStatusList.contains(status)) {
throw new ServiceException(ServiceError.ORDER_STATUS_INVALIDATE);
}
}
private void checkSellCanDelStatus(Integer status) {
if (!sellerCanDelStatusList.contains(status)) {
throw new ServiceException(ServiceError.ORDER_STATUS_INVALIDATE);
}
}
... ...
... ... @@ -284,7 +284,7 @@ public abstract class AlipayServiceAbstract extends AbstractPayService {
bizJson.put("product_code", "QUICK_MSECURITY_PAY");
bizJson.put("total_amount", amount.toPlainString());
String subject = "有货订单-" + tradeNo;
String subject = "ufoOrder-" + tradeNo;
bizJson.put("subject", subject);
bizJson.put("body", subject);
bizJson.put("out_trade_no", tradeNo);
... ...
... ... @@ -180,13 +180,13 @@ public abstract class AbstractWeixinPayService extends AbstractPayService {
public PaymentData getPaymentData(Map<String, String> paramsMap) {
PaymentData paymentData = new PaymentData();
logger.info("paramsMap is: {}", paramsMap);
try {
// 把 YOHOBuy_XXXX 形式的订单号转换为 XXXX
String out_no_raw = paramsMap.get("out_trade_no");
String out_trade_no;
String[] sp = out_no_raw.split("_");
out_trade_no = sp[1];
String out_trade_no = out_no_raw;
/*String[] sp = out_no_raw.split("_");
out_trade_no = sp[1];*/
paymentData.setOrderCode(out_trade_no);
paymentData.setPaymentTime(TimeUtils.formatTime(paramsMap.get("time_end")));
... ...
package com.yohoufo.order.service.proxy;
import com.yoho.core.dal.datasource.annotation.Database;
import com.yoho.error.exception.ServiceException;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.common.caller.UfoServiceCaller;
import com.yohoufo.common.exception.GatewayException;
... ... @@ -16,7 +14,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Objects;
... ... @@ -50,7 +47,6 @@ public class ProductProxyService {
private SellerOrderGoodsMapper sogMapper;
public boolean subtractStorage(Integer productId, Integer skup){
ApiResponse resp = ufoServiceCaller.call(SUBTRACT_STORAGE, productId, skup);
... ... @@ -99,6 +95,12 @@ public class ProductProxyService {
return prdResp;
}
public ApiResponse setDepotNum(Integer skup,Integer depotNum){
ApiResponse apiResponse = ufoServiceCaller.call("ufo.product.setDepotNum", skup,depotNum);
return apiResponse;
}
/**
* 1:可售(支付保证金),2:取消支付保证金,3:超时未支付保证金,4:支付保证金后取消售卖
* @param goods
... ...
... ... @@ -41,7 +41,7 @@ public class FavoriteController {
* @throws ServiceException
*/
@RequestMapping(params = "method=ufo.user.favoriteList")
public ApiResponse listFavorite(FavoriteRequestVO vo) throws ServiceException {
public com.yohoufo.common.ApiResponse listFavorite(FavoriteRequestVO vo) throws ServiceException {
logger.info("Begin call ufo.user.favoriteList with param is {}", vo);
validateRequest(vo,false);
... ... @@ -58,8 +58,7 @@ public class FavoriteController {
int page=1;
//调用商品接口返回商品list
ApiResponse productApiResponse = serviceCaller.call("ufo.product.search.list",
ApiResponse.class,
com.yohoufo.common.ApiResponse productApiResponse = serviceCaller.call("ufo.product.search.list",
type,null, product_id,null
,null,null,null,null,null,null,null
,limit,page
... ...
... ... @@ -44,6 +44,7 @@ datasources:
- com.yohoufo.dal.order.BuyerOrderGoodsMapper
- com.yohoufo.dal.order.BuyerOrderMapper
- com.yohoufo.dal.order.BuyerOrderMetaMapper
- com.yohoufo.dal.order.ExpressRecordMapper
- com.yohoufo.dal.order.ExpressInfoMapper
- com.yohoufo.dal.order.SellerOrderGoodsMapper
- com.yohoufo.dal.order.SellerOrderMapper
... ... @@ -52,6 +53,7 @@ datasources:
- com.yohoufo.dal.order.OrdersPayRefundMapper
- com.yohoufo.dal.order.ExpressCompanyMapper
- com.yohoufo.dal.order.AppraiseAddressMapper
- com.yohoufo.dal.order.TradeBillsMapper
yh_passport:
servers:
... ...
... ... @@ -56,6 +56,7 @@ datasources:
- com.yohoufo.dal.order.BuyerOrderGoodsMapper
- com.yohoufo.dal.order.BuyerOrderMapper
- com.yohoufo.dal.order.BuyerOrderMetaMapper
- com.yohoufo.dal.order.ExpressRecordMapper
- com.yohoufo.dal.order.ExpressInfoMapper
- com.yohoufo.dal.order.SellerOrderGoodsMapper
- com.yohoufo.dal.order.SellerOrderMapper
... ... @@ -63,6 +64,7 @@ datasources:
- com.yohoufo.dal.order.OrdersPayMapper
- com.yohoufo.dal.order.OrdersPayRefundMapper
- com.yohoufo.dal.order.AppraiseAddressMapper
- com.yohoufo.dal.order.TradeBillsMapper
ufo_resource:
servers:
... ...