gc-core/src/main/java/com/xzx/gc/entity/ScoreExpressInfo.java
@@ -1,5 +1,6 @@ package com.xzx.gc.entity; import com.xzx.gc.common.entity.BaseEntity; import lombok.Data; import javax.persistence.Table; @@ -10,7 +11,7 @@ **/ @Data @Table(name = "xzx_score_express_info") public class ScoreExpressInfo { public class ScoreExpressInfo extends BaseEntity { private String userId; gc-core/src/main/java/com/xzx/gc/entity/ScoreOrder.java
@@ -1,5 +1,6 @@ package com.xzx.gc.entity; import com.xzx.gc.common.entity.BaseEntity; import lombok.Data; import javax.persistence.Table; @@ -11,7 +12,7 @@ **/ @Data @Table(name = "xzx_score_order") public class ScoreOrder { public class ScoreOrder extends BaseEntity { private String orderNo; @@ -19,14 +20,22 @@ private String userId; private String voucherImg; private Integer cnt; private BigDecimal totalPrice; /** * 2-待收货3-已完成4-已取消 * 1-待发货2-待收货3-已收货4-已完成5-已评价6-已取消 */ private Integer status; public static final Integer STATUS_READY = 1; public static final Integer STATUS_ON = 2; public static final Integer STATUS_DOING = 3; public static final Integer STATUS_DONE = 4; public static final Integer STATUS_EVALUATE = 5; public static final Integer STATUS_CANCEL = 6; private String remark; } gc-shop/src/main/java/com/xzx/gc/shop/controller/AdminOrderController.java
@@ -1,13 +1,22 @@ package com.xzx.gc.shop.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.xzx.gc.common.constant.CommonEnum; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.dto.log.OperationAppLog; import com.xzx.gc.common.request.BaseController; import com.xzx.gc.entity.ScoreGoods; import com.xzx.gc.entity.ScoreOrder; import com.xzx.gc.model.JsonResult; import com.xzx.gc.shop.dto.QueryGoodsListDto; import com.xzx.gc.shop.dto.QueryOrderListDto; import com.xzx.gc.shop.dto.*; import com.xzx.gc.shop.mapper.ScoreOrderMapper; import com.xzx.gc.shop.service.OrderService; import com.xzx.gc.shop.vo.QueryGoodsListVo; import com.xzx.gc.shop.vo.QueryOrderListVo; import com.xzx.gc.shop.vo.ViewGoodsVo; import com.xzx.gc.shop.vo.ViewOrderVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -18,6 +27,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @RestController @@ -27,6 +38,8 @@ @Resource private OrderService orderService; @Resource private ScoreOrderMapper scoreOrderMapper; /** * 查询订单列表 @@ -40,4 +53,82 @@ return JsonResult.success(result); } /** * 查询订单详情 */ @PostMapping(Constants.ADMIN_VIEW_PREFIX + "/score/goods/viewOrder.json") @ApiResponses({@ApiResponse( code = 200, message = "success", response = ViewOrderVo.class)}) @ApiOperation(value="订单管理-查询订单详情", notes="test: 仅0有正确返回") public JsonResult<ViewOrderVo> viewOrder(@RequestBody ViewOrderDto viewOrderDto) { Long id = viewOrderDto.getId(); ViewOrderVo viewOrderVo = orderService.viewOrder(id); return JsonResult.success(viewOrderVo); } /** * 发货 */ @PostMapping(Constants.ADMIN_VIEW_PREFIX + "/score/goods/deliverGoods.json") @ApiOperation(value="订单管理-发货", notes="test: 仅0有正确返回") public JsonResult deliverGoods(@RequestBody DeliverGoodsDto model, HttpServletRequest request) { long id = model.getId(); ScoreOrder scoreOrder = scoreOrderMapper.selectByPrimaryKey(id); if(ObjectUtil.isEmpty(scoreOrder)){ return JsonResult.failMessage("订单不存在!"); } Integer status = scoreOrder.getStatus(); if(ScoreOrder.STATUS_READY != status){ return JsonResult.failMessage("当前订单不是代发货状态!"); } String expressCom = model.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return JsonResult.failMessage("物流公司不能为空!"); } String expressNo = model.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return JsonResult.failMessage("快递单号不能为空!"); } Long expressId = orderService.deliverGoods(model); if(expressId > 0){ OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.SCORESHOP_MODUL_NAME).operateAction("订单管理-发货-" + id).build(); mqUtil.sendApp(build); return JsonResult.success("操作成功!"); }else{ return JsonResult.success("操作失败!"); } } /** * 确认提货 */ @PostMapping(Constants.ADMIN_VIEW_PREFIX + "/score/goods/insureOrder.json") @ApiOperation(value="订单管理-确认提货", notes="test: 仅0有正确返回") public JsonResult insureOrder(@RequestBody InsureOrderDto model, HttpServletRequest request) { long id = model.getId(); ScoreOrder scoreOrder = scoreOrderMapper.selectByPrimaryKey(id); if(ObjectUtil.isEmpty(scoreOrder)){ return JsonResult.failMessage("订单不存在!"); } Integer status = scoreOrder.getStatus(); if(ScoreOrder.STATUS_DOING != status){ return JsonResult.failMessage("当前订单不是已收货状态!"); } List<String> voucherImgs = model.getVoucherImgs(); if(CollUtil.isEmpty(voucherImgs)){ return JsonResult.failMessage("凭证不能为空!"); } Long orderId = orderService.insureOrder(model); if(orderId > 0){ OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.SCORESHOP_MODUL_NAME).operateAction("订单管理-确认提货-" + orderId).build(); mqUtil.sendApp(build); return JsonResult.success("操作成功!"); }else{ return JsonResult.success("操作失败!"); } } } gc-shop/src/main/java/com/xzx/gc/shop/dto/DeliverGoodsDto.java
New file @@ -0,0 +1,17 @@ package com.xzx.gc.shop.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class DeliverGoodsDto { @ApiModelProperty(value="订单ID") private Long id; @ApiModelProperty(value="快递单号") private String expressNo; @ApiModelProperty(value="物流公司") private String expressCom; } gc-shop/src/main/java/com/xzx/gc/shop/dto/InsureOrderDto.java
New file @@ -0,0 +1,15 @@ package com.xzx.gc.shop.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class InsureOrderDto { private Long id; @ApiModelProperty(value="凭证") private List<String> voucherImgs; } gc-shop/src/main/java/com/xzx/gc/shop/dto/ScoreGoodsStyleDto.java
@@ -17,6 +17,6 @@ private Long goodsId; @ApiModelProperty(value="积分商品规格") private List<ScoreGoodsSkuDto> scoreGoodsSkuDtos; private List<ScoreGoodsSkuDto> scoreGoodsSkus; } gc-shop/src/main/java/com/xzx/gc/shop/dto/UpdateGoodsDto.java
@@ -68,7 +68,7 @@ private List<String> goodsImages; @ApiModelProperty(value="积分商品样式") private List<ScoreGoodsStyleDto> scoreGoodsStyleDtos; private List<ScoreGoodsStyleDto> scoreGoodsStyles; @ApiModelProperty(value="创建人") private String createdBy; gc-shop/src/main/java/com/xzx/gc/shop/dto/ViewOrderDto.java
New file @@ -0,0 +1,10 @@ package com.xzx.gc.shop.dto; import lombok.Data; @Data public class ViewOrderDto { private Long id; } gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreExpressInfoMapper.java
New file @@ -0,0 +1,7 @@ package com.xzx.gc.shop.mapper; import com.xzx.gc.entity.ScoreExpressInfo; import com.xzx.gc.util.GcMapper; public interface ScoreExpressInfoMapper extends GcMapper<ScoreExpressInfo> { } gc-shop/src/main/java/com/xzx/gc/shop/mapper/ScoreOrderDetailsMapper.java
New file @@ -0,0 +1,7 @@ package com.xzx.gc.shop.mapper; import com.xzx.gc.entity.ScoreOrderDetails; import com.xzx.gc.util.GcMapper; public interface ScoreOrderDetailsMapper extends GcMapper<ScoreOrderDetails> { } gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java
@@ -126,7 +126,7 @@ scoreGoodsStyle.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG)); scoreGoodsStyleMapper.insert(scoreGoodsStyle); //规格信息 List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkuDtos(); List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkus(); if(CollUtil.isNotEmpty(scoreGoodsSkuDtos)){ for(ScoreGoodsSkuDto scoreGoodsSkuDto : scoreGoodsSkuDtos){ ScoreGoodsSku scoreGoodsSku = objectMapper.convertValue(scoreGoodsSkuDto, ScoreGoodsSku.class); @@ -196,11 +196,11 @@ //获取规格 Long styleId = goodsStyle.getId(); List<ScoreGoodsSkuVo> goodsSkus = scoreGoodsSkuMapper.selectScoreGoodsSkuByGoodsIdAndStyleId(id,styleId); scoreGoodsStyleVo.setScoreGoodsSkuVos(goodsSkus); scoreGoodsStyleVo.setScoreGoodsSkus(goodsSkus); scoreGoodsStyleVos.add(scoreGoodsStyleVo); } } viewGoodsVo.setScoreGoodsStyleVos(scoreGoodsStyleVos); viewGoodsVo.setScoreGoodsStyles(scoreGoodsStyleVos); } return viewGoodsVo; } @@ -227,7 +227,7 @@ } } List<ScoreGoodsStyleDto> scoreGoodsStyleDtos = model.getScoreGoodsStyleDtos(); List<ScoreGoodsStyleDto> scoreGoodsStyleDtos = model.getScoreGoodsStyles(); if(CollUtil.isNotEmpty(scoreGoodsStyleDtos)){ for(ScoreGoodsStyleDto scoreGoodsStyleDto : scoreGoodsStyleDtos){ ScoreGoodsStyle scoreGoodsStyle = new ScoreGoodsStyle(); @@ -236,7 +236,7 @@ scoreGoodsStyle.setGoodsId(scoreGoods.getId()); scoreGoodsStyleMapper.updateByPrimaryKeySelective(scoreGoodsStyle); //规格 List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkuDtos(); List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkus(); if(CollUtil.isNotEmpty(scoreGoodsSkuDtos)){ for(ScoreGoodsSkuDto scoreGoodsSkuDto : scoreGoodsSkuDtos){ ScoreGoodsSku scoreGoodsSku = objectMapper.convertValue(scoreGoodsSkuDto, ScoreGoodsSku.class); gc-shop/src/main/java/com/xzx/gc/shop/service/OrderService.java
@@ -1,14 +1,29 @@ package com.xzx.gc.shop.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.entity.ScoreExpressInfo; import com.xzx.gc.entity.ScoreGoodsStyle; import com.xzx.gc.entity.ScoreOrder; import com.xzx.gc.entity.ScoreOrderDetails; import com.xzx.gc.shop.dto.DeliverGoodsDto; import com.xzx.gc.shop.dto.InsureOrderDto; import com.xzx.gc.shop.dto.QueryOrderListDto; import com.xzx.gc.shop.mapper.ScoreExpressInfoMapper; import com.xzx.gc.shop.mapper.ScoreOrderDetailsMapper; import com.xzx.gc.shop.mapper.ScoreOrderMapper; import com.xzx.gc.shop.vo.ExpressInfoVo; import com.xzx.gc.shop.vo.QueryOrderListVo; import com.xzx.gc.shop.vo.ViewOrderVo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import java.util.Date; @@ -23,6 +38,12 @@ @Resource ScoreOrderMapper scoreOrderMapper; @Resource ScoreExpressInfoMapper scoreExpressInfoMapper; @Resource ScoreOrderDetailsMapper scoreOrderDetailsMapper; public Map<String, Object> queryOrderList(QueryOrderListDto model) { String name = model.getName(); @@ -41,4 +62,73 @@ return map; } public ViewOrderVo viewOrder(Long id) { ViewOrderVo viewOrderVo = new ViewOrderVo(); ScoreOrder scoreOrder = scoreOrderMapper.selectByPrimaryKey(id); if(ObjectUtil.isNotEmpty(scoreOrder)){ /** * 获取基本信息 * 获取物流信息 * 获取商品订单详情 */ ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); viewOrderVo = objectMapper.convertValue(scoreOrder, ViewOrderVo.class); //2-待收货3-已收货4-已完成5-已评价,获取物流信息 Integer status = scoreOrder.getStatus() == null ? 0:scoreOrder.getStatus(); if(ScoreOrder.STATUS_DOING == status || ScoreOrder.STATUS_DONE == status || ScoreOrder.STATUS_ON == status || ScoreOrder.STATUS_EVALUATE == status){ Example exampleExpress = new Example(ScoreExpressInfo.class); Example.Criteria criteriaExpress = exampleExpress.createCriteria(); criteriaExpress.andEqualTo("orderId",id); ScoreExpressInfo scoreExpressInfo = scoreExpressInfoMapper.selectOneByExample(exampleExpress); ExpressInfoVo expressInfoVo = objectMapper.convertValue(scoreExpressInfo, ExpressInfoVo.class); viewOrderVo.setExpressInfoVo(expressInfoVo); } //订单详情 Example exampleDetails = new Example(ScoreOrderDetails.class); Example.Criteria criteriaDetails = exampleDetails.createCriteria(); criteriaDetails.andEqualTo("orderId",id); List<ScoreOrderDetails> scoreOrderDetails = scoreOrderDetailsMapper.selectByExample(exampleDetails); if(CollUtil.isNotEmpty(scoreOrderDetails)){ viewOrderVo.setScoreOrderDetails(scoreOrderDetails); } } return viewOrderVo; } public Long deliverGoods(DeliverGoodsDto model) { /** * 获取物流表的信息 * 更新物流信息 * 更新订单状态 */ Long id = model.getId(); Example exampleExpress = new Example(ScoreExpressInfo.class); Example.Criteria criteriaExpress = exampleExpress.createCriteria(); criteriaExpress.andEqualTo("orderId",id); ScoreExpressInfo scoreExpressInfo = scoreExpressInfoMapper.selectOneByExample(exampleExpress); if(ObjectUtil.isNotEmpty(scoreExpressInfo)){ scoreExpressInfo.setExpressNo(model.getExpressNo()); scoreExpressInfo.setExpressCom(model.getExpressCom()); scoreExpressInfoMapper.updateByPrimaryKeySelective(scoreExpressInfo); ScoreOrder scoreOrder = new ScoreOrder(); scoreOrder.setId(id); scoreOrder.setStatus(ScoreOrder.STATUS_ON); scoreOrderMapper.updateByPrimaryKeySelective(scoreOrder); } return scoreExpressInfo.getId(); } public Long insureOrder(InsureOrderDto model) { ScoreOrder scoreOrder = new ScoreOrder(); scoreOrder.setId(model.getId()); scoreOrder.setVoucherImg(model.getVoucherImgs().toString()); scoreOrderMapper.updateByPrimaryKeySelective(scoreOrder); return scoreOrder.getId(); } } gc-shop/src/main/java/com/xzx/gc/shop/vo/ExpressInfoVo.java
New file @@ -0,0 +1,32 @@ package com.xzx.gc.shop.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ViewOrderVo", description = "物流") public class ExpressInfoVo { @ApiModelProperty(value="用户ID") private String userId; @ApiModelProperty(value="联系姓名") private String username; @ApiModelProperty(value="联系电话") private String phone; @ApiModelProperty(value="地址") private String address; @ApiModelProperty(value="快递单号") private String expressNo; @ApiModelProperty(value="物流公司") private String expressCom; @ApiModelProperty(value="订单ID") private Long orderId; } gc-shop/src/main/java/com/xzx/gc/shop/vo/QueryOrderListVo.java
@@ -1,9 +1,29 @@ package com.xzx.gc.shop.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "QueryOrderListVo", description = "返回") public class QueryOrderListVo { @ApiModelProperty(value="订单编号") private String orderNo; @ApiModelProperty(value="客户姓名") private String name; @ApiModelProperty(value="客户手机号") private String phone; @ApiModelProperty(value="下单时间") private String createdTime; @ApiModelProperty(value="订单总价") private String totalPrice; @ApiModelProperty(value="数量") private String cnt; @ApiModelProperty(value="状态 2-待收货3-已完成4-已取消") private String status; @ApiModelProperty(value="物流公司") private String expressCom; @ApiModelProperty(value="物流单号") private String expressNo; } gc-shop/src/main/java/com/xzx/gc/shop/vo/ScoreGoodsStyleVo.java
@@ -19,5 +19,5 @@ private Long goodsId; @ApiModelProperty(value="积分商品规格") private List<ScoreGoodsSkuVo> scoreGoodsSkuVos; private List<ScoreGoodsSkuVo> scoreGoodsSkus; } gc-shop/src/main/java/com/xzx/gc/shop/vo/ViewGoodsVo.java
@@ -72,7 +72,7 @@ private List<String> goodsImages; @ApiModelProperty(value="积分商品样式") private List<ScoreGoodsStyleVo> scoreGoodsStyleVos; private List<ScoreGoodsStyleVo> scoreGoodsStyles; @ApiModelProperty(value="创建人") private String createdBy; gc-shop/src/main/java/com/xzx/gc/shop/vo/ViewOrderVo.java
New file @@ -0,0 +1,52 @@ package com.xzx.gc.shop.vo; import com.xzx.gc.entity.ScoreOrderDetails; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @ApiModel(value = "ViewOrderVo", description = "订单") public class ViewOrderVo { @ApiModelProperty(value="订单编号") private String orderNo; @ApiModelProperty(value="商品名称") private String goodsName; @ApiModelProperty(value="用户ID") private String userId; @ApiModelProperty(value="数量") private Integer cnt; @ApiModelProperty(value="总价") private BigDecimal totalPrice; @ApiModelProperty(value="凭证") private String voucherImg; /** * 2-待收货3-已完成4-已取消 */ @ApiModelProperty(value="状态 2-待收货3-已完成4-已取消") private Integer status; @ApiModelProperty(value="备注") private String remark; @ApiModelProperty(value="物流信息") private ExpressInfoVo expressInfoVo; @ApiModelProperty(value="订单详情信息") private List<ScoreOrderDetails> scoreOrderDetails; } gc-shop/src/main/resources/mapper/shop/ScoreExpressInfoMapper.xml
New file @@ -0,0 +1,5 @@ <?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.xzx.gc.shop.mapper.ScoreExpressInfoMapper"> </mapper> gc-shop/src/main/resources/mapper/shop/ScoreOrderDetailsMapper.xml
New file @@ -0,0 +1,5 @@ <?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.xzx.gc.shop.mapper.ScoreOrderDetailsMapper"> </mapper> gc-shop/src/main/resources/mapper/shop/ScoreOrderMapper.xml
@@ -4,13 +4,24 @@ <select id="queryOrderList" resultType="com.xzx.gc.shop.vo.QueryOrderListVo"> SELECT * a.*, b.name name, b.mobile_phone phone, d.express_com expressCom, d.express_no expressNo, FROM xzx_score_order a left join xzx_user_info b where b.user_id = a.user_id -- left join xzx_score_order_details c where c.order_id = a.id left join xzx_score_express_info d where d.order_id = a.id WHERE 1 = 1 <if test="orderNo != null and orderNo != ''"> and a.order_no like concat('%',#{orderNo},'%') </if> <if test="name != null and name != ''"> and b.name like concat('%',#{name},'%') </if> <if test="status != null and status != ''"> and a.status = #{status} </if> gc-shop/src/main/resources/sql
@@ -50,5 +50,10 @@ ADD COLUMN `category_id` bigint(20) NULL COMMENT '分类ID' AFTER `price_range`, ADD COLUMN `category_name` varchar(100) NULL COMMENT '分类名称' AFTER `category_id`; ALTER TABLE `xzx_score_order` ADD COLUMN `voucher_img` varchar(500) NULL COMMENT '凭证' AFTER `remark`;