订单类型由订单明细移动至订单本体中

This commit is contained in:
longbinbin
2024-12-10 14:17:01 +08:00
parent c5977252fc
commit 4c51e1be08
16 changed files with 206 additions and 71 deletions

View File

@ -7,6 +7,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@ -23,14 +24,22 @@ AppFaceController {
@Autowired
private FaceService faceService;
/**
* 1、上传人脸照片
* 2、人脸照片有效性校验
* 3、校验失败删除提示重新上传
* 4、校验成功保存用户人脸信息将访问人脸照片访问地址响应给前端
* @param file
* @param scenicId
* @return
*/
@ApiOperation("人脸照片上传")
@PostMapping("/faceUPload")
public ApiResponse faceUPload(MultipartFile file) {
//1、上传人脸照片
//2、人脸照片有效性校验
//3、校验失败删除提示重新上传
//4、校验成功保存用户人脸信息将访问人脸照片访问地址响应给前端
public ApiResponse faceUPload(@RequestParam("file")MultipartFile file, @RequestParam("scenicId") Long scenicId) {
return faceService.faceUPload(file);
return faceService.faceUPload(file,scenicId);
}
}

View File

@ -29,7 +29,6 @@ public class AppOrderController {
@ApiOperation("用户端订单列表查询")
@PostMapping("/page")
@IgnoreToken
public ApiResponse<PageInfo<OrderAppRespVO>> pageQuery(@RequestBody OrderReqQuery orderReqQuery) {
String userId = BaseContextHandler.getUserId();
orderReqQuery.setMemberId(Long.valueOf(userId));
@ -38,7 +37,6 @@ public class AppOrderController {
@ApiOperation("用户端订单详情查询")
@GetMapping("getOrderDetails/{id}")
@IgnoreToken
public ApiResponse<OrderAppRespVO> getOrderDetails(@PathVariable("id") Long id) {
return orderService.appDetail(id);
}

View File

@ -21,4 +21,6 @@ public interface FaceMapper {
int deleteById(Long id);
int deleteByIds(@Param("list") List<Long> ids);
int update(FaceEntity face);
FaceRespVO getByMemberId(String userId);
}

View File

@ -0,0 +1,87 @@
package com.ycwl.basic.model.mobile.order;
import com.ycwl.basic.model.common.BaseQueryParameterReq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Authorlongbinbin
* @Date2024/11/29 16:33
*/
@Data
@ApiModel(value = "移动端订单查询对象")
public class OrderAppPageReq extends BaseQueryParameterReq {
@ApiModelProperty(value = "用户id",hidden = true)
private Long memberId;
// /**
// * 微信openId
// */
// @ApiModelProperty("微信openId")
// private Long openId;
// /**
// * 价格
// */
// @ApiModelProperty("价格")
// private BigDecimal price;
// /**
// * 实际支付价格
// */
// @ApiModelProperty("实际支付价格")
// private BigDecimal payPrice;
// /**
// * 推客id
// */
// @ApiModelProperty("推客id")
// private Long brokerId;
// /**
// * 推客优惠码
// */
// @ApiModelProperty("推客优惠码")
// private String promoCode;
// /**
// * 退款原因
// */
// @ApiModelProperty("退款原因")
// private String refundReason;
// /**
// * 退款状态0未提出1已通过2待审核
// */
// @ApiModelProperty("退款状态0未提出1已通过2待审核")
// private Integer refundStatus;
// /**
// * 状态0未支付1已支付2已退款9已取消
// */
// @ApiModelProperty("状态0未支付1已支付2已退款9已取消")
// private Integer status;
// /**
// * 订单创建时间
// */
// @ApiModelProperty("订单创建时间")
// private Date startCreateTime;
// private Date endCreateTime;
// /**
// * 订单支付时间
// */
// @ApiModelProperty("订单支付时间")
// private Date startPayTime;
// private Date endPayTime;
// /**
// * 订单取消时间
// */
// @ApiModelProperty("订单取消时间")
// private Date startCancelTime;
// private Date endCancelTime;
// /**
// * 订单退款时间
// */
// @ApiModelProperty("订单退款时间")
// private Date startRefundTime;
// private Date endRefundTime;
@ApiModelProperty("订单类型 0成片vlog 1原片 2照片")
private Integer type;
}

View File

@ -27,6 +27,8 @@ public class OrderAddOrUpdateReq {
*/
@ApiModelProperty("微信openId")
private Long openId;
@ApiModelProperty("景区id")
private Long scenicId;
/**
* 价格
*/
@ -52,6 +54,8 @@ public class OrderAddOrUpdateReq {
*/
@ApiModelProperty("推客优惠码")
private String promoCode;
@ApiModelProperty("订单商品类型 1成片2源素材")
private Integer goodsType;
/**
* 退款原因
*/

View File

@ -17,7 +17,7 @@ import java.util.Date;
@Data
@ApiModel(value = "订单查询对象")
public class OrderReqQuery extends BaseQueryParameterReq {
private Long id;
// private Long id;
private Long memberId;
@ApiModelProperty("用户昵称")
private String memberNickname;

View File

@ -83,6 +83,11 @@ public class OrderAppRespVO {
private String goodsName;
@ApiModelProperty("拍摄时间")
private Date shootingTime;
/**
* 商品类型0其他1成片2原片3模板成片
*/
@ApiModelProperty("商品类型1成片2源素材")
private Integer goodsType;
@ApiModelProperty("订单明细")
private List<OrderItemVO> orderItemList;
}

View File

@ -19,11 +19,6 @@ public class OrderItemVO {
*/
@ApiModelProperty("订单id")
private Long orderId;
/**
* 商品类型0其他1成片2原片3模板成片
*/
@ApiModelProperty("商品类型0其他1成片2源素材")
private Integer goodsType;
/**
* 商品IDgoods_type=1关联video.id=2关联source.id=3关联template.id
*/

View File

@ -53,6 +53,8 @@ public class OrderRespVO {
*/
@ApiModelProperty("推客优惠码")
private String promoCode;
@ApiModelProperty("订单商品类型 1成片2源素材")
private Integer goodsType;
/**
* 退款原因
*/

View File

@ -98,9 +98,9 @@ public class AppMemberServiceImpl implements AppMemberService {
List<MemberRespVO> list = memberMapper.list(memberReqQuery);
if (list.isEmpty()) {
MemberEntity memberEntity = new MemberEntity();
BeanCopierUtils.copyProperties(userInfoDTO, memberEntity);
memberEntity.setId(SnowFlakeUtil.getLongId());
memberEntity.setOpenId(openId.toString());
BeanCopierUtils.copyProperties(userInfoDTO, memberEntity);
memberMapper.add(memberEntity);
BeanCopierUtils.copyProperties(memberEntity, memberRespVO);
} else {

View File

@ -1,5 +1,6 @@
package com.ycwl.basic.service.impl.pc;
import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.constant.BaseContextHandler;
@ -9,11 +10,16 @@ import com.ycwl.basic.model.jwt.JwtInfo;
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
import com.ycwl.basic.model.pc.face.req.FaceReqQuery;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.service.impl.task.TaskFaceServiceImpl;
import com.ycwl.basic.service.pc.FaceService;
import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@ -32,6 +38,11 @@ public class FaceServiceImpl implements FaceService {
private FaceMapper faceMapper;
@Autowired
private OssUtil ossUtil;
@Autowired
private TaskFaceService faceService;
@Value("${face.score}")
private float faceScore;
@Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@ -89,20 +100,21 @@ public class FaceServiceImpl implements FaceService {
}
@Override
public ApiResponse faceUPload(MultipartFile file) {
//TODO 获取用户信息
// @Transactional(rollbackFor = Exception.class)
public ApiResponse faceUPload(MultipartFile file,Long scenicId) {
//获取用户id
String userId = BaseContextHandler.getUserId();
JwtInfo worker = JwtTokenUtil.getWorker();
log.info("当前登录用户信息:{}",worker);
//1、上传人脸照片
String facaeUrl = uploadFileALiOss(file, userId);
//TODO 2、人脸照片有效性校验
Boolean isValid=true;
if(isValid){
//校验成功,保存用户人脸信息,将访问人脸照片访问地址响应给前端
// 2、查看人脸是否已上传
FaceRespVO faceRespVO=faceMapper.getByMemberId(userId);
FaceEntity faceEntity = new FaceEntity();
if (faceRespVO==null) {
//新增人脸
faceEntity.setId(SnowFlakeUtil.getLongId());
faceEntity.setMemberId(Long.parseLong(userId));
faceEntity.setFaceUrl(facaeUrl);
@ -112,14 +124,26 @@ public class FaceServiceImpl implements FaceService {
// faceEntity.setMatchResult();
//TODO 人脸数据存库
faceMapper.add(faceEntity);
return ApiResponse.success(facaeUrl);
}else {
//2、更新人脸
faceRespVO.setFaceUrl(facaeUrl);
BeanUtil.copyProperties(faceRespVO,faceEntity);
faceMapper.update(faceEntity);
}
SearchFaceRespVo faceRespVo = faceService.searchFace(scenicId, faceRespVO.getId());
float score = faceRespVo.getScore();
if (score<faceScore) {
//校验失败,删除,提示重新上传
ossUtil.deleteFile(facaeUrl);
throw new BaseException("人脸照片校验失败,请重新上传");
}else {
//校验成功,保存用户人脸信息,将访问人脸照片访问地址响应给前端
return ApiResponse.success(facaeUrl);
}
}
/**

View File

@ -207,9 +207,9 @@ public class OrderServiceImpl implements OrderService {
//如果订单未支付就把商品状态更改成未购买
if (state != OrderStateEnum.PAID.getState()) {
OrderRespVO orderRespVO = orderMapper.getById(orderSn);
Integer goodsType = orderRespVO.getGoodsType();
List<OrderItemVO> orderItemList = orderRespVO.getOrderItemList();
orderItemList.forEach(orderItemVO -> {
Integer goodsType = orderItemVO.getGoodsType();
Long goodsId = orderItemVO.getGoodsId();
if (Objects.equals(goodsType, GoodsTypeEnum.VIDEO.code)) {
VideoEntity videoEntity = new VideoEntity();
@ -225,9 +225,9 @@ public class OrderServiceImpl implements OrderService {
});
} else if (state == OrderStateEnum.REFUNDED.getState()) {//订单退款成功就把商品状态更改成未购买
OrderRespVO orderRespVO = orderMapper.getById(orderSn);
Integer goodsType = orderRespVO.getGoodsType();
List<OrderItemVO> orderItemList = orderRespVO.getOrderItemList();
orderItemList.forEach(orderItemVO -> {
Integer goodsType = orderItemVO.getGoodsType();
Long goodsId = orderItemVO.getGoodsId();
if (Objects.equals(goodsType, GoodsTypeEnum.VIDEO.code)) {
VideoEntity videoEntity = new VideoEntity();

View File

@ -22,5 +22,5 @@ public interface FaceService {
ApiResponse<Integer> deleteByIds(List<Long> ids);
ApiResponse<Integer> update(FaceEntity face);
ApiResponse faceUPload(MultipartFile file);
ApiResponse faceUPload(MultipartFile file,Long scrnicId);
}

View File

@ -71,11 +71,7 @@ public class JwtTokenUtil {
public static JwtInfo getWorker() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
String token = getToken(request);
return parsingToken(token);
}
public static String getToken(HttpServletRequest request) {
String token = request.getHeader("token");
if (StringUtils.isEmpty(token)) {
if (request.getCookies() != null) {
@ -84,8 +80,13 @@ public class JwtTokenUtil {
token = cookie.getValue();
}
}
if(StringUtils.isEmpty(token)){
throw new CheckTokenException("用户未登录或登录状态已过期");
}
}else {
throw new CheckTokenException("用户未登录或登录状态已过期");
}
}
return token;
return parsingToken(token);
}
}

View File

@ -70,4 +70,9 @@
from face
where id = #{id}
</select>
<select id="getByMemberId" resultType="com.ycwl.basic.model.pc.face.resp.FaceRespVO">
select id, member_id, face_url,score, match_sample_ids, first_match_rate, match_result
from face
where member_id = #{memberId}
</select>
</mapper>

View File

@ -12,6 +12,7 @@
<result column="remark" property="remark"/>
<result column="broker_id" property="brokerId"/>
<result column="promo_code" property="promoCode"/>
<result column="goods_type" property="goodsType"/>
<result column="refund_reason" property="refundReason"/>
<result column="refund_status" property="refundStatus"/>
<result column="status" property="status"/>
@ -23,7 +24,6 @@
<collection property="orderItemList" ofType="com.ycwl.basic.model.pc.order.resp.OrderItemVO">
<result column="oiId" property="id"/>
<result column="id" property="orderId"/>
<result column="goods_type" property="goodsType"/>
<result column="goods_id" property="goodsId"/>
<result column="scenicName" property="scenicName"/>
<result column="goodsName" property="goodsName"/>
@ -37,6 +37,7 @@
<result column="price" property="price"/>
<result column="pay_price" property="payPrice"/>
<result column="remark" property="remark"/>
<result column="goods_type" property="goodsType"/>
<result column="refund_reason" property="refundReason"/>
<result column="refund_status" property="refundStatus"/>
<result column="status" property="status"/>
@ -48,7 +49,6 @@
<collection property="orderItemList" ofType="com.ycwl.basic.model.pc.order.resp.OrderItemVO">
<result column="oiId" property="id"/>
<result column="id" property="orderId"/>
<result column="goods_type" property="goodsType"/>
<result column="goods_id" property="goodsId"/>
<result column="scenicName" property="scenicName"/>
<result column="goodsName" property="goodsName"/>
@ -58,13 +58,13 @@
</collection>
</resultMap>
<insert id="add">
insert into `order`(id, member_id, openid,price, pay_price, remark, broker_id, promo_code)
VALUES (#{id}, #{memberId}, #{openid},#{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode})
insert into `order`(id, member_id, openid,price, pay_price, remark, broker_id, promo_code,goods_type,scenic_id)
VALUES (#{id}, #{memberId}, #{openid},#{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode},#{goodsType},#{scenicId})
</insert>
<insert id="addOrderItems">
insert into order_item(id, order_id, goods_type, goods_id) VALUES
insert into order_item(id, order_id, goods_id) VALUES
<foreach collection="orderItems" item="item" index="index" separator=",">
(#{item.id}, #{item.orderId}, #{item.goodsType}, #{item.goodsId})
(#{item.id}, #{item.orderId}, #{item.goodsId})
</foreach>
</insert>
<update id="update">
@ -105,12 +105,12 @@
</delete>
<select id="list" resultMap="PCBaseResultMap">
select o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, oi.goods_type, oi.goods_id
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id
from `order` o
left join member m on o.member_id = m.id
left join order_item oi on o.id = oi.order_id
left join source sr on oi.goods_type='2' and oi.goods_id = sr.id
left join video vd on oi.goods_type='1' and oi.goods_id = vd.id
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
<where>
<if test="id!= null ">
and o.id = #{id}
@ -179,9 +179,9 @@
from `order` o
left join member m on m.id = o.member_id
left join order_item oi on o.id = oi.order_id
left join template t on oi.goods_type='3' and oi.goods_id = t.id
left join source sr on oi.goods_type='2' and oi.goods_id = sr.id
left join video vd on oi.goods_type='1' and oi.goods_id = vd.id
left join template t on o.goods_type='3' and oi.goods_id = t.id
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
where o.id = #{id}
</select>
<select id="getOrderCount" resultType="java.lang.Integer">
@ -189,9 +189,9 @@
from `order` o
left join member m on o.member_id = m.id
left join order_item oi on o.id = oi.order_id
left join template t on oi.goods_type='3' and oi.goods_id = t.id
left join source sr on oi.goods_type='2' and oi.goods_id = sr.id
left join video vd on oi.goods_type='1' and oi.goods_id = vd.id
left join template t on o.goods_type='3' and oi.goods_id = t.id
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
<where>
<if test="id!= null ">
and o.id = #{id}
@ -257,20 +257,23 @@
</select>
<select id="appList" resultMap="AppBaseResultMap">
select o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, oi.goods_type, oi.goods_id,
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id,
sc.name scenicName,
if(oi.goods_type='1',t.name,(select count(1) from order_item oi2 where oi2.order_id=o.id)) as goodsName,
if(oi.goods_type='1',vd.video_url,sr.video_url) videoUrl,
if(oi.goods_type='2',sr.url,null) imgUrl,
if(oi.goods_type='2',sr.type,null) sourceType
if(o.goods_type='1',t.name,(select count(1) from order_item oi2 where oi2.order_id=o.id)) as goodsName,
if(o.goods_type='1',vd.video_url,sr.video_url) videoUrl,
if(o.goods_type='2',sr.url,null) imgUrl,
if(o.goods_type='2',sr.type,null) sourceType
from `order` o
left join member m on o.member_id = m.id
left join order_item oi on o.id = oi.order_id
left join source sr on oi.goods_type='2' and oi.goods_id = sr.id
left join video vd on oi.goods_type='1' and oi.goods_id = vd.id
left join template t on oi.goods_type='1' and vd.template_id=t.id
left join scenic sc on (oi.goods_type='1' and vd.scenic_id=sc.id) or (oi.goods_type='2' and sr.scenic_id=sc.id)
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
left join template t on o.goods_type='1' and vd.template_id=t.id
left join scenic sc on (o.goods_type='1' and vd.scenic_id=sc.id) or (o.goods_type='2' and sr.scenic_id=sc.id)
<where>
<if test="memberId!=null">
and o.member_id=#{memberId}
</if>
<if test="memberNickname!= null and memberNickname!=''">
and m.nickname like concat('%',#{memberNickname},'%')
</if>
@ -327,13 +330,13 @@
</if>
<if test="type!= null ">
<if test="type== 0 ">
and oi.goods_type = 1
and o.goods_type = 1
</if>
<if test="type== 1 ">
and oi.goods_type = 2 and sr.type = 1
and o.goods_type = 2 and sr.type = 1
</if>
<if test="type== 2 ">
and oi.goods_type = 2 and sr.type = 2
and o.goods_type = 2 and sr.type = 2
</if>
</if>
</where>
@ -341,19 +344,19 @@
</select>
<select id="appDetail" resultMap="AppBaseResultMap">
select o.id, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, oi.goods_type, oi.goods_id,
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id,
sc.name scenicName,
if(oi.goods_type='1',t.name,(select count(1) from order_item oi2 where oi2.order_id=o.id)) as goodsName,
if(oi.goods_type='1',vd.video_url,sr.video_url) videoUrl,
if(oi.goods_type='2',sr.url,null) imgUrl,
if(oi.goods_type='2',sr.type,null) sourceType
if(o.goods_type='1',t.name,(select count(1) from order_item oi2 where oi2.order_id=o.id)) as goodsName,
if(o.goods_type='1',vd.video_url,sr.video_url) videoUrl,
if(o.goods_type='2',sr.url,null) imgUrl,
if(o.goods_type='2',sr.type,null) sourceType
from `order` o
left join member m on o.member_id = m.id
left join order_item oi on o.id = oi.order_id
left join source sr on oi.goods_type='2' and oi.goods_id = sr.id
left join video vd on oi.goods_type='1' and oi.goods_id = vd.id
left join template t on oi.goods_type='1' and vd.template_id=t.id
left join scenic sc on (oi.goods_type='1' and vd.scenic_id=sc.id) or (oi.goods_type='2' and sr.scenic_id=sc.id)
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
left join template t on o.goods_type='1' and vd.template_id=t.id
left join scenic sc on (o.goods_type='1' and vd.scenic_id=sc.id) or (o.goods_type='2' and sr.scenic_id=sc.id)
where o.id = #{id}
</select>
</mapper>