gc-core/src/main/java/com/xzx/gc/entity/ScoreExpressInfo.java
@@ -10,7 +10,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
@@ -19,6 +19,8 @@ private String userId; private String voucherImg; private Integer cnt; private BigDecimal totalPrice; @@ -27,6 +29,10 @@ * 2-待收货3-已完成4-已取消 */ private Integer status; public static final Integer STATUS_READY = 1; public static final Integer STATUS_ING = 2; public static final Integer STATUS_DONE = 3; public static final Integer STATUS_CANCEL = 4; private String remark; } gc-shop/src/main/java/com/xzx/gc/shop/controller/AdminOrderController.java
@@ -1,13 +1,21 @@ package com.xzx.gc.shop.controller; 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 +26,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Map; @RestController @@ -27,6 +36,8 @@ @Resource private OrderService orderService; @Resource private ScoreOrderMapper scoreOrderMapper; /** * 查询订单列表 @@ -40,4 +51,48 @@ 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("快递单号不能为空!"); } orderService.deliverGoods(model); OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.SCORESHOP_MODUL_NAME).operateAction("订单管理-发货-" + id).build(); mqUtil.sendApp(build); 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/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,28 @@ 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.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 +37,12 @@ @Resource ScoreOrderMapper scoreOrderMapper; @Resource ScoreExpressInfoMapper scoreExpressInfoMapper; @Resource ScoreOrderDetailsMapper scoreOrderDetailsMapper; public Map<String, Object> queryOrderList(QueryOrderListDto model) { String name = model.getName(); @@ -41,4 +61,58 @@ 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-已完成,获取物流信息 Integer status = scoreOrder.getStatus() == null ? 0:scoreOrder.getStatus(); if(ScoreOrder.STATUS_ING == status || ScoreOrder.STATUS_DONE == 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 void 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); scoreExpressInfo.setExpressNo(model.getExpressNo()); scoreExpressInfo.setExpressCom(model.getExpressCom()); scoreExpressInfoMapper.updateByPrimaryKeySelective(scoreExpressInfo); ScoreOrder scoreOrder = scoreOrderMapper.selectByPrimaryKey(id); scoreOrder.setStatus(ScoreOrder.STATUS_ING); scoreOrderMapper.updateByPrimaryKeySelective(scoreOrder); } } 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`;