修改goods和order模块

This commit is contained in:
fxh 2025-06-09 11:41:28 +08:00
parent 114840f26d
commit bc3b62dd96
110 changed files with 6890 additions and 2352 deletions

View File

@ -144,6 +144,19 @@ tenant:
- ums_member_account
- ums_member_logininfor
- ums_member_cart
- oms_aftersale
- oms_aftersale_item
- oms_order
- oms_order_delivery_history
- oms_order_item
- oms_order_operate_history
- oms_wechat_payment_history
- pms_brand
- pms_product
- pms_product_category
- pms_product_snapshot
- pms_sku
- pms_sku_snapshot
# MyBatisPlus配置
# https://baomidou.com/config/

View File

@ -1,5 +1,7 @@
package org.dromara.common.core.utils.file;
import cn.hutool.core.util.StrUtil;
/**
* 媒体类型工具类
*
@ -37,4 +39,29 @@ public class MimeTypeUtils {
// pdf
"pdf"};
public static String getExtension(String prefix)
{
switch (prefix)
{
case IMAGE_PNG:
return "png";
case IMAGE_JPG:
return "jpg";
case IMAGE_JPEG:
return "jpeg";
case IMAGE_BMP:
return "bmp";
case IMAGE_GIF:
return "gif";
default:
return "";
}
}
public static boolean isImg(String contentType) {
String ext = MimeTypeUtils.getExtension(contentType);
return StrUtil.isNotEmpty(ext);
}
}

View File

@ -1,9 +1,6 @@
package org.dromara.common.web.core;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.mapstruct.MapperConfig;
import java.util.List;
@ -19,6 +16,7 @@ public interface BaseConverter<V,B,T> {
/**
* dto列表转vo
*
* @param tList
* @return
*/

View File

@ -1,21 +1,22 @@
package com.wzj.soopin.goods.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.goods.convert.BrandConvert;
import com.wzj.soopin.goods.domain.bo.BrandBo;
import com.wzj.soopin.goods.domain.entity.Brand;
import com.wzj.soopin.goods.domain.query.BrandQuery;
import com.wzj.soopin.goods.domain.vo.BrandVO;
import com.wzj.soopin.goods.service.BrandService;
import com.wzj.soopin.goods.service.impl.BrandServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -31,55 +32,51 @@ import java.util.List;
@RequestMapping("/pms/brand")
public class BrandController extends BaseController {
@Autowired
private BrandService service;
private BrandServiceImpl service;
@Autowired
private BrandConvert convert;
// @ApiOperation("查询品牌管理列表")
// @PostMapping("/list")
// public ResponseEntity<Page<Brand>> list(@RequestBody BrandQuery query, Pageable page) {
// List<Brand> list = service.selectList(query, page);
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("所有品牌管理列表")
@PostMapping("/all")
public ResponseEntity<List<Brand>> all(@RequestBody BrandQuery query) {
return ResponseEntity.ok(service.selectList(query, null));
@PostMapping("list")
public R<Page<BrandVO>> list(@RequestBody BrandBo query, Page<Brand> page) {
Page<Brand> brandPage = service.page(page,query.toWrapper());
return R.ok(convert.toVO(brandPage));
}
@ApiOperation("导出品牌管理列表")
@Log(title = "品牌管理", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(BrandQuery query) {
List<Brand> list = service.selectList(query, null);
ExcelUtil<BrandVO> util = new ExcelUtil(BrandVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "品牌管理数据"));
@GetMapping("export")
public ResponseEntity<String> export(BrandBo query) {
List<Brand> list = service.list(query.toWrapper());
ExcelUtil<BrandVO> util = new ExcelUtil<>(BrandVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "品牌管理数据"));
}
@ApiOperation("获取品牌管理详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<Brand> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增品牌管理")
@Log(title = "品牌管理", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody Brand brand) {
return ResponseEntity.ok(service.insert(brand));
@PostMapping("/add")
public R add(@RequestBody Brand brand) {
return R.ok(service.save(brand));
}
@ApiOperation("修改品牌管理")
@Log(title = "品牌管理", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody Brand brand) {
return ResponseEntity.ok(service.update(brand));
@PostMapping("/update")
public R edit(@RequestBody Brand brand) {
return R.ok(service.updateById(brand));
}
@ApiOperation("删除品牌管理")
@Log(title = "品牌管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,12 +1,18 @@
package com.wzj.soopin.goods.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.goods.convert.ProductCategoryConvert;
import com.wzj.soopin.goods.domain.bo.BrandBo;
import com.wzj.soopin.goods.domain.bo.ProductCategoryBo;
import com.wzj.soopin.goods.domain.entity.Brand;
import com.wzj.soopin.goods.domain.entity.ProductCategory;
import com.wzj.soopin.goods.domain.query.ProductCategoryQuery;
import com.wzj.soopin.goods.domain.vo.BrandVO;
import com.wzj.soopin.goods.domain.vo.ProductCategoryVO;
import com.wzj.soopin.goods.service.ProductCategoryService;
import com.wzj.soopin.goods.service.impl.ProductCategoryServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
@ -27,41 +33,41 @@ import java.util.List;
@RequestMapping("/pms/productCategory")
public class ProductCategoryController extends BaseController {
@Autowired
private ProductCategoryService service;
private ProductCategoryServiceImpl service;
@Autowired
private ProductCategoryConvert convert;
@ApiOperation("查询商品分类列表")
@PostMapping("/list")
public ResponseEntity<List<ProductCategoryVO>> list(@RequestBody ProductCategoryQuery query) {
List<ProductCategoryVO> list = service.selectList(query, null);
return ResponseEntity.ok(list);
@PostMapping("list")
public R<Page<ProductCategoryVO>> list(@RequestBody ProductCategoryBo query, Page<ProductCategory> page) {
Page<ProductCategory> productCategoryPage = service.page(page,query.toWrapper());
return R.ok(convert.toVO(productCategoryPage));
}
@ApiOperation("获取商品分类详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<ProductCategory> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增商品分类")
@Log(title = "商品分类", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody ProductCategory productCategory) {
return ResponseEntity.ok(service.insert(productCategory));
@PostMapping("/add")
public R add(@RequestBody ProductCategory productCategory) {
return R.ok(service.save(productCategory));
}
@ApiOperation("修改商品分类")
@Log(title = "商品分类", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody ProductCategory productCategory) {
return ResponseEntity.ok(service.update(productCategory));
@PostMapping("/update")
public R edit(@RequestBody ProductCategory productCategory) {
return R.ok(service.updateById(productCategory));
}
@ApiOperation("删除商品分类")
@Log(title = "商品分类", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,21 +1,27 @@
package com.wzj.soopin.goods.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.goods.convert.ProductConvert;
import com.wzj.soopin.goods.domain.bo.BrandBo;
import com.wzj.soopin.goods.domain.bo.ProductBo;
import com.wzj.soopin.goods.domain.bo.ProductCategoryBo;
import com.wzj.soopin.goods.domain.entity.Brand;
import com.wzj.soopin.goods.domain.entity.Product;
import com.wzj.soopin.goods.domain.entity.ProductCategory;
import com.wzj.soopin.goods.domain.query.ProductQuery;
import com.wzj.soopin.goods.domain.vo.BrandVO;
import com.wzj.soopin.goods.domain.vo.ProductCategoryVO;
import com.wzj.soopin.goods.domain.vo.ProductVO;
import com.wzj.soopin.goods.service.ProductService;
import com.wzj.soopin.goods.service.impl.ProductServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -31,50 +37,52 @@ import java.util.List;
@RequestMapping("/pms/product")
public class ProductController extends BaseController {
@Autowired
private ProductService service;
private ProductServiceImpl service;
@Autowired
private ProductConvert convert;
// @ApiOperation("查询商品信息列表")
// @PostMapping("/list")
// public ResponseEntity<Page<Product>> list(@RequestBody ProductQuery query, Pageable page) {
// List<Product> list = service.selectList(query, page);
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询商品信息列表")
@PostMapping("list")
public R<Page<ProductVO>> list(@RequestBody ProductBo query, Page<Product> page) {
Page<Product> productPage = service.page(page,query.toWrapper());
return R.ok(convert.toVO(productPage));
}
@ApiOperation("导出商品信息列表")
@Log(title = "商品信息", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(ProductQuery query) {
List<Product> list = service.selectList(query, null);
ExcelUtil<ProductVO> util = new ExcelUtil(ProductVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "商品信息数据"));
@GetMapping("export")
public ResponseEntity<String> export(ProductBo query) {
List<Product> list = service.list(query.toWrapper());
ExcelUtil<ProductVO> util = new ExcelUtil<>(ProductVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "商品信息数据"));
}
@ApiOperation("获取商品信息详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<ProductVO> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增商品信息")
@Log(title = "商品信息", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody ProductVO product) {
return ResponseEntity.ok(service.insert(product));
@PostMapping("/add")
public R add(@RequestBody Product product) {
return R.ok(service.save(product));
}
@ApiOperation("修改商品信息")
@Log(title = "商品信息", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody ProductVO product) {
return ResponseEntity.ok(service.update(product));
@PostMapping("/update")
public R edit(@RequestBody Product product) {
return R.ok(service.updateById(product));
}
@ApiOperation("删除商品信息")
@Log(title = "商品信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,20 +1,23 @@
package com.wzj.soopin.goods.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.goods.convert.SkuConvert;
import com.wzj.soopin.goods.domain.bo.ProductBo;
import com.wzj.soopin.goods.domain.bo.SkuBo;
import com.wzj.soopin.goods.domain.entity.Product;
import com.wzj.soopin.goods.domain.entity.Sku;
import com.wzj.soopin.goods.domain.query.SkuQuery;
import com.wzj.soopin.goods.domain.vo.ProductVO;
import com.wzj.soopin.goods.domain.vo.SkuVO;
import com.wzj.soopin.goods.service.SkuService;
import com.wzj.soopin.goods.service.impl.SkuServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -30,50 +33,52 @@ import java.util.List;
@RequestMapping("/pms/sku")
public class SkuController extends BaseController {
@Autowired
private SkuService service;
private SkuServiceImpl service;
@Autowired
private SkuConvert convert;
// @ApiOperation("查询sku信息列表")
// @PostMapping("/list")
// public ResponseEntity<Page<Sku>> list(@RequestBody SkuQuery query, Pageable page) {
// List<Sku> list = service.selectList(query, page);
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询商品信息列表")
@PostMapping("list")
public R<Page<SkuVO>> list(@RequestBody SkuBo query, Page<Sku> page) {
Page<Sku> skuPage = service.page(page,query.toWrapper());
return R.ok(convert.toVO(skuPage));
}
@ApiOperation("导出sku信息列表")
@Log(title = "sku信息", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(SkuQuery query) {
List<Sku> list = service.selectList(query, null);
@GetMapping("export")
public ResponseEntity<String> export(SkuBo query) {
List<Sku> list = service.list(query.toWrapper());
ExcelUtil<SkuVO> util = new ExcelUtil<>(SkuVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "sku信息数据"));
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "sku信息数据"));
}
@ApiOperation("获取sku信息详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<Sku> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增sku信息")
@Log(title = "sku信息", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody Sku sku) {
return ResponseEntity.ok(service.insert(sku));
@PostMapping("/add")
public R add(@RequestBody Sku sku) {
return R.ok(service.save(sku));
}
@ApiOperation("修改sku信息")
@Log(title = "sku信息", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody Sku sku) {
return ResponseEntity.ok(service.update(sku));
@PostMapping("/update")
public R edit(@RequestBody Sku sku) {
return R.ok(service.updateById(sku));
}
@ApiOperation("删除sku信息")
@Log(title = "sku信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,7 +1,9 @@
package com.wzj.soopin.goods.convert;
import com.wzj.soopin.goods.domain.bo.BrandBo;
import com.wzj.soopin.goods.domain.entity.Brand;
import com.wzj.soopin.goods.domain.vo.BrandVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import java.util.List;
@ -11,7 +13,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface BrandConvert {
public interface BrandConvert extends BaseConverter<BrandVO, BrandBo,Brand> {
List<BrandVO> dos2vos(List<Brand> list);
// List<BrandVO> dos2vos(List<Brand> list);
}

View File

@ -1,8 +1,10 @@
package com.wzj.soopin.goods.convert;
import com.wzj.soopin.goods.domain.bo.ProductCategoryBo;
import com.wzj.soopin.goods.domain.dto.CategoryDTO;
import com.wzj.soopin.goods.domain.entity.ProductCategory;
import com.wzj.soopin.goods.domain.vo.ProductCategoryVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import java.util.List;
@ -12,9 +14,9 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface ProductCategoryConvert {
public interface ProductCategoryConvert extends BaseConverter<ProductCategoryVO, ProductCategoryBo, ProductCategory> {
List<ProductCategoryVO> dos2vos(List<ProductCategory> list);
CategoryDTO do2dto(ProductCategory it);
// List<ProductCategoryVO> dos2vos(List<ProductCategory> list);
//
// CategoryDTO do2dto(ProductCategory it);
}

View File

@ -1,10 +1,12 @@
package com.wzj.soopin.goods.convert;
import com.wzj.soopin.goods.domain.bo.ProductBo;
import com.wzj.soopin.goods.domain.entity.Product;
import com.wzj.soopin.goods.domain.vo.H5ProductVO;
import com.wzj.soopin.goods.domain.vo.ProductVO;
import org.apache.poi.ss.formula.functions.T;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import java.util.List;
@ -14,11 +16,11 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface ProductConvert {
public interface ProductConvert extends BaseConverter<ProductVO, ProductBo, Product> {
List<ProductVO> dos2vos(List<Product> list);
Product vo2do(ProductVO productVO);
ProductVO do2vo(Product product);
List<H5ProductVO> dos2dtos(List<Product> products);
// List<ProductVO> dos2vos(List<Product> list);
// Product vo2do(ProductVO productVO);
// ProductVO do2vo(Product product);
//
// List<H5ProductVO> dos2dtos(List<Product> products);
}

View File

@ -1,7 +1,9 @@
package com.wzj.soopin.goods.convert;
import com.wzj.soopin.goods.domain.bo.SkuBo;
import com.wzj.soopin.goods.domain.entity.Sku;
import com.wzj.soopin.goods.domain.vo.SkuVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import java.util.List;
@ -11,7 +13,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface SkuConvert {
public interface SkuConvert extends BaseConverter<SkuVO, SkuBo, Sku> {
List<SkuVO> dos2vos(List<Sku> list);
// List<SkuVO> dos2vos(List<Sku> list);
}

View File

@ -0,0 +1,48 @@
package com.wzj.soopin.goods.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.goods.domain.entity.Brand;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(description="品牌管理 查询 对象")
public class BrandBo {
@ApiModelProperty("NAME 精确匹配")
private String nameLike;
@ApiModelProperty("SORT 精确匹配")
private Integer sort;
@ApiModelProperty("SHOW_STATUS 精确匹配")
private Integer showStatus;
@ApiModelProperty("品牌logo 精确匹配")
private String logo;
public Wrapper<Brand> toWrapper() {
LambdaQueryWrapper<Brand> queryWrapper = new LambdaQueryWrapper<>();
if (nameLike != null && !nameLike.isEmpty()) {
queryWrapper.like(Brand::getName, nameLike);
}
// 精确匹配字段
if (sort != null) {
queryWrapper.eq(Brand::getSort, sort);
}
if (showStatus != null) {
queryWrapper.eq(Brand::getShowStatus, showStatus);
}
if (logo != null && !logo.isEmpty()) {
queryWrapper.eq(Brand::getLogo, logo);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,148 @@
package com.wzj.soopin.goods.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.wzj.soopin.goods.domain.entity.Product;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(description = "商品信息 查询 对象")
public class ProductBo {
@ApiModelProperty("BRAND_ID 精确匹配")
private Long brandId;
@ApiModelProperty("CATEGORY_ID 精确匹配")
private Long categoryId;
@ApiModelProperty("商品编码 精确匹配")
private String outProductId;
@ApiModelProperty("NAME 模糊匹配")
private String nameLike;
@ApiModelProperty("主图 精确匹配")
private String pic;
@ApiModelProperty("画册图片连产品图片限制为5张以逗号分割 精确匹配")
private String albumPics;
@ApiModelProperty("上架状态0->下架1->上架 精确匹配")
private Integer publishStatus;
@ApiModelProperty("排序 精确匹配")
private Integer sort;
@ApiModelProperty("PRICE 精确匹配")
private BigDecimal price;
@ApiModelProperty("单位 精确匹配")
private String unit;
@ApiModelProperty(name = "商品销售属性json格式")
private String productAttr;
@ApiModelProperty("商品重量,默认为克 精确匹配")
private BigDecimal weight;
@ApiModelProperty("产品详情网页内容 精确匹配")
private String detailHtml;
@ApiModelProperty("移动端网页详情 精确匹配")
private String detailMobileHtml;
@ApiModelProperty("品牌名称 模糊匹配")
private String brandNameLike;
@ApiModelProperty("商品分类名称 模糊匹配")
private String productCategoryNameLike;
@ApiModelProperty("排序字段")
private String orderField = "sort";
@ApiModelProperty("排序规则")
private String orderSort = "desc";
@ApiModelProperty("搜索关键字")
private String search;
// 排查的id
private List<Long> excludeProductIds;
private List<Long> ids;
public Wrapper<Product> toWrapper() {
LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
// 精确匹配字段
if (brandId != null) {
queryWrapper.eq(Product::getBrandId, brandId);
}
if (categoryId != null) {
queryWrapper.eq(Product::getCategoryId, categoryId);
}
if (outProductId != null && !outProductId.isEmpty()) {
queryWrapper.eq(Product::getOutProductId, outProductId);
}
if (pic != null && !pic.isEmpty()) {
queryWrapper.eq(Product::getPic, pic);
}
if (albumPics != null && !albumPics.isEmpty()) {
queryWrapper.eq(Product::getAlbumPics, albumPics);
}
if (publishStatus != null) {
queryWrapper.eq(Product::getPublishStatus, publishStatus);
}
if (sort != null) {
queryWrapper.eq(Product::getSort, sort);
}
if (price != null) {
queryWrapper.eq(Product::getPrice, price);
}
if (unit != null && !unit.isEmpty()) {
queryWrapper.eq(Product::getUnit, unit);
}
if (productAttr != null && !productAttr.isEmpty()) {
queryWrapper.eq(Product::getProductAttr, productAttr);
}
if (weight != null) {
queryWrapper.eq(Product::getWeight, weight);
}
if (detailHtml != null && !detailHtml.isEmpty()) {
queryWrapper.eq(Product::getDetailHtml, detailHtml);
}
if (detailMobileHtml != null && !detailMobileHtml.isEmpty()) {
queryWrapper.eq(Product::getDetailMobileHtml, detailMobileHtml);
}
// 模糊匹配字段
if (nameLike != null && !nameLike.isEmpty()) {
queryWrapper.like(Product::getName, nameLike);
}
if (brandNameLike != null && !brandNameLike.isEmpty()) {
queryWrapper.like(Product::getBrandName, brandNameLike);
}
if (productCategoryNameLike != null && !productCategoryNameLike.isEmpty()) {
queryWrapper.like(Product::getProductCategoryName, productCategoryNameLike);
}
// 排除ID列表
if (excludeProductIds != null && !excludeProductIds.isEmpty()) {
queryWrapper.notIn(Product::getId, excludeProductIds);
}
// 指定ID列表
if (ids != null && !ids.isEmpty()) {
queryWrapper.in(Product::getId, ids);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,66 @@
package com.wzj.soopin.goods.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.goods.domain.entity.ProductCategory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(description="商品分类 查询 对象")
public class ProductCategoryBo {
@ApiModelProperty("上级分类的编号0表示一级分类 精确匹配")
private Long parentId;
@ApiModelProperty("NAME 精确匹配")
private String nameLike;
@ApiModelProperty("分类级别0->1级1->2级 精确匹配")
private Integer level;
@ApiModelProperty("显示状态0->不显示1->显示 精确匹配")
private Integer showStatus;
@ApiModelProperty("SORT 精确匹配")
private Integer sort;
@ApiModelProperty("图标 精确匹配")
private String icon;
public Wrapper<ProductCategory> toWrapper() {
LambdaQueryWrapper<ProductCategory> queryWrapper = new LambdaQueryWrapper<>();
// 精确匹配字段
if (parentId != null) {
queryWrapper.eq(ProductCategory::getParentId, parentId);
}
if (level != null) {
queryWrapper.eq(ProductCategory::getLevel, level);
}
if (showStatus != null) {
queryWrapper.eq(ProductCategory::getShowStatus, showStatus);
}
if (sort != null) {
queryWrapper.eq(ProductCategory::getSort, sort);
}
if (icon != null && !icon.isEmpty()) {
queryWrapper.eq(ProductCategory::getIcon, icon);
}
// 模糊匹配字段
if (nameLike != null && !nameLike.isEmpty()) {
queryWrapper.like(ProductCategory::getName, nameLike);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,54 @@
package com.wzj.soopin.goods.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.goods.domain.entity.Sku;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(description="sku信息 查询 对象")
public class SkuBo {
@ApiModelProperty("PRODUCT_ID 精确匹配")
private Long productId;
@ApiModelProperty("sku编码 精确匹配")
private String outSkuId;
@ApiModelProperty("PRICE 精确匹配")
private BigDecimal price;
@ApiModelProperty("展示图片 精确匹配")
private String pic;
@ApiModelProperty("商品销售属性json格式 精确匹配")
private String spData;
public Wrapper<Sku> toWrapper() {
LambdaQueryWrapper<Sku> queryWrapper = new LambdaQueryWrapper<>();
// 精确匹配字段
if (productId != null) {
queryWrapper.eq(Sku::getProductId, productId);
}
if (outSkuId != null && !outSkuId.isEmpty()) {
queryWrapper.eq(Sku::getOutSkuId, outSkuId);
}
if (price != null) {
queryWrapper.eq(Sku::getPrice, price);
}
if (pic != null && !pic.isEmpty()) {
queryWrapper.eq(Sku::getPic, pic);
}
if (spData != null && !spData.isEmpty()) {
queryWrapper.eq(Sku::getSpData, spData);
}
return queryWrapper;
}
}

View File

@ -1,99 +1,7 @@
package com.wzj.soopin.goods.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.goods.domain.entity.Brand;
import com.wzj.soopin.goods.domain.query.BrandQuery;
import com.wzj.soopin.goods.mapper.BrandMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* 品牌管理Service业务层处理
*
*
* @author zcc
*/
@Service
public class BrandService {
@Autowired
private BrandMapper brandMapper;
/**
* 查询品牌管理
*
* @param id 品牌管理主键
* @return 品牌管理
*/
public Brand selectById(Long id) {
return brandMapper.selectById(id);
}
/**
* 查询品牌管理列表
*
* @param query 查询条件
* @param page 分页条件
* @return 品牌管理
*/
public List<Brand> selectList(BrandQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<Brand> qw = new QueryWrapper<>();
String nameLike = query.getNameLike();
if (!StringUtils.isEmpty(nameLike)) {
qw.like("name", nameLike);
}
Integer sort = query.getSort();
if (sort != null) {
qw.eq("sort", sort);
}
Integer showStatus = query.getShowStatus();
if (showStatus != null) {
qw.eq("show_status", showStatus);
}
String logo = query.getLogo();
if (!StringUtils.isEmpty(logo)) {
qw.eq("logo", logo);
}
qw.orderByAsc("sort");
return brandMapper.selectList(qw);
}
/**
* 新增品牌管理
*
* @param brand 品牌管理
* @return 结果
*/
public int insert(Brand brand) {
brand.setCreateTime(LocalDateTime.now());
return brandMapper.insert(brand);
}
/**
* 修改品牌管理
*
* @param brand 品牌管理
* @return 结果
*/
public int update(Brand brand) {
return brandMapper.updateById(brand);
}
/**
* 删除品牌管理信息
*
* @param id 品牌管理主键
* @return 结果
*/
public int deleteById(Long id) {
return brandMapper.deleteById(id);
}
public interface BrandService extends IService<Brand> {
}

View File

@ -1,245 +1,7 @@
package com.wzj.soopin.goods.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.goods.convert.ProductCategoryConvert;
import com.wzj.soopin.goods.convert.ProductConvert;
import com.wzj.soopin.goods.domain.dto.CategoryDTO;
import com.wzj.soopin.goods.domain.entity.Product;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.goods.domain.entity.ProductCategory;
import com.wzj.soopin.goods.domain.query.ProductCategoryQuery;
import com.wzj.soopin.goods.domain.vo.ProductCategoryVO;
import com.wzj.soopin.goods.mapper.ProductCategoryMapper;
import com.wzj.soopin.goods.mapper.ProductMapper;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.exception.base.BaseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 商品分类Service业务层处理
*
* @author zcc
*/
@Service
public class ProductCategoryService {
@Autowired
private ProductCategoryMapper productCategoryMapper;
@Autowired
private ProductMapper productMapper;
@Autowired
private ProductCategoryConvert convert;
@Autowired
private ProductConvert productConvert;
/**
* 查询商品分类
*
* @param id 商品分类主键
* @return 商品分类
*/
public ProductCategory selectById(Long id) {
return productCategoryMapper.selectById(id);
}
/**
* 查询商品分类列表
*
* @param query 查询条件
* @param page 分页条件
* @return 商品分类
*/
public List<ProductCategoryVO> selectList(ProductCategoryQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<ProductCategory> qw = new QueryWrapper<>();
Long parentId = query.getParentId();
if (parentId != null) {
qw.eq("parent_id", parentId);
}
String nameLike = query.getNameLike();
if (!StringUtils.isEmpty(nameLike)) {
qw.like("name", nameLike);
}
Integer level = query.getLevel();
if (level != null) {
qw.eq("level", level);
}
Integer showStatus = query.getShowStatus();
if (showStatus != null) {
qw.eq("show_status", showStatus);
}
Integer sort = query.getSort();
if (sort != null) {
qw.eq("sort", sort);
}
String icon = query.getIcon();
if (!StringUtils.isEmpty(icon)) {
qw.eq("icon", icon);
}
qw.orderByAsc("sort");
List<ProductCategory> productCategories = productCategoryMapper.selectList(qw);
List<ProductCategoryVO> productCategoryVOS = convert.dos2vos(productCategories);
return formatTree(productCategoryVOS);
}
private List<ProductCategoryVO> formatTree(List<ProductCategoryVO> nodes) {
List<ProductCategoryVO> tree = new ArrayList<>();
List<ProductCategoryVO> children = new ArrayList<>();
// 1先获取到所有根节点
for (ProductCategoryVO node : nodes) {
if (node.getParentId() == null || node.getParentId() == 0) {
tree.add(node);
} else {
children.add(node);
}
}
// 2把所有除根结点外的节点作为子节点然后遍历每一个根节点
for (ProductCategoryVO node : tree) {
// 3递归构建此根的子节点
recur(node, children);
}
return tree;
}
private void recur(ProductCategoryVO rootNode, List<ProductCategoryVO> children) {
// 1遍历剩余子节点找出当前根的子节点
for (ProductCategoryVO node : children) {
// 2如果子节点的父id等于根节点的id那么就将这个节点加到根节点的children列表中
if (rootNode.getId() == node.getParentId()) {
if (rootNode.getChildren() == null) {
rootNode.setChildren(new ArrayList<>());
}
rootNode.getChildren().add(node);
// 3以当前节点作为根节点进行递归检查是否还有子节点
recur(node, children);
}
}
}
/**
* 新增商品分类
*
* @param productCategory 商品分类
* @return 结果
*/
public int insert(ProductCategory productCategory) {
productCategory.setCreateTime(LocalDateTime.now());
return productCategoryMapper.insert(productCategory);
}
/**
* 修改商品分类
*
* @param productCategory 商品分类
* @return 结果
*/
public int update(ProductCategory productCategory) {
return productCategoryMapper.updateById(productCategory);
}
/**
* 删除商品分类信息
*
* @param id 商品分类主键
* @return 结果
*/
public int deleteById(Long id) {
return productCategoryMapper.deleteById(id);
}
public List<CategoryDTO> queryCategoryWithProductsForH5() {
QueryWrapper<ProductCategory> qw1 = new QueryWrapper<>();
// qw1.eq("level", 0);
qw1.eq("show_status", 1);
Page<ProductCategory> pageReq = new Page<>();
pageReq.setCurrent(1L)
.setSize(10)
.setOrders(Collections.singletonList(OrderItem.desc("sort")));
List<ProductCategory> categories = productCategoryMapper.selectPage(pageReq, qw1).getRecords();
if (CollUtil.isEmpty(categories)) {
return Collections.emptyList();
}
;
return categories.stream().map(it -> {
CategoryDTO dto = convert.do2dto(it);
// 寻找该分类下的所有子类
List<Long> allChildCate = queryAllChildCate(Collections.singletonList(it.getId()), 0);
QueryWrapper<Product> qw = new QueryWrapper<>();
qw.select("id", "pic", "name", "price", "category_id");
qw.in("category_id", allChildCate);
qw.le("sort", 100);
List<Product> categoryId2List = productMapper.selectList(qw);
dto.setProductList(productConvert.dos2dtos(categoryId2List));
return dto;
}).collect(Collectors.toList());
}
private List<Long> queryAllChildCate(List<Long> categoryIds, int level) {
List<Long> res = new ArrayList<>();
QueryWrapper<ProductCategory> qw = new QueryWrapper<>();
qw.select("id");
List<Long> ids = categoryIds;
while (true) {
qw.clear();
qw.in("parent_id", ids);
qw.eq("level", level + 1);
qw.eq("show_status", 1);
ids = productCategoryMapper.selectList(qw).stream().map(ProductCategory::getId).collect(Collectors.toList());
if (CollUtil.isEmpty(ids)) {
break;
}
res.addAll(ids);
level++;
}
res.addAll(categoryIds);
return res;
}
public List<ProductCategory> h5Categories() {
QueryWrapper<ProductCategory> qw = new QueryWrapper<>();
qw.select("id", "parent_id", "name", "level", "sort", "icon");
qw.eq("show_status", 1);
// qw.le("level", 2);
return productCategoryMapper.selectList(qw);
}
public List<ProductCategory> getBrotherAndChild(Long id, boolean withChild) {
ProductCategory category = productCategoryMapper.selectById(id);
if (category == null) {
throw new BaseException("参数错误");
}
LambdaQueryWrapper<ProductCategory> qw = new LambdaQueryWrapper<>();
qw.eq(ProductCategory::getParentId, category.getParentId());
qw.eq(ProductCategory::getLevel, category.getLevel());
qw.eq(ProductCategory::getShowStatus, 1);
qw.select(ProductCategory::getId, ProductCategory::getParentId, ProductCategory::getName, ProductCategory::getLevel, ProductCategory::getSort, ProductCategory::getIcon);
List<ProductCategory> res = productCategoryMapper.selectList(qw);
if (withChild) {
qw.clear();
qw.eq(ProductCategory::getParentId, category.getId());
qw.eq(ProductCategory::getLevel, category.getLevel() + 1);
qw.eq(ProductCategory::getShowStatus, 1);
List<ProductCategory> childs = productCategoryMapper.selectList(qw);
res.addAll(childs);
}
if (category.getParentId() != null && category.getParentId() != -1) {
res.add(productCategoryMapper.selectById(category.getParentId()));
}
return res;
}
public interface ProductCategoryService extends IService<ProductCategory> {
}

View File

@ -1,210 +1,7 @@
package com.wzj.soopin.goods.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wzj.soopin.goods.convert.ProductConvert;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.goods.domain.entity.Product;
import com.wzj.soopin.goods.domain.entity.Sku;
import com.wzj.soopin.goods.domain.query.ProductQuery;
import com.wzj.soopin.goods.domain.vo.ProductDetailVO;
import com.wzj.soopin.goods.domain.vo.ProductVO;
import com.wzj.soopin.goods.mapper.BrandMapper;
import com.wzj.soopin.goods.mapper.ProductMapper;
import com.wzj.soopin.goods.mapper.SkuMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 商品信息Service业务层处理
*
*
* @author zcc
*/
@Service
@Slf4j
public class ProductService {
@Autowired
private ProductMapper productMapper;
@Autowired
private SkuMapper skuMapper;
@Autowired
private BrandMapper brandMapper;
@Autowired
private ProductConvert convert;
/**
* 查询商品信息
*
* @param id 商品信息主键
* @return 商品信息
*/
public ProductVO selectById(Long id) {
Product product = productMapper.selectById(id);
ProductVO productVO = convert.do2vo(product);
QueryWrapper<Sku> qw = new QueryWrapper<>();
qw.eq("product_id", product.getId());
List<Sku> skus = skuMapper.selectList(qw);
productVO.setSkuList(skus);
return productVO;
}
/**
* 查询商品信息列表
*
* @param query 查询条件
* @param page 分页条件
* @return 商品信息
*/
public List<Product> selectList(ProductQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<Product> qw = new QueryWrapper<>();
if (StringUtils.isNoneEmpty(query.getOrderField())){
if (StringUtils.isNotEmpty(query.getOrderSort()) && "desc".equalsIgnoreCase(query.getOrderSort())) {
qw.orderByDesc(query.getOrderField());
} else {
qw.orderByAsc(query.getOrderField());
}
}else {
qw.orderByDesc("publish_status");
qw.orderByAsc("sort");
}
Long categoryId = query.getCategoryId();
if (categoryId != null) {
qw.eq("category_id", categoryId);
}
Integer publishStatus = query.getPublishStatus();
if (publishStatus != null) {
qw.eq("publish_status", publishStatus);
}
String search = query.getSearch();
if (StringUtils.isNoneEmpty(search)){
qw.like("name", "%".concat(query.getSearch().trim()).concat("%"));
}
if (CollectionUtil.isNotEmpty(query.getExcludeProductIds())) {
qw.notIn("id",query.getExcludeProductIds());
}
if (CollectionUtil.isNotEmpty(query.getIds())) {
qw.in("id",query.getIds());
}
return productMapper.selectList(qw);
}
/**
* 新增商品信息
*
* @param productVO 商品信息
* @return 结果
*/
@Transactional
public int insert(ProductVO productVO) {
Product product = convert.vo2do(productVO);
product.setCreateTime(LocalDateTime.now());
List<Sku> skuList = productVO.getSkuList();
productMapper.insert(product);
if(skuList!=null){
skuList.forEach(sku -> {
sku.setProductId(product.getId());
sku.setCreateTime(LocalDateTime.now());
skuMapper.insert(sku);
});
}
return 1;
}
/**
* 修改商品信息
*
* @param productVO 商品信息
* @return 结果
*/
@Transactional
public int update(ProductVO productVO) {
Product dbProduct = productMapper.selectById(productVO.getId());
List<Long> idList = productVO.getSkuList().stream().filter(it -> it.getId() != null).map(it -> it.getId()).collect(Collectors.toList());
if (dbProduct == null) {
return 0;
}
// Long userId = SecurityUtils.getUserId();
Product product = convert.vo2do(productVO);
List<Sku> skuList = productVO.getSkuList();
// product.setUpdateBy(userId);
product.setUpdateTime(LocalDateTime.now());
productMapper.updateById(product);
//查找库中所有的sku
Map<String,Object> map = new HashMap<>();
map.put("product_id", product.getId());
Map<Long, Sku> skuMap = skuMapper.selectByMap(map).stream().collect(Collectors.toMap(it -> it.getId(), it -> it));
//针对已有的进行编辑
List<Sku> updateList = productVO.getSkuList().stream().filter(it -> it.getId() != null).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(updateList)) {
log.info("共有{}个sku需要修改{}productId{}",updateList.size(), JSONUtil.toJsonStr(updateList),productVO.getId());
updateList.forEach(it->{
Sku sku = skuMap.get(it.getId());
// sku.setUpdateBy(SecurityUtils.getUserId());
sku.setUpdateTime(LocalDateTime.now());
sku.setPrice(it.getPrice());
sku.setSpData(it.getSpData());
sku.setPic(it.getPic());
sku.setOutSkuId(it.getOutSkuId());
sku.setStock(it.getStock());
skuMapper.updateById(sku);
});
}
//针对没有的进行新增
List<Sku> addList = productVO.getSkuList().stream().filter(it -> it.getId() == null).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(addList)) {
log.info("共有{}个sku需要新增{}productId{}",addList.size(), JSONUtil.toJsonStr(addList),productVO.getId());
addList.forEach(sku -> {
sku.setProductId(product.getId());
sku.setCreateTime(LocalDateTime.now());
skuMapper.insert(sku);
});
}
//删除
List<Long> deleteIds = skuMap.keySet().stream().filter(it -> !idList.contains(it)).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(deleteIds)) {
log.info("共有{}个sku需要删除{}productId{}",deleteIds.size(), JSONUtil.toJsonStr(deleteIds),productVO.getId());
skuMapper.deleteBatchIds(deleteIds);
}
return 1;
}
/**
* 删除商品信息信息
*
* @param id 商品信息主键
* @return 结果
*/
public int deleteById(Long id) {
return productMapper.deleteById(id);
}
public ProductDetailVO queryDetail(Long id) {
ProductDetailVO res = new ProductDetailVO();
Product d = productMapper.selectById(id);
res.setProduct(d);
LambdaQueryWrapper<Sku> qw = new LambdaQueryWrapper<>();
qw.eq(Sku::getProductId, id);
res.setSkus(skuMapper.selectList(qw));
if (d.getBrandId() != null) {
res.setBrand(brandMapper.selectById(d.getBrandId()));
}
return res;
}
public interface ProductService extends IService<Product> {
}

View File

@ -1,102 +1,7 @@
package com.wzj.soopin.goods.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.goods.domain.entity.Sku;
import com.wzj.soopin.goods.domain.query.SkuQuery;
import com.wzj.soopin.goods.mapper.SkuMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* sku信息Service业务层处理
*
*
* @author zcc
*/
@Service
public class SkuService {
@Autowired
private SkuMapper skuMapper;
/**
* 查询sku信息
*
* @param id sku信息主键
* @return sku信息
*/
public Sku selectById(Long id) {
return skuMapper.selectById(id);
}
/**
* 查询sku信息列表
*
* @param query 查询条件
* @param page 分页条件
* @return sku信息
*/
public List<Sku> selectList(SkuQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<Sku> qw = new QueryWrapper<>();
Long productId = query.getProductId();
if (productId != null) {
qw.eq("product_id", productId);
}
String outSkuId = query.getOutSkuId();
if (!StringUtils.isEmpty(outSkuId)) {
qw.eq("out_sku_id", outSkuId);
}
BigDecimal price = query.getPrice();
if (price != null) {
qw.eq("price", price);
}
String pic = query.getPic();
if (!StringUtils.isEmpty(pic)) {
qw.eq("pic", pic);
}
String spData = query.getSpData();
if (!StringUtils.isEmpty(spData)) {
qw.eq("sp_data", spData);
}
return skuMapper.selectList(qw);
}
/**
* 新增sku信息
*
* @param sku sku信息
* @return 结果
*/
public int insert(Sku sku) {
sku.setCreateTime(LocalDateTime.now());
return skuMapper.insert(sku);
}
/**
* 修改sku信息
*
* @param sku sku信息
* @return 结果
*/
public int update(Sku sku) {
return skuMapper.updateById(sku);
}
/**
* 删除sku信息信息
*
* @param id sku信息主键
* @return 结果
*/
public int deleteById(Long id) {
return skuMapper.deleteById(id);
}
public interface SkuService extends IService<Sku> {
}

View File

@ -0,0 +1,101 @@
package com.wzj.soopin.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.goods.domain.entity.Brand;
import com.wzj.soopin.goods.domain.query.BrandQuery;
import com.wzj.soopin.goods.mapper.BrandMapper;
import com.wzj.soopin.goods.service.BrandService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* 品牌管理Service业务层处理
*
*
* @author zcc
*/
@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements BrandService {
@Autowired
private BrandMapper brandMapper;
/**
* 查询品牌管理
*
* @param id 品牌管理主键
* @return 品牌管理
*/
public Brand selectById(Long id) {
return brandMapper.selectById(id);
}
/**
* 查询品牌管理列表
*
* @param query 查询条件
* @param page 分页条件
* @return 品牌管理
*/
public List<Brand> selectList(BrandQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<Brand> qw = new QueryWrapper<>();
String nameLike = query.getNameLike();
if (!StringUtils.isEmpty(nameLike)) {
qw.like("name", nameLike);
}
Integer sort = query.getSort();
if (sort != null) {
qw.eq("sort", sort);
}
Integer showStatus = query.getShowStatus();
if (showStatus != null) {
qw.eq("show_status", showStatus);
}
String logo = query.getLogo();
if (!StringUtils.isEmpty(logo)) {
qw.eq("logo", logo);
}
qw.orderByAsc("sort");
return brandMapper.selectList(qw);
}
/**
* 新增品牌管理
*
* @param brand 品牌管理
* @return 结果
*/
public int insert(Brand brand) {
brand.setCreateTime(LocalDateTime.now());
return brandMapper.insert(brand);
}
/**
* 修改品牌管理
*
* @param brand 品牌管理
* @return 结果
*/
public int update(Brand brand) {
return brandMapper.updateById(brand);
}
/**
* 删除品牌管理信息
*
* @param id 品牌管理主键
* @return 结果
*/
public int deleteById(Long id) {
return brandMapper.deleteById(id);
}
}

View File

@ -0,0 +1,248 @@
package com.wzj.soopin.goods.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.goods.convert.ProductCategoryConvert;
import com.wzj.soopin.goods.convert.ProductConvert;
import com.wzj.soopin.goods.domain.dto.CategoryDTO;
import com.wzj.soopin.goods.domain.entity.Product;
import com.wzj.soopin.goods.domain.entity.ProductCategory;
import com.wzj.soopin.goods.domain.query.ProductCategoryQuery;
import com.wzj.soopin.goods.domain.vo.ProductCategoryVO;
import com.wzj.soopin.goods.mapper.ProductCategoryMapper;
import com.wzj.soopin.goods.mapper.ProductMapper;
import com.wzj.soopin.goods.service.ProductCategoryService;
import com.wzj.soopin.goods.service.ProductService;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.exception.base.BaseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 商品分类Service业务层处理
*
* @author zcc
*/
@Service
public class ProductCategoryServiceImpl extends ServiceImpl<ProductCategoryMapper, ProductCategory> implements ProductCategoryService {
@Autowired
private ProductCategoryMapper productCategoryMapper;
@Autowired
private ProductMapper productMapper;
@Autowired
private ProductCategoryConvert convert;
@Autowired
private ProductConvert productConvert;
/**
* 查询商品分类
*
* @param id 商品分类主键
* @return 商品分类
*/
public ProductCategory selectById(Long id) {
return productCategoryMapper.selectById(id);
}
/**
* 查询商品分类列表
*
* @param query 查询条件
* @param page 分页条件
* @return 商品分类
*/
// public List<ProductCategoryVO> selectList(ProductCategoryQuery query, Pageable page) {
//// if (page != null) {
//// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
//// }
// QueryWrapper<ProductCategory> qw = new QueryWrapper<>();
// Long parentId = query.getParentId();
// if (parentId != null) {
// qw.eq("parent_id", parentId);
// }
// String nameLike = query.getNameLike();
// if (!StringUtils.isEmpty(nameLike)) {
// qw.like("name", nameLike);
// }
// Integer level = query.getLevel();
// if (level != null) {
// qw.eq("level", level);
// }
// Integer showStatus = query.getShowStatus();
// if (showStatus != null) {
// qw.eq("show_status", showStatus);
// }
// Integer sort = query.getSort();
// if (sort != null) {
// qw.eq("sort", sort);
// }
// String icon = query.getIcon();
// if (!StringUtils.isEmpty(icon)) {
// qw.eq("icon", icon);
// }
// qw.orderByAsc("sort");
//
// List<ProductCategory> productCategories = productCategoryMapper.selectList(qw);
// List<ProductCategoryVO> productCategoryVOS = convert.dos2vos(productCategories);
// return formatTree(productCategoryVOS);
//
// }
private List<ProductCategoryVO> formatTree(List<ProductCategoryVO> nodes) {
List<ProductCategoryVO> tree = new ArrayList<>();
List<ProductCategoryVO> children = new ArrayList<>();
// 1先获取到所有根节点
for (ProductCategoryVO node : nodes) {
if (node.getParentId() == null || node.getParentId() == 0) {
tree.add(node);
} else {
children.add(node);
}
}
// 2把所有除根结点外的节点作为子节点然后遍历每一个根节点
for (ProductCategoryVO node : tree) {
// 3递归构建此根的子节点
recur(node, children);
}
return tree;
}
private void recur(ProductCategoryVO rootNode, List<ProductCategoryVO> children) {
// 1遍历剩余子节点找出当前根的子节点
for (ProductCategoryVO node : children) {
// 2如果子节点的父id等于根节点的id那么就将这个节点加到根节点的children列表中
if (rootNode.getId() == node.getParentId()) {
if (rootNode.getChildren() == null) {
rootNode.setChildren(new ArrayList<>());
}
rootNode.getChildren().add(node);
// 3以当前节点作为根节点进行递归检查是否还有子节点
recur(node, children);
}
}
}
/**
* 新增商品分类
*
* @param productCategory 商品分类
* @return 结果
*/
public int insert(ProductCategory productCategory) {
productCategory.setCreateTime(LocalDateTime.now());
return productCategoryMapper.insert(productCategory);
}
/**
* 修改商品分类
*
* @param productCategory 商品分类
* @return 结果
*/
public int update(ProductCategory productCategory) {
return productCategoryMapper.updateById(productCategory);
}
/**
* 删除商品分类信息
*
* @param id 商品分类主键
* @return 结果
*/
public int deleteById(Long id) {
return productCategoryMapper.deleteById(id);
}
//
// public List<CategoryDTO> queryCategoryWithProductsForH5() {
// QueryWrapper<ProductCategory> qw1 = new QueryWrapper<>();
//// qw1.eq("level", 0);
// qw1.eq("show_status", 1);
// Page<ProductCategory> pageReq = new Page<>();
// pageReq.setCurrent(1L)
// .setSize(10)
// .setOrders(Collections.singletonList(OrderItem.desc("sort")));
// List<ProductCategory> categories = productCategoryMapper.selectPage(pageReq, qw1).getRecords();
// if (CollUtil.isEmpty(categories)) {
// return Collections.emptyList();
// }
// ;
// return categories.stream().map(it -> {
// CategoryDTO dto = convert.do2dto(it);
// // 寻找该分类下的所有子类
// List<Long> allChildCate = queryAllChildCate(Collections.singletonList(it.getId()), 0);
// QueryWrapper<Product> qw = new QueryWrapper<>();
// qw.select("id", "pic", "name", "price", "category_id");
// qw.in("category_id", allChildCate);
// qw.le("sort", 100);
// List<Product> categoryId2List = productMapper.selectList(qw);
// dto.setProductList(productConvert.dos2dtos(categoryId2List));
// return dto;
// }).collect(Collectors.toList());
// }
private List<Long> queryAllChildCate(List<Long> categoryIds, int level) {
List<Long> res = new ArrayList<>();
QueryWrapper<ProductCategory> qw = new QueryWrapper<>();
qw.select("id");
List<Long> ids = categoryIds;
while (true) {
qw.clear();
qw.in("parent_id", ids);
qw.eq("level", level + 1);
qw.eq("show_status", 1);
ids = productCategoryMapper.selectList(qw).stream().map(ProductCategory::getId).collect(Collectors.toList());
if (CollUtil.isEmpty(ids)) {
break;
}
res.addAll(ids);
level++;
}
res.addAll(categoryIds);
return res;
}
public List<ProductCategory> h5Categories() {
QueryWrapper<ProductCategory> qw = new QueryWrapper<>();
qw.select("id", "parent_id", "name", "level", "sort", "icon");
qw.eq("show_status", 1);
// qw.le("level", 2);
return productCategoryMapper.selectList(qw);
}
public List<ProductCategory> getBrotherAndChild(Long id, boolean withChild) {
ProductCategory category = productCategoryMapper.selectById(id);
if (category == null) {
throw new BaseException("参数错误");
}
LambdaQueryWrapper<ProductCategory> qw = new LambdaQueryWrapper<>();
qw.eq(ProductCategory::getParentId, category.getParentId());
qw.eq(ProductCategory::getLevel, category.getLevel());
qw.eq(ProductCategory::getShowStatus, 1);
qw.select(ProductCategory::getId, ProductCategory::getParentId, ProductCategory::getName, ProductCategory::getLevel, ProductCategory::getSort, ProductCategory::getIcon);
List<ProductCategory> res = productCategoryMapper.selectList(qw);
if (withChild) {
qw.clear();
qw.eq(ProductCategory::getParentId, category.getId());
qw.eq(ProductCategory::getLevel, category.getLevel() + 1);
qw.eq(ProductCategory::getShowStatus, 1);
List<ProductCategory> childs = productCategoryMapper.selectList(qw);
res.addAll(childs);
}
if (category.getParentId() != null && category.getParentId() != -1) {
res.add(productCategoryMapper.selectById(category.getParentId()));
}
return res;
}
}

View File

@ -0,0 +1,212 @@
package com.wzj.soopin.goods.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.goods.convert.ProductConvert;
import com.wzj.soopin.goods.domain.entity.Product;
import com.wzj.soopin.goods.domain.entity.Sku;
import com.wzj.soopin.goods.domain.query.ProductQuery;
import com.wzj.soopin.goods.domain.vo.ProductDetailVO;
import com.wzj.soopin.goods.domain.vo.ProductVO;
import com.wzj.soopin.goods.mapper.BrandMapper;
import com.wzj.soopin.goods.mapper.ProductMapper;
import com.wzj.soopin.goods.mapper.SkuMapper;
import com.wzj.soopin.goods.service.ProductService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 商品信息Service业务层处理
*
*
* @author zcc
*/
@Service
@Slf4j
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
@Autowired
private ProductMapper productMapper;
@Autowired
private SkuMapper skuMapper;
@Autowired
private BrandMapper brandMapper;
@Autowired
private ProductConvert convert;
/**
* 查询商品信息
*
* @param id 商品信息主键
* @return 商品信息
*/
// public ProductVO selectById(Long id) {
// Product product = productMapper.selectById(id);
// ProductVO productVO = convert.do2vo(product);
// QueryWrapper<Sku> qw = new QueryWrapper<>();
// qw.eq("product_id", product.getId());
// List<Sku> skus = skuMapper.selectList(qw);
// productVO.setSkuList(skus);
// return productVO;
// }
/**
* 查询商品信息列表
*
* @param query 查询条件
* @param page 分页条件
* @return 商品信息
*/
public List<Product> selectList(ProductQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<Product> qw = new QueryWrapper<>();
if (StringUtils.isNoneEmpty(query.getOrderField())){
if (StringUtils.isNotEmpty(query.getOrderSort()) && "desc".equalsIgnoreCase(query.getOrderSort())) {
qw.orderByDesc(query.getOrderField());
} else {
qw.orderByAsc(query.getOrderField());
}
}else {
qw.orderByDesc("publish_status");
qw.orderByAsc("sort");
}
Long categoryId = query.getCategoryId();
if (categoryId != null) {
qw.eq("category_id", categoryId);
}
Integer publishStatus = query.getPublishStatus();
if (publishStatus != null) {
qw.eq("publish_status", publishStatus);
}
String search = query.getSearch();
if (StringUtils.isNoneEmpty(search)){
qw.like("name", "%".concat(query.getSearch().trim()).concat("%"));
}
if (CollectionUtil.isNotEmpty(query.getExcludeProductIds())) {
qw.notIn("id",query.getExcludeProductIds());
}
if (CollectionUtil.isNotEmpty(query.getIds())) {
qw.in("id",query.getIds());
}
return productMapper.selectList(qw);
}
/**
* 新增商品信息
*
* @param productVO 商品信息
* @return 结果
*/
// @Transactional
// public int insert(ProductVO productVO) {
//
// Product product = convert.vo2do(productVO);
// product.setCreateTime(LocalDateTime.now());
// List<Sku> skuList = productVO.getSkuList();
// productMapper.insert(product);
// if(skuList!=null){
// skuList.forEach(sku -> {
// sku.setProductId(product.getId());
// sku.setCreateTime(LocalDateTime.now());
// skuMapper.insert(sku);
// });
// }
// return 1;
// }
/**
* 修改商品信息
*
* @param productVO 商品信息
* @return 结果
*/
// @Transactional
// public int update(ProductVO productVO) {
// Product dbProduct = productMapper.selectById(productVO.getId());
// List<Long> idList = productVO.getSkuList().stream().filter(it -> it.getId() != null).map(it -> it.getId()).collect(Collectors.toList());
// if (dbProduct == null) {
// return 0;
// }
//// Long userId = SecurityUtils.getUserId();
// Product product = convert.vo2do(productVO);
// List<Sku> skuList = productVO.getSkuList();
//// product.setUpdateBy(userId);
// product.setUpdateTime(LocalDateTime.now());
// productMapper.updateById(product);
// //查找库中所有的sku
// Map<String,Object> map = new HashMap<>();
// map.put("product_id", product.getId());
// Map<Long, Sku> skuMap = skuMapper.selectByMap(map).stream().collect(Collectors.toMap(it -> it.getId(), it -> it));
// //针对已有的进行编辑
// List<Sku> updateList = productVO.getSkuList().stream().filter(it -> it.getId() != null).collect(Collectors.toList());
// if (!CollectionUtil.isEmpty(updateList)) {
// log.info("共有{}个sku需要修改{}productId{}",updateList.size(), JSONUtil.toJsonStr(updateList),productVO.getId());
// updateList.forEach(it->{
// Sku sku = skuMap.get(it.getId());
//// sku.setUpdateBy(SecurityUtils.getUserId());
// sku.setUpdateTime(LocalDateTime.now());
// sku.setPrice(it.getPrice());
// sku.setSpData(it.getSpData());
// sku.setPic(it.getPic());
// sku.setOutSkuId(it.getOutSkuId());
// sku.setStock(it.getStock());
// skuMapper.updateById(sku);
// });
// }
// //针对没有的进行新增
// List<Sku> addList = productVO.getSkuList().stream().filter(it -> it.getId() == null).collect(Collectors.toList());
// if (!CollectionUtil.isEmpty(addList)) {
// log.info("共有{}个sku需要新增{}productId{}",addList.size(), JSONUtil.toJsonStr(addList),productVO.getId());
// addList.forEach(sku -> {
// sku.setProductId(product.getId());
// sku.setCreateTime(LocalDateTime.now());
// skuMapper.insert(sku);
// });
// }
// //删除
// List<Long> deleteIds = skuMap.keySet().stream().filter(it -> !idList.contains(it)).collect(Collectors.toList());
// if (!CollectionUtil.isEmpty(deleteIds)) {
// log.info("共有{}个sku需要删除{}productId{}",deleteIds.size(), JSONUtil.toJsonStr(deleteIds),productVO.getId());
// skuMapper.deleteBatchIds(deleteIds);
// }
// return 1;
// }
/**
* 删除商品信息信息
*
* @param id 商品信息主键
* @return 结果
*/
public int deleteById(Long id) {
return productMapper.deleteById(id);
}
public ProductDetailVO queryDetail(Long id) {
ProductDetailVO res = new ProductDetailVO();
Product d = productMapper.selectById(id);
res.setProduct(d);
LambdaQueryWrapper<Sku> qw = new LambdaQueryWrapper<>();
qw.eq(Sku::getProductId, id);
res.setSkus(skuMapper.selectList(qw));
if (d.getBrandId() != null) {
res.setBrand(brandMapper.selectById(d.getBrandId()));
}
return res;
}
}

View File

@ -0,0 +1,104 @@
package com.wzj.soopin.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.goods.domain.entity.Sku;
import com.wzj.soopin.goods.domain.query.SkuQuery;
import com.wzj.soopin.goods.mapper.SkuMapper;
import com.wzj.soopin.goods.service.SkuService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* sku信息Service业务层处理
*
*
* @author zcc
*/
@Service
public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuService {
@Autowired
private SkuMapper skuMapper;
/**
* 查询sku信息
*
* @param id sku信息主键
* @return sku信息
*/
public Sku selectById(Long id) {
return skuMapper.selectById(id);
}
/**
* 查询sku信息列表
*
* @param query 查询条件
* @param page 分页条件
* @return sku信息
*/
public List<Sku> selectList(SkuQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<Sku> qw = new QueryWrapper<>();
Long productId = query.getProductId();
if (productId != null) {
qw.eq("product_id", productId);
}
String outSkuId = query.getOutSkuId();
if (!StringUtils.isEmpty(outSkuId)) {
qw.eq("out_sku_id", outSkuId);
}
BigDecimal price = query.getPrice();
if (price != null) {
qw.eq("price", price);
}
String pic = query.getPic();
if (!StringUtils.isEmpty(pic)) {
qw.eq("pic", pic);
}
String spData = query.getSpData();
if (!StringUtils.isEmpty(spData)) {
qw.eq("sp_data", spData);
}
return skuMapper.selectList(qw);
}
/**
* 新增sku信息
*
* @param sku sku信息
* @return 结果
*/
public int insert(Sku sku) {
sku.setCreateTime(LocalDateTime.now());
return skuMapper.insert(sku);
}
/**
* 修改sku信息
*
* @param sku sku信息
* @return 结果
*/
public int update(Sku sku) {
return skuMapper.updateById(sku);
}
/**
* 删除sku信息信息
*
* @param id sku信息主键
* @return 结果
*/
public int deleteById(Long id) {
return skuMapper.deleteById(id);
}
}

View File

@ -1,5 +1,6 @@
package com.wzj.soopin.member.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.member.domain.po.Address;
@ -10,6 +11,7 @@ import java.util.List;
*
* @author sjm
*/
@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
public interface AddressMapper extends BaseMapper<Address> {
/**
* 查询请填写功能名称列表

View File

@ -1,5 +1,6 @@
package com.wzj.soopin.member.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -16,6 +17,7 @@ import java.util.List;
*
* @author zcc
*/
@InterceptorIgnore(tenantLine = "true")
public interface MemberMapper extends BaseMapper<Member> {
/**
* 查询会员信息列表

View File

@ -143,5 +143,12 @@
<version>0.2.9</version>
</dependency>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,28 +1,40 @@
package com.wzj.soopin.order.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.order.convert.AftersaleConvert;
import com.wzj.soopin.order.domain.bo.AftersaleBo;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.service.AftersaleService;
import com.wzj.soopin.order.domain.entity.Aftersale;
import com.wzj.soopin.order.domain.form.DealWithAftersaleForm;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.query.AftersaleQuery;
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderDetailVO;
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.service.AftersaleService;
import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.service.impl.AftersaleServiceImpl;
import com.wzj.soopin.order.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.redis.redis.RedisService;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -40,27 +52,30 @@ import java.util.List;
@Slf4j
public class AftersaleController extends BaseController {
@Autowired
private AftersaleService service;
private AftersaleServiceImpl service;
@Autowired
private AftersaleConvert convert;
@Autowired
private RedisService redisService;
@Autowired
private AftersaleService aftersaleService;
@ApiOperation("查询订单售后列表")
@PostMapping("/list")
public R<Page<AftersaleVO>> list(@RequestBody AftersaleBo query, Page<Aftersale> page) {
Page<Aftersale> list = aftersaleService.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
// @ApiOperation("查询订单售后列表")
// @PostMapping("/list")
// public ResponseEntity<Page<ManagerRefundOrderVO>> list(@RequestBody ManagerAftersaleOrderForm query, Pageable page) {
// List<ManagerRefundOrderVO> list = service.selectList(query, page);
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("导出订单售后列表")
@Log(title = "订单售后", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(AftersaleQuery query) {
// List<Aftersale> list = service.selectList(query, null);
// ExcelUtil<AftersaleVO> util = new ExcelUtil<>(AftersaleVO.class);
// return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "订单售后数据"));
return null;
@GetMapping("export")
public ResponseEntity<String> export(AftersaleBo query) {
List<Aftersale> list = service.list(query.toWrapper());
ExcelUtil<AftersaleVO> util = new ExcelUtil<>(AftersaleVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "订单售后数据"));
}
@ApiOperation("获取订单售后详细信息")
@ -71,16 +86,16 @@ public class AftersaleController extends BaseController {
@ApiOperation("新增订单售后")
@Log(title = "订单售后", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody Aftersale aftersale) {
return ResponseEntity.ok(service.insert(aftersale));
@PostMapping("/add")
public R add(@RequestBody AftersaleBo query) {
return R.ok(service.save(convert.toPo(query)));
}
@ApiOperation("修改订单售后")
@Log(title = "订单售后", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody Aftersale aftersale) {
return ResponseEntity.ok(service.update(aftersale));
@PostMapping("/update")
public R edit(@RequestBody Aftersale aftersale) {
return R.ok(service.updateById(aftersale));
}
@ApiOperation("删除订单售后")
@ -114,7 +129,7 @@ public class AftersaleController extends BaseController {
@ApiOperation("查看日志")
@GetMapping("/log/{orderId}")
public ResponseEntity<List<OrderOperateHistoryVO>> log(@PathVariable Long orderId){
return ResponseEntity.ok(service.log(orderId));
public R log(@PathVariable Long orderId){
return R.ok(service.log(orderId));
}
}

View File

@ -1,21 +1,32 @@
package com.wzj.soopin.order.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.order.convert.AftersaleItemConvert;
import com.wzj.soopin.order.domain.bo.AftersaleBo;
import com.wzj.soopin.order.domain.bo.AftersaleItemBo;
import com.wzj.soopin.order.domain.entity.Aftersale;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import com.wzj.soopin.order.domain.vo.AftersaleItemVO;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.service.AftersaleItemService;
import com.wzj.soopin.order.service.impl.AftersaleItemServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -31,9 +42,11 @@ import java.util.List;
@RequestMapping("/oms/aftersaleItem")
public class AftersaleItemController extends BaseController {
@Autowired
private AftersaleItemService service;
private AftersaleItemServiceImpl service;
@Autowired
private AftersaleItemConvert convert;
@Autowired
private AftersaleItemService aftersaleItemService;
// @ApiOperation("查询订单售后列表")
// @PostMapping("/list")
@ -42,39 +55,50 @@ public class AftersaleItemController extends BaseController {
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询订单售后列表")
@PostMapping("/list")
public R<Page<AftersaleItemVO>> list(@RequestBody AftersaleItemBo query, Page<AftersaleItem> page) {
Page<AftersaleItem> list = aftersaleItemService.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
@ApiOperation("导出订单售后列表")
@Log(title = "订单售后", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(AftersaleItemQuery query) {
List<AftersaleItem> list = service.selectList(query, null);
@GetMapping("export")
public ResponseEntity<String> export(AftersaleItemBo query) {
List<AftersaleItem> list = service.list(query.toWrapper());
ExcelUtil<AftersaleItemVO> util = new ExcelUtil<>(AftersaleItemVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "订单售后数据"));
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "订单售后数据"));
}
@ApiOperation("获取订单售后详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<AftersaleItem> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
return ResponseEntity.ok(service.getById(id));
}
@ApiOperation("新增订单售后")
@Log(title = "订单售后", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody AftersaleItem aftersaleItem) {
return ResponseEntity.ok(service.insert(aftersaleItem));
@PostMapping("/add")
public R add(@RequestBody AftersaleItemBo aftersaleItem) {
return R.ok(service.save(convert.toPo(aftersaleItem)));
}
@ApiOperation("修改订单售后")
@Log(title = "订单售后", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody AftersaleItem aftersaleItem) {
return ResponseEntity.ok(service.update(aftersaleItem));
@PostMapping("/update")
public R edit(@RequestBody AftersaleItem aftersaleItem) {
return R.ok(service.updateById(aftersaleItem));
}
@ApiOperation("删除订单售后")
@Log(title = "订单售后", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,26 +1,36 @@
package com.wzj.soopin.order.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.order.convert.OrderConvert;
import com.wzj.soopin.order.domain.bo.AftersaleBo;
import com.wzj.soopin.order.domain.bo.AftersaleItemBo;
import com.wzj.soopin.order.domain.bo.OrderBo;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.form.DeliverProductForm;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import com.wzj.soopin.order.domain.query.OrderQuery;
import com.wzj.soopin.order.domain.vo.ManagerOrderDetailVO;
import com.wzj.soopin.order.domain.vo.ManagerOrderVO;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.service.OrderService;
import com.wzj.soopin.order.service.impl.OrderServiceImpl;
import com.wzj.soopin.order.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.redis.redis.RedisService;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -36,66 +46,81 @@ import java.util.List;
@Slf4j
public class OrderController extends BaseController {
@Autowired
private OrderService service;
private OrderServiceImpl service;
@Autowired
private OrderConvert convert;
@Autowired
private RedisService redisService;
@Autowired
private OrderService orderService;
@ApiOperation("查询订单表列表")
@ApiOperation("查询订单售后列表")
@PostMapping("/list")
public ResponseEntity<Page<ManagerOrderVO>> list(@RequestBody ManagerOrderQueryForm query, Pageable page) {
return ResponseEntity.ok(service.selectList(query, page));
public R<Page<OrderVO>> list(@RequestBody OrderBo query, Page<Order> page) {
Page<Order> list = service.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
// @ApiOperation("查询订单表列表")
// @PostMapping("/list")
// public R<IPage<ManagerOrderVO>> list(@RequestBody ManagerOrderQueryForm query, IPage page) {
// Page<Order> list = (Page<Order>) orderService.page(page,query.toWrapper() );
// return R.ok(convert.toVO(list));
// }
@ApiOperation("修改收件人信息")
@PostMapping("/receiver/update")
public ResponseEntity<Boolean> updateReceiver(@RequestBody Order order) {
return ResponseEntity.ok(service.updateReceiver(order));
public R updateReceiver(@RequestBody Order order) {
return R.ok(service.updateById(order));
}
@ApiOperation("导出订单表列表")
@Log(title = "订单表", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(OrderQuery query) {
// List<Order> list = service.selectList(query, null);
// ExcelUtil<OrderVO> util = new ExcelUtil<>(OrderVO.class);
// return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "订单表数据"));
return null;
@Log(title = "订单售后", businessType = BusinessType.EXPORT)
@GetMapping("export")
public ResponseEntity<String> export(OrderBo query) {
List<Order> list = service.list(query.toWrapper());
ExcelUtil<OrderVO> util = new ExcelUtil<>(OrderVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "订单售后数据"));
}
@ApiOperation("获取订单表详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<ManagerOrderDetailVO> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R<ManagerOrderDetailVO> getInfo(@PathVariable("id") Long id) {
return R.ok(service.selectById(id));
}
@ApiOperation("新增订单表")
@Log(title = "订单表", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody Order order) {
return ResponseEntity.ok(service.insert(order));
@PostMapping("/add")
public R add(@RequestBody Order order) {
return R.ok(service.save(order));
}
@ApiOperation("修改订单表")
@Log(title = "订单表", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody Order order) {
return ResponseEntity.ok(service.update(order));
@PostMapping("/update")
public R edit(@RequestBody Order order) {
return R.ok(service.updateById(order));
}
@ApiOperation("删除订单表")
@Log(title = "订单表", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
@ApiOperation("添加备注")
@Log(title = "订单表", businessType = BusinessType.UPDATE)
@PostMapping("/merchantNote/add")
public ResponseEntity<Integer> saveMerchantNote(@RequestBody Order order){
return ResponseEntity.ok(service.saveMerchantNote(order));
public R<Order> saveMerchantNote(@RequestBody Order order){
return service.saveMerchantNote(order);
}
@ApiOperation("管理后台订单发货")
@ -121,14 +146,13 @@ public class OrderController extends BaseController {
@ApiOperation("订单日志")
@GetMapping("/log/{orderId}")
public ResponseEntity<List<OrderOperateHistoryVO>> log(@PathVariable Long orderId){
return ResponseEntity.ok(service.log(orderId));
public R log(@PathVariable Long orderId){
return R.ok(service.log(orderId));
}
@ApiOperation("订单解密")
@GetMapping("/decryptPhone/{orderId}")
public ResponseEntity<String> decryptPhone(@PathVariable Long orderId){
String decryptPhone = service.decryptPhone(orderId);
return ResponseEntity.ok(decryptPhone);
public R decryptPhone(@PathVariable Long orderId){
return service.decryptPhone(orderId);
}
}

View File

@ -1,20 +1,29 @@
package com.wzj.soopin.order.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.order.convert.OrderDeliveryHistoryConvert;
import com.wzj.soopin.order.domain.bo.OrderBo;
import com.wzj.soopin.order.domain.bo.OrderDeliveryHistoryBo;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.form.DeliverProductForm;
import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm;
import com.wzj.soopin.order.domain.query.OrderDeliveryHistoryQuery;
import com.wzj.soopin.order.domain.vo.ManagerOrderVO;
import com.wzj.soopin.order.domain.vo.OrderDeliveryHistoryVO;
import com.wzj.soopin.order.domain.vo.OrderVO;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.service.OrderDeliveryHistoryService;
import com.wzj.soopin.order.service.impl.OrderDeliveryHistoryServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -30,9 +39,11 @@ import java.util.List;
@RequestMapping("/oms/orderDeliveryHistory")
public class OrderDeliveryHistoryController extends BaseController {
@Autowired
private OrderDeliveryHistoryService service;
private OrderDeliveryHistoryServiceImpl service;
@Autowired
private OrderDeliveryHistoryConvert convert;
@Autowired
private OrderDeliveryHistoryService historyService;
// @ApiOperation("查询订单发货记录列表")
// @PostMapping("/list")
@ -41,39 +52,49 @@ public class OrderDeliveryHistoryController extends BaseController {
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询订单表列表")
@PostMapping("/list")
public R<IPage<OrderDeliveryHistoryVO>> list(@RequestBody OrderDeliveryHistoryBo query, Page<OrderDeliveryHistory> page) {
Page<OrderDeliveryHistory> list = historyService.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
@ApiOperation("导出订单发货记录列表")
@Log(title = "订单发货记录", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(OrderDeliveryHistoryQuery query) {
List<OrderDeliveryHistory> list = service.selectList(query, null);
@GetMapping("export")
public ResponseEntity<String> export(OrderDeliveryHistoryBo query) {
List<OrderDeliveryHistory> list = service.list(query.toWrapper());
ExcelUtil<OrderDeliveryHistoryVO> util = new ExcelUtil<>(OrderDeliveryHistoryVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "订单发货记录数据"));
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "订单发货记录数据"));
}
@ApiOperation("获取订单发货记录详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<OrderDeliveryHistory> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R<OrderDeliveryHistory> getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增订单发货记录")
@Log(title = "订单发货记录", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody OrderDeliveryHistory orderDeliveryHistory) {
return ResponseEntity.ok(service.insert(orderDeliveryHistory));
@PostMapping("/add")
public R add(@RequestBody OrderDeliveryHistory orderDeliveryHistory) {
return R.ok(service.save(orderDeliveryHistory));
}
@ApiOperation("修改订单发货记录")
@Log(title = "订单发货记录", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody OrderDeliveryHistory orderDeliveryHistory) {
return ResponseEntity.ok(service.update(orderDeliveryHistory));
@PostMapping("/update")
public R edit(@RequestBody OrderDeliveryHistory orderDeliveryHistory) {
return R.ok(service.updateById(orderDeliveryHistory));
}
@ApiOperation("删除订单发货记录")
@Log(title = "订单发货记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,20 +1,35 @@
package com.wzj.soopin.order.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.order.convert.OrderItemConvert;
import com.wzj.soopin.order.domain.bo.AftersaleBo;
import com.wzj.soopin.order.domain.bo.AftersaleItemBo;
import com.wzj.soopin.order.domain.bo.OrderDeliveryHistoryBo;
import com.wzj.soopin.order.domain.bo.OrderItemBo;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.query.OrderDeliveryHistoryQuery;
import com.wzj.soopin.order.domain.query.OrderItemQuery;
import com.wzj.soopin.order.domain.vo.AftersaleItemVO;
import com.wzj.soopin.order.domain.vo.OrderDeliveryHistoryVO;
import com.wzj.soopin.order.domain.vo.OrderItemVO;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.service.OrderItemService;
import com.wzj.soopin.order.service.impl.OrderItemServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -30,9 +45,11 @@ import java.util.List;
@RequestMapping("/oms/orderItem")
public class OrderItemController extends BaseController {
@Autowired
private OrderItemService service;
private OrderItemServiceImpl service;
@Autowired
private OrderItemConvert convert;
@Autowired
private OrderItemService orderItemService;
// @ApiOperation("查询订单中所包含的商品列表")
// @PostMapping("/list")
@ -41,39 +58,47 @@ public class OrderItemController extends BaseController {
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("导出订单中所包含的商品列表")
@Log(title = "订单中所包含的商品", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(OrderItemQuery query) {
List<OrderItem> list = service.selectList(query, null);
@ApiOperation("查询订单中所包含的商品列表")
@PostMapping("/list")
public R<IPage<OrderItemVO>> list(@RequestBody OrderItemBo query, Page<OrderItem> page) {
Page<OrderItem> list = orderItemService.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
@ApiOperation("导出会员信息列表")
@Log(title = "会员信息", businessType = BusinessType.EXPORT)
@GetMapping("export")
public ResponseEntity<String> export(OrderItemBo query) {
List<OrderItem> list = service.list(query.toWrapper());
ExcelUtil<OrderItemVO> util = new ExcelUtil<>(OrderItemVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "订单中所包含的商品数据"));
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "订单中所包含的商品数据"));
}
@ApiOperation("获取订单中所包含的商品详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<OrderItem> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增订单中所包含的商品")
@Log(title = "订单中所包含的商品", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody OrderItem orderItem) {
return ResponseEntity.ok(service.insert(orderItem));
@PostMapping("/add")
public R add(@RequestBody OrderItem orderItem) {
return R.ok(service.save(orderItem));
}
@ApiOperation("修改订单中所包含的商品")
@Log(title = "订单中所包含的商品", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody OrderItem orderItem) {
return ResponseEntity.ok(service.update(orderItem));
@PostMapping("/update")
public R edit(@RequestBody OrderItem orderItem) {
return R.ok(service.updateById(orderItem));
}
@ApiOperation("删除订单中所包含的商品")
@Log(title = "订单中所包含的商品", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,20 +1,28 @@
package com.wzj.soopin.order.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.order.convert.OrderOperateHistoryConvert;
import com.wzj.soopin.order.domain.bo.OrderItemBo;
import com.wzj.soopin.order.domain.bo.OrderOperateHistoryBo;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.query.OrderItemQuery;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import com.wzj.soopin.order.domain.vo.OrderItemVO;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.service.OrderOperateHistoryService;
import com.wzj.soopin.order.service.impl.OrderOperateHistoryServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -30,9 +38,11 @@ import java.util.List;
@RequestMapping("/oms/orderOperateHistory")
public class OrderOperateHistoryController extends BaseController {
@Autowired
private OrderOperateHistoryService service;
private OrderOperateHistoryServiceImpl service;
@Autowired
private OrderOperateHistoryConvert convert;
@Autowired
private OrderOperateHistoryService orderOperateHistoryService;
// @ApiOperation("查询订单操作历史记录列表")
// @PostMapping("/list")
@ -41,39 +51,47 @@ public class OrderOperateHistoryController extends BaseController {
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询订单操作历史记录列表")
@PostMapping("/list")
public R<IPage<OrderOperateHistoryVO>> list(@RequestBody OrderOperateHistoryBo query, Page<OrderOperateHistory> page) {
Page<OrderOperateHistory> list = service.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
@ApiOperation("导出订单操作历史记录列表")
@Log(title = "订单操作历史记录", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(OrderOperateHistoryQuery query) {
List<OrderOperateHistory> list = service.selectList(query, null);
@GetMapping("export")
public ResponseEntity<String> export(OrderOperateHistoryBo query) {
List<OrderOperateHistory> list = service.list(query.toWrapper());
ExcelUtil<OrderOperateHistoryVO> util = new ExcelUtil<>(OrderOperateHistoryVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "订单操作历史记录数据"));
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "订单操作历史记录数据"));
}
@ApiOperation("获取订单操作历史记录详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<OrderOperateHistory> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增订单操作历史记录")
@Log(title = "订单操作历史记录", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody OrderOperateHistory orderOperateHistory) {
return ResponseEntity.ok(service.insert(orderOperateHistory));
@PostMapping("/add")
public R add(@RequestBody OrderOperateHistory orderOperateHistory) {
return R.ok(service.save(orderOperateHistory));
}
@ApiOperation("修改订单操作历史记录")
@Log(title = "订单操作历史记录", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody OrderOperateHistory orderOperateHistory) {
return ResponseEntity.ok(service.update(orderOperateHistory));
@PostMapping("/update")
public R edit(@RequestBody OrderOperateHistory orderOperateHistory) {
return R.ok(service.updateById(orderOperateHistory));
}
@ApiOperation("删除订单操作历史记录")
@Log(title = "订单操作历史记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,20 +1,27 @@
package com.wzj.soopin.order.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.order.convert.WechatPaymentHistoryConvert;
import com.wzj.soopin.order.domain.bo.OrderOperateHistoryBo;
import com.wzj.soopin.order.domain.bo.WechatPaymentHistoryBo;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import com.wzj.soopin.order.domain.query.WechatPaymentHistoryQuery;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.domain.vo.WechatPaymentHistoryVO;
import com.wzj.soopin.order.service.WechatPaymentHistoryService;
import com.wzj.soopin.order.service.impl.WechatPaymentHistoryServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -30,9 +37,11 @@ import java.util.List;
@RequestMapping("/pms/omsWechatPaymentHistory")
public class WechatPaymentHistoryController extends BaseController {
@Autowired
private WechatPaymentHistoryService service;
private WechatPaymentHistoryServiceImpl service;
@Autowired
private WechatPaymentHistoryConvert convert;
@Autowired
private WechatPaymentHistoryService wechatPaymentHistoryService;
// @ApiOperation("查询微信订单表列表")
// @PostMapping("/list")
@ -41,39 +50,47 @@ public class WechatPaymentHistoryController extends BaseController {
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询微信订单表列表")
@PostMapping("/list")
public R<IPage<WechatPaymentHistoryVO>> list(@RequestBody WechatPaymentHistoryBo query, Page<WechatPaymentHistory> page) {
Page<WechatPaymentHistory> list = wechatPaymentHistoryService.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
@ApiOperation("导出微信订单表列表")
@Log(title = "微信订单表", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(WechatPaymentHistoryQuery query) {
List<WechatPaymentHistory> list = service.selectList(query, null);
@GetMapping("export")
public ResponseEntity<String> export(WechatPaymentHistoryBo query) {
List<WechatPaymentHistory> list = service.list(query.toWrapper());
ExcelUtil<WechatPaymentHistoryVO> util = new ExcelUtil<>(WechatPaymentHistoryVO.class);
return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "微信订单表数据"));
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "微信订单表数据"));
}
@ApiOperation("获取微信订单表详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<WechatPaymentHistory> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
public R getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增微信订单表")
@Log(title = "微信订单表", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> add(@RequestBody WechatPaymentHistory wechatPaymentHistory) {
return ResponseEntity.ok(service.insert(wechatPaymentHistory));
@PostMapping("/add")
public R add(@RequestBody WechatPaymentHistory wechatPaymentHistory) {
return R.ok(service.save(wechatPaymentHistory));
}
@ApiOperation("修改微信订单表")
@Log(title = "微信订单表", businessType = BusinessType.UPDATE)
@PutMapping
public ResponseEntity<Integer> edit(@RequestBody WechatPaymentHistory wechatPaymentHistory) {
return ResponseEntity.ok(service.update(wechatPaymentHistory));
@PostMapping("/update")
public R edit(@RequestBody WechatPaymentHistory wechatPaymentHistory) {
return R.ok(service.updateById(wechatPaymentHistory));
}
@ApiOperation("删除微信订单表")
@Log(title = "微信订单表", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -1,7 +1,14 @@
package com.wzj.soopin.order.convert;
import com.wzj.soopin.member.domain.bo.MemberAddressBO;
import com.wzj.soopin.member.domain.po.MemberAddress;
import com.wzj.soopin.member.domain.vo.MemberAddressVO;
import com.wzj.soopin.order.domain.bo.AftersaleBo;
import com.wzj.soopin.order.domain.entity.Aftersale;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import java.util.List;
@ -11,7 +18,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface AftersaleConvert {
public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo,Aftersale> {
List<AftersaleVO> dos2vos(List<Aftersale> list);
// List<AftersaleVO> dos2vos(List<Aftersale> list);
}

View File

@ -1,8 +1,14 @@
package com.wzj.soopin.order.convert;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.order.domain.bo.AftersaleItemBo;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import com.wzj.soopin.order.domain.vo.AftersaleItemVO;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
@ -11,7 +17,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface AftersaleItemConvert {
public interface AftersaleItemConvert extends BaseConverter<AftersaleItemVO, AftersaleItemBo, AftersaleItem> {
List<AftersaleItemVO> dos2vos(List<AftersaleItem> list);
// List<AftersaleItemVO> dos2vos(List<AftersaleItem> list);
}

View File

@ -1,9 +1,20 @@
package com.wzj.soopin.order.convert;
import com.wzj.soopin.order.domain.bo.OrderBo;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import com.wzj.soopin.order.domain.query.OrderQuery;
import com.wzj.soopin.order.domain.vo.AftersaleItemVO;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.ManagerOrderVO;
import com.wzj.soopin.order.domain.vo.OrderVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
@ -12,9 +23,9 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface OrderConvert {
public interface OrderConvert extends BaseConverter<OrderVO, OrderBo, Order> {
List<OrderVO> dos2vos(List<Order> list);
// List<OrderVO> dos2vos(List<Order> list);
OrderVO do2vo(Order order);
// OrderVO do2vo(Order order);
}

View File

@ -1,8 +1,15 @@
package com.wzj.soopin.order.convert;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.bo.OrderDeliveryHistoryBo;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.form.DeliverProductForm;
import com.wzj.soopin.order.domain.query.OrderDeliveryHistoryQuery;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.OrderDeliveryHistoryVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
@ -11,7 +18,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface OrderDeliveryHistoryConvert {
public interface OrderDeliveryHistoryConvert extends BaseConverter<OrderDeliveryHistoryVO, OrderDeliveryHistoryBo, OrderDeliveryHistory> {
List<OrderDeliveryHistoryVO> dos2vos(List<OrderDeliveryHistory> list);
// List<OrderDeliveryHistoryVO> dos2vos(List<OrderDeliveryHistory> list);
}

View File

@ -1,8 +1,13 @@
package com.wzj.soopin.order.convert;
import com.wzj.soopin.order.domain.bo.OrderItemBo;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.query.OrderItemQuery;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.OrderItemVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
@ -11,7 +16,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface OrderItemConvert {
public interface OrderItemConvert extends BaseConverter<OrderItemVO, OrderItemBo, OrderItem > {
List<OrderItemVO> dos2vos(List<OrderItem> list);
// List<OrderItemVO> dos2vos(List<OrderItem> list);
}

View File

@ -1,9 +1,14 @@
package com.wzj.soopin.order.convert;
import com.wzj.soopin.order.domain.bo.OrderOperateHistoryBo;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
@ -12,7 +17,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface OrderOperateHistoryConvert {
public interface OrderOperateHistoryConvert extends BaseConverter<OrderOperateHistoryVO, OrderOperateHistoryBo,OrderOperateHistory> {
List<OrderOperateHistoryVO> dos2vos(List<OrderOperateHistory> list);
// List<OrderOperateHistoryVO> dos2vos(List<OrderOperateHistory> list);
}

View File

@ -1,8 +1,13 @@
package com.wzj.soopin.order.convert;
import com.wzj.soopin.order.domain.bo.WechatPaymentHistoryBo;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import com.wzj.soopin.order.domain.query.WechatPaymentHistoryQuery;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.WechatPaymentHistoryVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
@ -11,7 +16,7 @@ import java.util.List;
* @author zcc
*/
@Mapper(componentModel = "spring")
public interface WechatPaymentHistoryConvert {
public interface WechatPaymentHistoryConvert extends BaseConverter<WechatPaymentHistoryVO, WechatPaymentHistoryBo,WechatPaymentHistory> {
List<WechatPaymentHistoryVO> dos2vos(List<WechatPaymentHistory> list);
// List<WechatPaymentHistoryVO> dos2vos(List<WechatPaymentHistory> list);
}

View File

@ -0,0 +1,125 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wzj.soopin.order.domain.entity.Aftersale;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel(description="订单售后 查询 对象")
public class AftersaleBo {
@ApiModelProperty("MEMBER_ID 精确匹配")
private Long memberId;
@ApiModelProperty("订单id 精确匹配")
private Long orderId;
@ApiModelProperty("退款金额 精确匹配")
private BigDecimal returnAmount;
@ApiModelProperty("售后类型1退款2退货退款 精确匹配")
private Integer type;
@ApiModelProperty("申请状态0->待处理1->退货中2->已完成3->已拒绝 精确匹配")
private Integer status;
@ApiModelProperty("处理时间 精确匹配")
private LocalDateTime handleTime;
@ApiModelProperty("退货数量 精确匹配")
private Integer quantity;
@ApiModelProperty("原因 精确匹配")
private String reason;
@ApiModelProperty("描述 精确匹配")
private String description;
@ApiModelProperty("凭证图片,以逗号隔开 精确匹配")
private String proofPics;
@ApiModelProperty("处理备注 精确匹配")
private String handleNote;
@ApiModelProperty("处理人员 精确匹配")
private String handleMan;
@ApiModelProperty(name = "startTime", value = "开始时间", required = true, dataType = "Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@ApiModelProperty(name = "endTime", value = "结束时间", required = true, dataType = "Date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
public Wrapper<Aftersale> toWrapper() {
LambdaQueryWrapper<Aftersale> queryWrapper = new LambdaQueryWrapper<>();
if (memberId != null) {
queryWrapper.eq(Aftersale::getMemberId, memberId);
}
if (orderId != null) {
queryWrapper.eq(Aftersale::getOrderId, orderId);
}
if (returnAmount != null) {
queryWrapper.eq(Aftersale::getReturnAmount, returnAmount);
}
if (type != null) {
queryWrapper.eq(Aftersale::getType, type);
}
if (status != null) {
queryWrapper.eq(Aftersale::getStatus, status);
}
if (handleTime != null) {
queryWrapper.eq(Aftersale::getHandleTime, handleTime);
}
if (quantity != null) {
queryWrapper.eq(Aftersale::getQuantity, quantity);
}
if (reason != null && !reason.isEmpty()) {
queryWrapper.eq(Aftersale::getReason, reason);
}
if (description != null && !description.isEmpty()) {
queryWrapper.eq(Aftersale::getDescription, description);
}
if (proofPics != null && !proofPics.isEmpty()) {
queryWrapper.eq(Aftersale::getProofPics, proofPics);
}
if (handleNote != null && !handleNote.isEmpty()) {
queryWrapper.eq(Aftersale::getHandleNote, handleNote);
}
if (handleMan != null && !handleMan.isEmpty()) {
queryWrapper.eq(Aftersale::getHandleMan, handleMan);
}
if (startTime != null && endTime != null) {
queryWrapper.between(Aftersale::getCreateTime, startTime, endTime);
} else if (startTime != null) {
queryWrapper.ge(Aftersale::getCreateTime, startTime);
} else if (endTime != null) {
queryWrapper.le(Aftersale::getCreateTime, endTime);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,64 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
@Data
@ApiModel(description="订单中所包含的商品 查询 对象")
public class AftersaleItemBo {
@ApiModelProperty("MEMBER_ID 精确匹配")
private Long memberId;
@ApiModelProperty("订单id 精确匹配")
private Long orderId;
@ApiModelProperty("子订单id 精确匹配")
private Long orderItemId;
@ApiModelProperty("退款金额 精确匹配")
private BigDecimal returnAmount;
@ApiModelProperty("退货数量 精确匹配")
private Integer quantity;
@ApiModelProperty("售后单id")
private Long aftersaleId;
public Wrapper<AftersaleItem> toWrapper() {
LambdaQueryWrapper<AftersaleItem> queryWrapper = new LambdaQueryWrapper<>();
if (memberId != null) {
queryWrapper.eq(AftersaleItem::getMemberId, memberId);
}
if (orderId != null) {
queryWrapper.eq(AftersaleItem::getOrderId, orderId);
}
if (orderItemId != null) {
queryWrapper.eq(AftersaleItem::getOrderItemId, orderItemId);
}
if (returnAmount != null) {
queryWrapper.eq(AftersaleItem::getReturnAmount, returnAmount);
}
if (quantity != null) {
queryWrapper.eq(AftersaleItem::getQuantity, quantity);
}
if (aftersaleId != null) {
queryWrapper.eq(AftersaleItem::getAftersaleId, aftersaleId);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,220 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.Order;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.persistence.PrePersist;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Random;
@Data
@ApiModel(description="订单表 查询 对象")
public class OrderBo {
@ApiModelProperty("MEMBER_ID 精确匹配")
private Long memberId;
@ApiModelProperty("订单编号")
private String orderSn;
@ApiModelProperty("用户帐号 精确匹配")
private String memberUsernameLike;
@ApiModelProperty("订单总金额 精确匹配")
private BigDecimal totalAmount;
@ApiModelProperty("采购价 精确匹配")
private BigDecimal purchasePrice;
@ApiModelProperty("应付金额(实际支付金额) 精确匹配")
private BigDecimal payAmount;
@ApiModelProperty("运费金额 精确匹配")
private BigDecimal freightAmount;
@ApiModelProperty("支付方式0->未支付1->支付宝2->微信 精确匹配")
private Integer payType;
@ApiModelProperty("订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单 精确匹配")
private Integer status;
@ApiModelProperty("退款状态枚举值1无售后或售后关闭2售后处理中3退款中4 退款成功 精确匹配")
private Integer aftersaleStatus;
@ApiModelProperty("物流公司 精确匹配")
private String deliveryCompany;
@ApiModelProperty("物流单号 精确匹配")
private String deliverySn;
@ApiModelProperty("自动确认时间(天) 精确匹配")
private Integer autoConfirmDay;
@ApiModelProperty("收货人姓名 精确匹配")
private String receiverNameLike;
@ApiModelProperty("收货人电话 精确匹配")
private String receiverPhone;
@ApiModelProperty("收货人邮编 精确匹配")
private String receiverPostCode;
@ApiModelProperty("省份/直辖市 精确匹配")
private String receiverProvince;
@ApiModelProperty("城市 精确匹配")
private String receiverCity;
@ApiModelProperty("区 精确匹配")
private String receiverDistrict;
@ApiModelProperty("省份/直辖市id 精确匹配")
private Long receiverProvinceId;
@ApiModelProperty("城市id 精确匹配")
private Long receiverCityId;
@ApiModelProperty("区id 精确匹配")
private Long receiverDistrictId;
@ApiModelProperty("详细地址 精确匹配")
private String receiverDetailAddress;
@ApiModelProperty("订单备注 精确匹配")
private String note;
@ApiModelProperty("商家备注")
private String merchantNote;
@ApiModelProperty("确认收货状态0->未确认1->已确认 精确匹配")
private Integer confirmStatus;
@ApiModelProperty("删除状态0->未删除1->已删除 精确匹配")
private Integer deleteStatus;
@ApiModelProperty("支付时间 精确匹配")
private LocalDateTime paymentTime;
@ApiModelProperty("发货时间 精确匹配")
private LocalDateTime deliveryTime;
@ApiModelProperty("确认收货时间 精确匹配")
private LocalDateTime receiveTime;
@ApiModelProperty("创建订单开始时间")
private LocalDateTime startTime;
@ApiModelProperty("创建订单结束时间")
private LocalDateTime endTime;
public Wrapper<Order> toWrapper() {
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
// 精确匹配字段
if (memberId != null) {
queryWrapper.eq(Order::getMemberId, memberId);
}
if (orderSn != null) {
queryWrapper.eq(Order::getOrderSn, orderSn);
}
if (totalAmount != null) {
queryWrapper.eq(Order::getTotalAmount, totalAmount);
}
if (purchasePrice != null) {
queryWrapper.eq(Order::getPurchasePrice, purchasePrice);
}
if (payAmount != null) {
queryWrapper.eq(Order::getPayAmount, payAmount);
}
if (merchantNote != null) {
queryWrapper.eq(Order::getMerchantNote, merchantNote);
}
if (freightAmount != null) {
queryWrapper.eq(Order::getFreightAmount, freightAmount);
}
if (payType != null) {
queryWrapper.eq(Order::getPayType, payType);
}
if (status != null) {
queryWrapper.eq(Order::getStatus, status);
}
if (aftersaleStatus != null) {
queryWrapper.eq(Order::getAftersaleStatus, aftersaleStatus);
}
if (deliveryCompany != null &&!deliveryCompany.isEmpty()) {
queryWrapper.eq(Order::getDeliveryCompany, deliveryCompany);
}
if (deliverySn != null &&!deliverySn.isEmpty()) {
queryWrapper.eq(Order::getDeliverySn, deliverySn);
}
if (autoConfirmDay != null) {
queryWrapper.eq(Order::getAutoConfirmDay, autoConfirmDay);
}
if (receiverPhone != null &&!receiverPhone.isEmpty()) {
queryWrapper.eq(Order::getReceiverPhone, receiverPhone);
}
if (receiverPostCode != null &&!receiverPostCode.isEmpty()) {
queryWrapper.eq(Order::getReceiverPostCode, receiverPostCode);
}
if (receiverProvince != null &&!receiverProvince.isEmpty()) {
queryWrapper.eq(Order::getReceiverProvince, receiverProvince);
}
if (receiverCity != null &&!receiverCity.isEmpty()) {
queryWrapper.eq(Order::getReceiverCity, receiverCity);
}
if (receiverDistrict != null &&!receiverDistrict.isEmpty()) {
queryWrapper.eq(Order::getReceiverDistrict, receiverDistrict);
}
if (receiverProvinceId != null) {
queryWrapper.eq(Order::getReceiverProvinceId, receiverProvinceId);
}
if (receiverCityId != null) {
queryWrapper.eq(Order::getReceiverCityId, receiverCityId);
}
if (receiverDistrictId != null) {
queryWrapper.eq(Order::getReceiverDistrictId, receiverDistrictId);
}
if (receiverDetailAddress != null &&!receiverDetailAddress.isEmpty()) {
queryWrapper.eq(Order::getReceiverDetailAddress, receiverDetailAddress);
}
if (note != null &&!note.isEmpty()) {
queryWrapper.eq(Order::getNote, note);
}
if (confirmStatus != null) {
queryWrapper.eq(Order::getConfirmStatus, confirmStatus);
}
if (deleteStatus != null) {
queryWrapper.eq(Order::getDeleteStatus, deleteStatus);
}
if (paymentTime != null) {
queryWrapper.eq(Order::getPaymentTime, paymentTime);
}
if (deliveryTime != null) {
queryWrapper.eq(Order::getDeliveryTime, deliveryTime);
}
if (receiveTime != null) {
queryWrapper.eq(Order::getReceiveTime, receiveTime);
}
// 时间范围查询
if (startTime != null && endTime != null) {
queryWrapper.between(Order::getCreateTime, startTime, endTime);
} else if (startTime != null) {
queryWrapper.ge(Order::getCreateTime, startTime);
} else if (endTime != null) {
queryWrapper.le(Order::getCreateTime, endTime);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,39 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(description="订单发货记录 查询 对象")
public class OrderDeliveryHistoryBo {
@ApiModelProperty("订单id 精确匹配")
private Long orderId;
@ApiModelProperty("物流公司 精确匹配")
private String deliveryCompany;
@ApiModelProperty("物流单号 精确匹配")
private String deliverySn;
public Wrapper<OrderDeliveryHistory> toWrapper() {
LambdaQueryWrapper<OrderDeliveryHistory> queryWrapper = new LambdaQueryWrapper<>();
if (orderId != null) {
queryWrapper.eq(OrderDeliveryHistory::getOrderId, orderId);
}
if (deliveryCompany != null && !deliveryCompany.isEmpty()) {
queryWrapper.eq(OrderDeliveryHistory::getDeliveryCompany, deliveryCompany);
}
if (deliverySn != null && !deliverySn.isEmpty()) {
queryWrapper.eq(OrderDeliveryHistory::getDeliverySn, deliverySn);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,118 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.OrderItem;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(description="订单中所包含的商品 查询 对象")
public class OrderItemBo {
@ApiModelProperty("订单id 精确匹配")
private Long orderId;
@ApiModelProperty("PRODUCT_ID 精确匹配")
private Long productId;
@ApiModelProperty("商品编码 精确匹配")
private String outProductId;
@ApiModelProperty("商品sku id 精确匹配")
private Long skuId;
@ApiModelProperty("sku编码 精确匹配")
private String outSkuId;
@ApiModelProperty("商品快照id 精确匹配")
private Long productSnapshotId;
@ApiModelProperty("sku快照id 精确匹配")
private Long skuSnapshotId;
@ApiModelProperty("展示图片 精确匹配")
private String pic;
@ApiModelProperty("PRODUCT_NAME 精确匹配")
private String productNameLike;
@ApiModelProperty("销售价格 精确匹配")
private BigDecimal salePrice;
@ApiModelProperty("采购价 精确匹配")
private BigDecimal purchasePrice;
@ApiModelProperty("购买数量 精确匹配")
private Integer quantity;
@ApiModelProperty("商品分类id 精确匹配")
private Long productCategoryId;
@ApiModelProperty("商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}] 精确匹配")
private String spData;
public Wrapper<OrderItem> toWrapper() {
LambdaQueryWrapper<OrderItem> queryWrapper = new LambdaQueryWrapper<>();
if (orderId != null) {
queryWrapper.eq(OrderItem::getOrderId, orderId);
}
if (productId != null) {
queryWrapper.eq(OrderItem::getProductId, productId);
}
if (outProductId != null && !outProductId.isEmpty()) {
queryWrapper.eq(OrderItem::getOutProductId, outProductId);
}
if (skuId != null) {
queryWrapper.eq(OrderItem::getSkuId, skuId);
}
if (outSkuId != null && !outSkuId.isEmpty()) {
queryWrapper.eq(OrderItem::getOutSkuId, outSkuId);
}
if (productSnapshotId != null) {
queryWrapper.eq(OrderItem::getProductSnapshotId, productSnapshotId);
}
if (skuSnapshotId != null) {
queryWrapper.eq(OrderItem::getSkuSnapshotId, skuSnapshotId);
}
if (pic != null && !pic.isEmpty()) {
queryWrapper.eq(OrderItem::getPic, pic);
}
if (productNameLike != null && !productNameLike.isEmpty()) {
queryWrapper.like(OrderItem::getProductName, productNameLike);
}
if (salePrice != null) {
queryWrapper.eq(OrderItem::getSalePrice, salePrice);
}
if (purchasePrice != null) {
queryWrapper.eq(OrderItem::getPurchasePrice, purchasePrice);
}
if (quantity != null) {
queryWrapper.eq(OrderItem::getQuantity, quantity);
}
if (productCategoryId != null) {
queryWrapper.eq(OrderItem::getProductCategoryId, productCategoryId);
}
if (spData != null && !spData.isEmpty()) {
queryWrapper.eq(OrderItem::getSpData, spData);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,48 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(description="订单操作历史记录 查询 对象")
public class OrderOperateHistoryBo {
@ApiModelProperty("订单号 精确匹配")
private String orderSn;
@ApiModelProperty("操作人:用户;系统;后台管理员 精确匹配")
private String operateMan;
@ApiModelProperty("订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单 精确匹配")
private Integer orderStatus;
@ApiModelProperty("备注 精确匹配")
private String note;
public Wrapper<OrderOperateHistory> toWrapper() {
LambdaQueryWrapper<OrderOperateHistory> queryWrapper = new LambdaQueryWrapper<>();
if (orderSn != null && !orderSn.isEmpty()) {
queryWrapper.eq(OrderOperateHistory::getOrderSn, orderSn);
}
if (operateMan != null && !operateMan.isEmpty()) {
queryWrapper.eq(OrderOperateHistory::getOperateMan, operateMan);
}
if (orderStatus != null) {
queryWrapper.eq(OrderOperateHistory::getOrderStatus, orderStatus);
}
if (note != null && !note.isEmpty()) {
queryWrapper.eq(OrderOperateHistory::getNote, note);
}
return queryWrapper;
}
}

View File

@ -0,0 +1,98 @@
package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(description="微信订单表 查询 对象")
public class WechatPaymentHistoryBo {
@ApiModelProperty("payment_id 精确匹配")
private String paymentId;
@ApiModelProperty("用户 ID 精确匹配")
private Long memberId;
@ApiModelProperty("OPENID 精确匹配")
private String openid;
@ApiModelProperty("真实姓名,提现需要 精确匹配")
private String realNameLike;
@ApiModelProperty("标题|商品名称 精确匹配")
private String title;
@ApiModelProperty("订单号 支付时是payId 其他为orderId 精确匹配")
private Long orderId;
@ApiModelProperty("金额,单位分 精确匹配")
private BigDecimal money;
@ApiModelProperty("交易类型1为支付 2为提现 3为退款 精确匹配")
private Integer opType;
@ApiModelProperty("状态0未完成交易 1完成关键交易 精确匹配")
private Integer paymentStatus;
@ApiModelProperty("附加数据 精确匹配")
private String attach;
@ApiModelProperty("响应内容 精确匹配")
private String responseBody;
public Wrapper<WechatPaymentHistory> toWrapper() {
LambdaQueryWrapper<WechatPaymentHistory> queryWrapper = new LambdaQueryWrapper<>();
if (paymentId != null && !paymentId.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getPaymentId, paymentId);
}
if (memberId != null) {
queryWrapper.eq(WechatPaymentHistory::getMemberId, memberId);
}
if (openid != null && !openid.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getOpenid, openid);
}
if (realNameLike != null && !realNameLike.isEmpty()) {
// 注意字段名若为 real_name 需对应实体类属性
queryWrapper.like(WechatPaymentHistory::getRealName, realNameLike);
}
if (title != null && !title.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getTitle, title);
}
if (orderId != null) {
queryWrapper.eq(WechatPaymentHistory::getOrderId, orderId);
}
if (money != null) {
queryWrapper.eq(WechatPaymentHistory::getMoney, money);
}
if (opType != null) {
queryWrapper.eq(WechatPaymentHistory::getOpType, opType);
}
if (paymentStatus != null) {
queryWrapper.eq(WechatPaymentHistory::getPaymentStatus, paymentStatus);
}
if (attach != null && !attach.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getAttach, attach);
}
if (responseBody != null && !responseBody.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getResponseBody, responseBody);
}
return queryWrapper;
}
}

View File

@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.persistence.PrePersist;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Random;
/**
* 订单表对象 oms_order
*
@ -41,6 +46,10 @@ public class Order extends BaseAudit {
@Excel(name = "用户帐号")
private String memberUsername;
@ApiModelProperty("商家备注")
@Excel(name = "商家备注")
private String merchantNote;
@ApiModelProperty("订单总金额")
@Excel(name = "订单总金额")
private BigDecimal totalAmount;
@ -129,10 +138,6 @@ public class Order extends BaseAudit {
@Excel(name = "订单备注")
private String note;
@ApiModelProperty("商家备注")
@Excel(name = "商家备注")
private String merchantNote;
@ApiModelProperty("确认收货状态0->未确认1->已确认")
@Excel(name = "确认收货状态0->未确认1->已确认")
private Integer confirmStatus;
@ -159,4 +164,5 @@ public class Order extends BaseAudit {
@ApiModelProperty("优惠券金额")
private BigDecimal couponAmount;
}

View File

@ -1,4 +1,6 @@
package com.wzj.soopin.order.domain.form;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
@ -24,4 +26,7 @@ public class DeliverProductForm {
@Excel(name = "运单号")
private String expressSn;
public Wrapper<OrderDeliveryHistory> toWrapper() {
return null;
}
}

View File

@ -1,6 +1,9 @@
package com.wzj.soopin.order.domain.form;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wzj.soopin.member.domain.po.MemberAddress;
import com.wzj.soopin.order.domain.entity.Aftersale;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -38,4 +41,32 @@ public class ManagerAftersaleOrderForm {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
public QueryWrapper<Aftersale> toWrapper() {
QueryWrapper<Aftersale> queryWrapper = new QueryWrapper<>();
if (id != null) {
queryWrapper.eq("id", id);
}
if (orderSn != null) {
queryWrapper.eq("order_sn", orderSn);
}
if (userPhone != null) {
queryWrapper.eq("user_phone", userPhone);
}
if (status != null) {
queryWrapper.eq("status", status);
}
if (type != null) {
queryWrapper.eq("type", type);
}
if (startTime != null) {
queryWrapper.ge("create_time", startTime);
}
if (endTime != null) {
queryWrapper.le("create_time", endTime);
}
queryWrapper.orderByDesc("id");
return queryWrapper;
}
}

View File

@ -1,6 +1,8 @@
package com.wzj.soopin.order.domain.form;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wzj.soopin.order.domain.vo.ManagerOrderVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -51,4 +53,46 @@ public class ManagerOrderQueryForm {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
public LambdaQueryWrapper<ManagerOrderVO> toWrapper() {
LambdaQueryWrapper<ManagerOrderVO> queryWrapper = new LambdaQueryWrapper<>();
if (orderSn != null &&!orderSn.isEmpty()) {
queryWrapper.eq(ManagerOrderVO::getOrderSn, orderSn);
}
if (productId != null) {
queryWrapper.eq(ManagerOrderVO::getProductId, productId);
}
if (productName != null &&!productName.isEmpty()) {
queryWrapper.like(ManagerOrderVO::getProductName, productName);
}
if (userPhone != null &&!userPhone.isEmpty()) {
queryWrapper.eq(ManagerOrderVO::getUserPhone, userPhone);
}
if (payType != null) {
queryWrapper.eq(ManagerOrderVO::getPayType, payType);
}
if (status != null) {
queryWrapper.eq(ManagerOrderVO::getStatus, status);
}
if (receiverProvince != null &&!receiverProvince.isEmpty()) {
queryWrapper.eq(ManagerOrderVO::getReceiverProvince, receiverProvince);
}
if (receiverCity != null &&!receiverCity.isEmpty()) {
queryWrapper.eq(ManagerOrderVO::getReceiverCity, receiverCity);
}
if (receiverDistrict != null &&!receiverDistrict.isEmpty()) {
queryWrapper.eq(ManagerOrderVO::getReceiverDistrict, receiverDistrict);
}
if (startTime != null && endTime != null) {
// 假设使用createTime作为时间查询字段可根据实际情况修改
queryWrapper.between(ManagerOrderVO::getCreateTime, startTime, endTime);
} else if (startTime != null) {
queryWrapper.ge(ManagerOrderVO::getCreateTime, startTime);
} else if (endTime != null) {
queryWrapper.le(ManagerOrderVO::getCreateTime, endTime);
}
return queryWrapper;
}
}

View File

@ -1,5 +1,8 @@
package com.wzj.soopin.order.domain.query;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -29,4 +32,29 @@ public class AftersaleItemQuery {
@ApiModelProperty("退货数量 精确匹配")
private Integer quantity;
public Wrapper<AftersaleItem> toWrapper() {
LambdaQueryWrapper<AftersaleItem> queryWrapper = new LambdaQueryWrapper<>();
if (memberId != null) {
queryWrapper.eq(AftersaleItem::getMemberId, memberId);
}
if (orderId != null) {
queryWrapper.eq(AftersaleItem::getOrderId, orderId);
}
if (orderItemId != null) {
queryWrapper.eq(AftersaleItem::getOrderItemId, orderItemId);
}
if (returnAmount != null) {
queryWrapper.eq(AftersaleItem::getReturnAmount, returnAmount);
}
if (quantity != null) {
queryWrapper.eq(AftersaleItem::getQuantity, quantity);
}
return queryWrapper;
}
}

View File

@ -3,6 +3,7 @@ package com.wzj.soopin.order.domain.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ -14,7 +15,7 @@ import java.time.LocalDateTime;
*/
@ApiModel(description="订单售后 查询 对象")
@Data
public class AftersaleQuery {
public class AftersaleQuery extends BaseBO {
@ApiModelProperty("MEMBER_ID 精确匹配")
private Long memberId;

View File

@ -1,5 +1,8 @@
package com.wzj.soopin.order.domain.query;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -21,4 +24,21 @@ public class OrderDeliveryHistoryQuery {
@ApiModelProperty("物流单号 精确匹配")
private String deliverySn;
public Wrapper<OrderDeliveryHistory> toWrapper() {
LambdaQueryWrapper<OrderDeliveryHistory> queryWrapper = new LambdaQueryWrapper<>();
if (orderId != null) {
queryWrapper.eq(OrderDeliveryHistory::getOrderId, orderId);
}
if (deliveryCompany != null && !deliveryCompany.isEmpty()) {
queryWrapper.eq(OrderDeliveryHistory::getDeliveryCompany, deliveryCompany);
}
if (deliverySn != null && !deliverySn.isEmpty()) {
queryWrapper.eq(OrderDeliveryHistory::getDeliverySn, deliverySn);
}
return queryWrapper;
}
}

View File

@ -1,5 +1,8 @@
package com.wzj.soopin.order.domain.query;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.OrderItem;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -56,4 +59,65 @@ public class OrderItemQuery {
@ApiModelProperty("商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}] 精确匹配")
private String spData;
public Wrapper<OrderItem> toWrapper() {
LambdaQueryWrapper<OrderItem> queryWrapper = new LambdaQueryWrapper<>();
if (orderId != null) {
queryWrapper.eq(OrderItem::getOrderId, orderId);
}
if (productId != null) {
queryWrapper.eq(OrderItem::getProductId, productId);
}
if (outProductId != null && !outProductId.isEmpty()) {
queryWrapper.eq(OrderItem::getOutProductId, outProductId);
}
if (skuId != null) {
queryWrapper.eq(OrderItem::getSkuId, skuId);
}
if (outSkuId != null && !outSkuId.isEmpty()) {
queryWrapper.eq(OrderItem::getOutSkuId, outSkuId);
}
if (productSnapshotId != null) {
queryWrapper.eq(OrderItem::getProductSnapshotId, productSnapshotId);
}
if (skuSnapshotId != null) {
queryWrapper.eq(OrderItem::getSkuSnapshotId, skuSnapshotId);
}
if (pic != null && !pic.isEmpty()) {
queryWrapper.eq(OrderItem::getPic, pic);
}
if (productNameLike != null && !productNameLike.isEmpty()) {
queryWrapper.like(OrderItem::getProductName, productNameLike);
}
if (salePrice != null) {
queryWrapper.eq(OrderItem::getSalePrice, salePrice);
}
if (purchasePrice != null) {
queryWrapper.eq(OrderItem::getPurchasePrice, purchasePrice);
}
if (quantity != null) {
queryWrapper.eq(OrderItem::getQuantity, quantity);
}
if (productCategoryId != null) {
queryWrapper.eq(OrderItem::getProductCategoryId, productCategoryId);
}
if (spData != null && !spData.isEmpty()) {
queryWrapper.eq(OrderItem::getSpData, spData);
}
return queryWrapper;
}
}

View File

@ -1,5 +1,8 @@
package com.wzj.soopin.order.domain.query;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -24,4 +27,25 @@ public class OrderOperateHistoryQuery {
@ApiModelProperty("备注 精确匹配")
private String note;
public Wrapper<OrderOperateHistory> toWrapper() {
LambdaQueryWrapper<OrderOperateHistory> queryWrapper = new LambdaQueryWrapper<>();
if (orderSn != null && !orderSn.isEmpty()) {
queryWrapper.eq(OrderOperateHistory::getOrderSn, orderSn);
}
if (operateMan != null && !operateMan.isEmpty()) {
queryWrapper.eq(OrderOperateHistory::getOperateMan, operateMan);
}
if (orderStatus != null) {
queryWrapper.eq(OrderOperateHistory::getOrderStatus, orderStatus);
}
if (note != null && !note.isEmpty()) {
queryWrapper.eq(OrderOperateHistory::getNote, note);
}
return queryWrapper;
}
}

View File

@ -104,4 +104,8 @@ public class OrderQuery {
@ApiModelProperty("创建订单结束时间")
private LocalDateTime endTime;
public Object toWrapper() {
return null;
}
}

View File

@ -1,5 +1,8 @@
package com.wzj.soopin.order.domain.query;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -47,4 +50,54 @@ public class WechatPaymentHistoryQuery {
@ApiModelProperty("响应内容 精确匹配")
private String responseBody;
public Wrapper<WechatPaymentHistory> toWrapper() {
LambdaQueryWrapper<WechatPaymentHistory> queryWrapper = new LambdaQueryWrapper<>();
if (paymentId != null && !paymentId.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getPaymentId, paymentId);
}
if (memberId != null) {
queryWrapper.eq(WechatPaymentHistory::getMemberId, memberId);
}
if (openid != null && !openid.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getOpenid, openid);
}
if (realNameLike != null && !realNameLike.isEmpty()) {
// 注意字段名若为 real_name 需对应实体类属性
queryWrapper.like(WechatPaymentHistory::getRealName, realNameLike);
}
if (title != null && !title.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getTitle, title);
}
if (orderId != null) {
queryWrapper.eq(WechatPaymentHistory::getOrderId, orderId);
}
if (money != null) {
queryWrapper.eq(WechatPaymentHistory::getMoney, money);
}
if (opType != null) {
queryWrapper.eq(WechatPaymentHistory::getOpType, opType);
}
if (paymentStatus != null) {
queryWrapper.eq(WechatPaymentHistory::getPaymentStatus, paymentStatus);
}
if (attach != null && !attach.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getAttach, attach);
}
if (responseBody != null && !responseBody.isEmpty()) {
queryWrapper.eq(WechatPaymentHistory::getResponseBody, responseBody);
}
return queryWrapper;
}
}

View File

@ -1,5 +1,6 @@
package com.wzj.soopin.order.domain.vo;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -8,6 +9,7 @@ import java.math.BigDecimal;
@Data
@ApiModel("订单")
@InterceptorIgnore(tenantLine = "true")
public class ManagerOrderProductVO {
@ApiModelProperty("商品id")
private Long productId;

View File

@ -1,6 +1,9 @@
package com.wzj.soopin.order.domain.vo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wzj.soopin.order.domain.entity.Order;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -101,4 +104,73 @@ public class ManagerOrderVO {
private String mark;
private BigDecimal couponAmount;
public Wrapper<Order> toWrapper() {
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
if (id != null) {
queryWrapper.eq(Order::getId, id);
}
if (orderSn != null &&!orderSn.isEmpty()) {
queryWrapper.eq(Order::getOrderSn, orderSn);
}
if (status != null) {
queryWrapper.eq(Order::getStatus, status);
}
if (aftersaleStatus != null) {
queryWrapper.eq(Order::getAftersaleStatus, aftersaleStatus);
}
if (totalAmount != null) {
queryWrapper.eq(Order::getTotalAmount, totalAmount);
}
if (payAmount != null) {
queryWrapper.eq(Order::getPayAmount, payAmount);
}
if (createTime != null) {
queryWrapper.eq(Order::getCreateTime, createTime);
}
if (payType != null) {
queryWrapper.eq(Order::getPayType, payType);
}
if (receiveTime != null) {
queryWrapper.eq(Order::getReceiveTime, receiveTime);
}
if (note != null &&!note.isEmpty()) {
queryWrapper.like(Order::getNote, note);
}
if (merchantNote != null &&!merchantNote.isEmpty()) {
queryWrapper.like(Order::getMerchantNote, merchantNote);
}
if (deliveryTime != null) {
queryWrapper.eq(Order::getDeliveryTime, deliveryTime);
}
if (deliverySn != null &&!deliverySn.isEmpty()) {
queryWrapper.eq(Order::getDeliverySn, deliverySn);
}
if (receiverName != null &&!receiverName.isEmpty()) {
queryWrapper.like(Order::getReceiverName, receiverName);
}
if (receiverPhone != null &&!receiverPhone.isEmpty()) {
queryWrapper.eq(Order::getReceiverPhone, receiverPhone);
}
if (receiverProvince != null &&!receiverProvince.isEmpty()) {
queryWrapper.eq(Order::getReceiverProvince, receiverProvince);
}
if (receiverCity != null &&!receiverCity.isEmpty()) {
queryWrapper.eq(Order::getReceiverCity, receiverCity);
}
if (receiverDistrict != null &&!receiverDistrict.isEmpty()) {
queryWrapper.eq(Order::getReceiverDistrict, receiverDistrict);
}
if (receiverDetailAddress != null &&!receiverDetailAddress.isEmpty()) {
queryWrapper.like(Order::getReceiverDetailAddress, receiverDetailAddress);
}
if (couponAmount != null) {
queryWrapper.eq(Order::getCouponAmount, couponAmount);
}
return queryWrapper;
}
}

View File

@ -1,7 +1,10 @@
package com.wzj.soopin.order.domain.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wzj.soopin.order.domain.entity.OrderItem;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
@ -28,7 +31,11 @@ public class OrderVO extends BaseAudit {
/** 用户帐号 */
@Excel(name = "用户帐号")
private String memberUsername;
/** 订单总金额 */
/** 商家备注 */
@Excel(name = "商家备注")
private String merchantNote;
/** 订单总金额 */
@Excel(name = "订单总金额")
private BigDecimal totalAmount;
/** 采购价 */

View File

@ -0,0 +1,46 @@
package com.wzj.soopin.order.domain.vo;
import cn.hutool.core.text.CharSequenceUtil;
import com.wzj.soopin.order.utils.StringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 查询参数
*
* @author Chopper
*/
@Data
public class PageVO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "页号")
private Integer page = 1;
@ApiModelProperty(value = "页面大小")
private Integer size = 10;
@ApiModelProperty(value = "排序字段")
private String sort;
@ApiModelProperty(value = "排序方式 asc/desc")
private String order;
@ApiModelProperty(value = "需要驼峰转换蛇形", notes = "一般不做处理,如果数据库中就是蛇形,则这块需要处理。")
private Boolean notConvert;
public String getSort() {
if (CharSequenceUtil.isNotEmpty(sort)) {
if (notConvert == null || Boolean.FALSE.equals(notConvert)) {
return StringUtils.camel2Underline(sort);
} else {
return sort;
}
}
return sort;
}
}

View File

@ -0,0 +1,49 @@
package com.wzj.soopin.order.domain.vo;
import com.wzj.soopin.order.utils.DateUtil;
import com.wzj.soopin.order.utils.StringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
/**
* 日期搜索参数
*
* @author Chopper
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SearchVO implements Serializable {
@ApiModelProperty(value = "起始日期")
private String startDate;
@ApiModelProperty(value = "结束日期")
private String endDate;
public Date getConvertStartDate() {
if (StringUtils.isEmpty(startDate)) {
return null;
}
return DateUtil.toDate(startDate, DateUtil.STANDARD_DATE_FORMAT);
}
public Date getConvertEndDate() {
if (StringUtils.isEmpty(endDate)) {
return null;
}
//结束时间等于结束日期+1天 -1秒
Date date = DateUtil.toDate(endDate, DateUtil.STANDARD_DATE_FORMAT);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
calendar.set(Calendar.SECOND, -1);
return calendar.getTime();
}
}

View File

@ -1,7 +1,10 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -22,4 +25,5 @@ public interface AftersaleItemMapper extends BaseMapper<AftersaleItem> {
Integer insertBatch(@Param("list") List<AftersaleItem> list);
IPage<AftersaleItem> selectAftersale(@Param("query") AftersaleItemQuery query, IPage<AftersaleItem> pageParam);
}

View File

@ -1,10 +1,13 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.order.domain.entity.Aftersale;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
import com.wzj.soopin.order.domain.vo.OrderAndAftersaleStatisticsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -27,4 +30,5 @@ public interface AftersaleMapper extends BaseMapper<Aftersale> {
int countByMemberId(Long memberId);
OrderAndAftersaleStatisticsVO statPendingAndProcessing();
}

View File

@ -1,7 +1,16 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.query.OrderDeliveryHistoryQuery;
import com.wzj.soopin.order.domain.vo.OrderDeliveryHistoryVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.List;
@ -11,6 +20,10 @@ import java.util.List;
* @author zcc
*/
public interface OrderDeliveryHistoryMapper extends BaseMapper<OrderDeliveryHistory> {
IPage<OrderDeliveryHistoryVO> selectOderDeliveryHistory(@Param("query")OrderDeliveryHistoryQuery query, IPage<OrderDeliveryHistoryVO> pageParam);
/**
* 查询订单发货记录列表
*
@ -18,4 +31,6 @@ public interface OrderDeliveryHistoryMapper extends BaseMapper<OrderDeliveryHist
* @return 订单发货记录集合
*/
List<OrderDeliveryHistory> selectByEntity(OrderDeliveryHistory orderDeliveryHistory);
// IPage<OrderDeliveryHistoryVO> selectByEntity(OrderDeliveryHistoryQuery query ,Page<Object> objectPage);
}

View File

@ -1,7 +1,11 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.query.OrderItemQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -11,6 +15,8 @@ import java.util.List;
* @author zcc
*/
public interface OrderItemMapper extends BaseMapper<OrderItem> {
IPage<OrderItem> selectOrderItem(@Param("query") OrderItemQuery query, IPage<OrderItem> pageParam);
/**
* 查询订单中所包含的商品列表
*

View File

@ -1,5 +1,6 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.order.domain.entity.Order;
@ -25,6 +26,7 @@ public interface OrderMapper extends BaseMapper<Order> {
*/
List<Order> selectByEntity(Order order);
List<ManagerOrderVO> selectManagerOrderPage(ManagerOrderQueryForm request);
List<H5OrderVO> orderPage(@Param("status") Integer status, @Param("memberId")Long memberId);

View File

@ -1,7 +1,12 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -11,6 +16,7 @@ import java.util.List;
* @author zcc
*/
public interface OrderOperateHistoryMapper extends BaseMapper<OrderOperateHistory> {
/**
* 查询订单操作历史记录列表
*
@ -18,4 +24,6 @@ public interface OrderOperateHistoryMapper extends BaseMapper<OrderOperateHistor
* @return 订单操作历史记录集合
*/
List<OrderOperateHistory> selectByEntity(OrderOperateHistory orderOperateHistory);
IPage<OrderOperateHistory> selectOrderOperateHistory(@Param("query") OrderOperateHistoryQuery query, IPage<OrderItem> pageParam);
}

View File

@ -1,7 +1,11 @@
package com.wzj.soopin.order.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import com.wzj.soopin.order.domain.query.WechatPaymentHistoryQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -11,6 +15,9 @@ import java.util.List;
* @author zcc
*/
public interface WechatPaymentHistoryMapper extends BaseMapper<WechatPaymentHistory> {
IPage<WechatPaymentHistory> selectWechatPaymentHistory(@Param("query") WechatPaymentHistoryQuery query, IPage<WechatPaymentHistory> pageParam);
/**
* 查询微信订单表列表
*

View File

@ -1,101 +1,7 @@
package com.wzj.soopin.order.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import com.wzj.soopin.order.mapper.AftersaleItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单售后Service业务层处理
*
*
* @author zcc
*/
@Service
public class AftersaleItemService {
@Autowired
private AftersaleItemMapper aftersaleItemMapper;
/**
* 查询订单售后
*
* @param id 订单售后主键
* @return 订单售后
*/
public AftersaleItem selectById(Long id) {
return aftersaleItemMapper.selectById(id);
}
/**
* 查询订单售后列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单售后
*/
public List<AftersaleItem> selectList(AftersaleItemQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<AftersaleItem> qw = new QueryWrapper<>();
Long memberId = query.getMemberId();
if (memberId != null) {
qw.eq("member_id", memberId);
}
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
Long orderItemId = query.getOrderItemId();
if (orderItemId != null) {
qw.eq("order_item_id", orderItemId);
}
BigDecimal returnAmount = query.getReturnAmount();
if (returnAmount != null) {
qw.eq("return_amount", returnAmount);
}
Integer quantity = query.getQuantity();
if (quantity != null) {
qw.eq("quantity", quantity);
}
return aftersaleItemMapper.selectList(qw);
}
/**
* 新增订单售后
*
* @param aftersaleItem 订单售后
* @return 结果
*/
public int insert(AftersaleItem aftersaleItem) {
aftersaleItem.setCreateTime(LocalDateTime.now());
return aftersaleItemMapper.insert(aftersaleItem);
}
/**
* 修改订单售后
*
* @param aftersaleItem 订单售后
* @return 结果
*/
public int update(AftersaleItem aftersaleItem) {
return aftersaleItemMapper.updateById(aftersaleItem);
}
/**
* 删除订单售后信息
*
* @param id 订单售后主键
* @return 结果
*/
public int deleteById(Long id) {
return aftersaleItemMapper.deleteById(id);
}
public interface AftersaleItemService extends IService<AftersaleItem> {
}

View File

@ -1,469 +1,7 @@
package com.wzj.soopin.order.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.RefundNotification;
import com.wzj.soopin.goods.mapper.SkuMapper;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberWechat;
import com.wzj.soopin.member.mapper.MemberMapper;
import com.wzj.soopin.member.mapper.MemberWechatMapper;
import com.wzj.soopin.order.convert.OrderOperateHistoryConvert;
import com.wzj.soopin.order.domain.entity.*;
import com.wzj.soopin.order.domain.form.DealWithAftersaleForm;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.mapper.*;
import com.wzj.soopin.order.wechat.WechatPayService;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.enums.AftersaleStatus;
import org.dromara.common.core.enums.OrderRefundStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.Aftersale;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单售后Service业务层处理
*
* @author zcc
*/
@Service
@Slf4j
public class AftersaleService {
@Autowired
private AftersaleMapper aftersaleMapper;
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderItemMapper orderItemMapper;
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderOperateHistoryConvert historyConvert;
@Autowired
private SkuMapper skuMapper;
// @Autowired
// private MemberCouponService memberCouponService;
@Autowired
private WechatPaymentHistoryMapper wechatPaymentHistoryMapper;
@Autowired
private MemberWechatMapper memberWechatMapper;
@Autowired(required = false)
private WechatPayService wechatPayService;
@Autowired
private OrderOperateHistoryMapper operateHistoryMapper;
/**
* 查询订单售后
*
* @param id 订单售后主键
* @return 订单售后
*/
public ManagerRefundOrderDetailVO selectById(Long id) {
Order order = orderMapper.selectById(id);
if (order == null) {
throw new RuntimeException("无该订单信息");
}
ManagerRefundOrderDetailVO result = new ManagerRefundOrderDetailVO();
//订单基本信息
result.setOrderId(order.getId());
result.setOrderSn(order.getOrderSn());
result.setCreateTime(order.getCreateTime());
result.setPayType(order.getPayType());
result.setPayTime(order.getPaymentTime());
result.setStatus(order.getStatus());
result.setExpressName(order.getDeliveryCompany());
result.setDeliveryTime(order.getDeliveryTime());
result.setExpressNo(order.getDeliverySn());
result.setTotalAmount(order.getTotalAmount());
result.setPayAmount(order.getPayAmount());
//用户信息
Member member = memberMapper.selectById(order.getMemberId());
result.setNickName(member.getNickname());
result.setPhone(member.getPhoneHidden());
//收货信息
OrderAddressVO orderAddressVO = new OrderAddressVO();
orderAddressVO.setAddress(order.getReceiverDetailAddress());
orderAddressVO.setName(order.getReceiverName());
orderAddressVO.setUserPhone(order.getReceiverPhone());
orderAddressVO.setArea(order.getReceiverProvince() + order.getReceiverCity() + order.getReceiverDistrict());
result.setAddressInfo(orderAddressVO);
//orderItem
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.eq("order_id", id);
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemQw);
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(orderItem -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setPic(orderItem.getPic());
productVO.setSpData(orderItem.getSpData());
productVO.setProductName(orderItem.getProductName());
productVO.setSalePrice(orderItem.getSalePrice());
productVO.setBuyNum(orderItem.getQuantity());
productVO.setProductId(orderItem.getProductId());
productList.add(productVO);
});
result.setProductList(productList);
//售后信息
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", order.getId());
aftersaleQw.orderByDesc("create_time");
List<Aftersale> aftersaleList = aftersaleMapper.selectList(aftersaleQw);
List<RefundInfoVO> refundInfoList = new ArrayList<>();
aftersaleList.forEach(aftersale -> {
RefundInfoVO refundInfo = new RefundInfoVO();
refundInfo.setId(aftersale.getId());
refundInfo.setApplyRefundType(aftersale.getType());
refundInfo.setApplyRefundTime(aftersale.getCreateTime());
refundInfo.setRefundAmount(aftersale.getReturnAmount());
refundInfo.setReason(aftersale.getReason());
refundInfo.setDescription(aftersale.getDescription());
refundInfo.setProofPics(aftersale.getProofPics());
refundInfo.setRefundStatus(aftersale.getStatus());
refundInfo.setRefundWpCode(aftersale.getRefundWpCode());
refundInfo.setRefundWaybillCode(aftersale.getRefundWaybillCode());
refundInfo.setRefundStatus(aftersale.getStatus());
refundInfo.setRemark(aftersale.getHandleNote());
refundInfoList.add(refundInfo);
});
result.setRefundInfoList(refundInfoList);
return result;
}
/**
* 查询订单售后列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单售后
*/
public List<ManagerRefundOrderVO> selectList(ManagerAftersaleOrderForm query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
if (StrUtil.isNotBlank(query.getOrderSn()) && query.getOrderSn().length() > 7) {
query.setOrderSn(query.getOrderSn().substring(7));
}
List<ManagerRefundOrderVO> managerRefundOrderVOS = aftersaleMapper.selectManagerRefundOrder(query);
if (CollectionUtil.isEmpty(managerRefundOrderVOS)) {
return managerRefundOrderVOS;
}
Set<Long> idSet = managerRefundOrderVOS.stream().map(ManagerRefundOrderVO::getOrderId).collect(Collectors.toSet());
//查一下orderSn集合
QueryWrapper<Order> orderQw = new QueryWrapper<>();
orderQw.in("id", idSet);
Map<Long, Order> orderMap = orderMapper.selectList(orderQw).stream().collect(Collectors.toMap(Order::getId, it -> it));
//封装售后单商品数据
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.in("order_id", idSet);
Map<Long, List<OrderItem>> orderItemMap = orderItemMapper.selectList(orderItemQw).stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
managerRefundOrderVOS.forEach(vo -> {
Order order = orderMap.get(vo.getOrderId());
vo.setOrderSn(order.getOrderSn());
List<OrderItem> orderItemList = orderItemMap.get(vo.getOrderId());
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setProductName(item.getProductName());
productVO.setSalePrice(item.getSalePrice());
productVO.setPic(item.getPic());
productVO.setBuyNum(item.getQuantity());
productVO.setProductId(item.getProductId());
productVO.setSpData(item.getSpData());
productList.add(productVO);
});
vo.setProductList(productList);
});
return managerRefundOrderVOS;
}
/**
* 新增订单售后
*
* @param aftersale 订单售后
* @return 结果
*/
public int insert(Aftersale aftersale) {
aftersale.setCreateTime(LocalDateTime.now());
return aftersaleMapper.insert(aftersale);
}
/**
* 修改订单售后
*
* @param aftersale 订单售后
* @return 结果
*/
public int update(Aftersale aftersale) {
return aftersaleMapper.updateById(aftersale);
}
/**
* 删除订单售后信息
*
* @param id 订单售后主键
* @return 结果
*/
public int deleteById(Long id) {
return aftersaleMapper.deleteById(id);
}
/**
* 售后处理
*
* @param request 请求体
* @param
* @return
*/
@Transactional(rollbackFor = Exception.class)
public void dealWith(DealWithAftersaleForm request, Long userId, String optUserName) {
Order order = orderMapper.selectById(request.getOrderId());
if (order == null) {
throw new RuntimeException("无该订单");
}
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", request.getOrderId());
if (request.getOptType() == 3) {
aftersaleQw.eq("status", 1);
} else {
aftersaleQw.eq("status", 0);
}
Aftersale aftersale = aftersaleMapper.selectOne(aftersaleQw);
if (aftersale == null) {
throw new RuntimeException("没有售后单");
}
//售后状态与售后类型是否对应
if (Constants.OptType.AGREE.equals(request.getOptType()) || Constants.OptType.REFUSE.equals(request.getOptType())) {
if (!AftersaleStatus.APPLY.getType().equals(aftersale.getStatus())) {
throw new RuntimeException("订单状态错误,请刷新页面后重试!");
}
} else {
if (!AftersaleStatus.WAIT.getType().equals(aftersale.getStatus())) {
throw new RuntimeException("订单状态错误,请刷新页面后重试!");
}
}
//拒绝则理由必填
if (Constants.OptType.REFUSE.equals(request.getOptType()) && StrUtil.isBlank(request.getRemark())) {
throw new RuntimeException("请填写拒绝理由");
}
LocalDateTime optDate = LocalDateTime.now();
//要创建的订单操作记录status后续判断再设置
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOrderSn(order.getOrderSn());
optHistory.setOperateMan("后台管理员");
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(userId);
optHistory.setUpdateBy(userId);
optHistory.setUpdateTime(optDate);
//封装售后wrapper
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", request.getOrderId());
aftersaleWrapper.eq("status", AftersaleStatus.APPLY.getType());
aftersaleWrapper.set("handle_man", optUserName);
aftersaleWrapper.set("update_time", optDate);
aftersaleWrapper.set("handle_time", optDate);
aftersaleWrapper.set("update_by", userId);
//封装订单wrapper
UpdateWrapper<Order> orderWrapper = new UpdateWrapper<>();
orderWrapper.eq("id", request.getOrderId());
orderWrapper.set("update_time", optDate);
orderWrapper.set("update_by", userId);
//更新订单售后单创建操作记录
if (request.getOptType().equals(Constants.OptType.REFUSE)) {
aftersaleWrapper.set("status", AftersaleStatus.REJECT.getType());
aftersaleWrapper.set("handle_note", request.getRemark());
orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType());
optHistory.setOrderStatus(14);
} else if (request.getOptType().equals(Constants.OptType.AGREE)) {
aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType());
orderWrapper.set("aftersale_status", Objects.equals(aftersale.getType(), 1) ? 3 : 2);
optHistory.setOrderStatus(12);
} else {
//如果是退货退款 order身上的售后状态应该是保持不变的 仅退款的话就进入退款了
orderWrapper.set("aftersale_status", 3);
int row = orderMapper.update(null, orderWrapper);
if (row != 1) {
throw new RuntimeException("修改订单状态失败");
}
}
int rows = aftersaleMapper.update(null, aftersaleWrapper);
// if (rows < 1) {
// throw new RuntimeException("更新售后单失败");
// }
rows = orderMapper.update(null, orderWrapper);
if (rows < 1) {
throw new RuntimeException("更新订单失败");
}
rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1) {
throw new RuntimeException("创建订单操作记录失败");
}
// 是否需要发起退款
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
tradeRefund(aftersale, order, optDate, userId);
}
}
public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) {
//查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
qw.eq("order_id", order.getPayId()).eq("op_type", 1);
WechatPaymentHistory history = wechatPaymentHistoryMapper.selectOne(qw);
//查用户的微信信息
QueryWrapper<MemberWechat> wechatQw = new QueryWrapper<>();
wechatQw.eq("member_id", order.getMemberId());
MemberWechat memberWechat = memberWechatMapper.selectOne(wechatQw);
//查订单item
QueryWrapper<OrderItem> itemQw = new QueryWrapper<>();
itemQw.eq("order_id", order.getId());
OrderItem orderItem = orderItemMapper.selectList(itemQw).get(0);
//开始退款
Refund wechatResponse = wechatPayService.refundPay(returnApply.getId() + "",
order.getPayId() + "",
"https://mall.ichengle.top/api/no-auth/wechat/weChatRefundNotify",
returnApply.getReturnAmount().multiply(new BigDecimal("100")).longValue(),
history.getMoney().multiply(new BigDecimal("100")).longValue(), returnApply.getReason());
log.info("发起微信退款返回信息,tradeRefund:{}", JSONObject.toJSONString(wechatResponse == null ? "" : wechatResponse));
if (wechatResponse != null && Arrays.asList("PROCESSING", "SUCCESS").contains(wechatResponse.getStatus().name())) {
qw = new QueryWrapper<>();
qw.eq("order_id", order.getId()).eq("op_type", 3);
WechatPaymentHistory refundHistory = wechatPaymentHistoryMapper.selectOne(qw);
if (refundHistory == null) {
WechatPaymentHistory wechatPaymentHistory = new WechatPaymentHistory();
wechatPaymentHistory.setPaymentId(wechatResponse.getRefundId());
wechatPaymentHistory.setMemberId(order.getMemberId());
LambdaQueryWrapper<WechatPaymentHistory> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(WechatPaymentHistory::getOrderId, order.getPayId());
queryWrapper.eq(WechatPaymentHistory::getOpType, Constants.PaymentOpType.PAY);
WechatPaymentHistory payHistory = wechatPaymentHistoryMapper.selectOne(queryWrapper);
wechatPaymentHistory.setOpenid(payHistory.getOpenid());
wechatPaymentHistory.setTitle(orderItem.getProductName());
wechatPaymentHistory.setOrderId(order.getId());
wechatPaymentHistory.setMoney(returnApply.getReturnAmount().multiply(new BigDecimal("100")));
wechatPaymentHistory.setOpType(3);
wechatPaymentHistory.setPaymentStatus(0);
wechatPaymentHistory.setResponseBody(JSON.toJSONString(wechatResponse));
wechatPaymentHistory.setCreateTime(optDate);
wechatPaymentHistory.setUpdateTime(optDate);
wechatPaymentHistory.setCreateBy(userId);
wechatPaymentHistory.setUpdateBy(userId);
wechatPaymentHistoryMapper.insert(wechatPaymentHistory);
} else {
UpdateWrapper<WechatPaymentHistory> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", refundHistory.getId())
.set("payment_id", wechatResponse.getRefundId()).set("update_time", optDate);
wechatPaymentHistoryMapper.update(null, updateWrapper);
}
}
}
/**
* 订单退款回调MQ
*
* @param weChatRefundNotify
*/
@Transactional
public void refundOrderExc(RefundNotification weChatRefundNotify) {
log.info("收到订单回调MQ" + JSONObject.toJSONString(weChatRefundNotify));
if ("PROCESSING".equals(weChatRefundNotify.getRefundStatus().name())) {
return;
}
//查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
qw.eq("payment_id", weChatRefundNotify.getRefundId()).eq("op_type", 3);
WechatPaymentHistory history = wechatPaymentHistoryMapper.selectOne(qw);
if (history == null) {
log.info("未找到退款单");
throw new RuntimeException();
}
LocalDateTime optDate = LocalDateTime.now();
QueryWrapper<Order> orderQw = new QueryWrapper<>();
orderQw.eq("id", history.getOrderId());
Order order = orderMapper.selectOne(orderQw);
if (order.getStatus() == OrderRefundStatus.SUCCESS.getType()) {
log.info("订单已经是退款成功状态");
throw new RuntimeException();
}
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", history.getOrderId()).eq("status", AftersaleStatus.WAIT.getType());
if ("SUCCESS".equals(weChatRefundNotify.getRefundStatus().name())) {
//更改订单表
UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>();
orderUpdateWrapper.eq("id", history.getOrderId())
.set("aftersale_status", OrderRefundStatus.SUCCESS.getType());
orderMapper.update(null, orderUpdateWrapper);
//更改 售后表
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", history.getOrderId()).set("status", AftersaleStatus.SUCCESS.getType());
aftersaleMapper.update(null, aftersaleWrapper);
//更改 微信表
UpdateWrapper<WechatPaymentHistory> paymentWrapper = new UpdateWrapper<>();
paymentWrapper.eq("payment_id", weChatRefundNotify.getRefundId()).eq("op_type", 3)
.set("payment_status", 1);
wechatPaymentHistoryMapper.update(null, paymentWrapper);
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOperateMan("系统");
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(order.getMemberId());
optHistory.setUpdateBy(order.getMemberId());
optHistory.setUpdateTime(optDate);
optHistory.setOrderStatus(13);
operateHistoryMapper.insert(optHistory);
// 回滚商品和sku销量
OrderItem orderItem = orderItemMapper.selectOne(new QueryWrapper<OrderItem>().eq("order_id", order.getId()));
skuMapper.updateStockById(orderItem.getSkuId(), LocalDateTime.now(), -1 * orderItem.getQuantity());
//退还优惠券
// if (order.getMemberCouponId() != null) {
// memberCouponService.backCoupon(Arrays.asList(order.getMemberCouponId()));
// }
} else {
//更改订单表
UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>();
orderUpdateWrapper.eq("id", history.getOrderId())
.set("aftersale_status", OrderRefundStatus.FAIL.getType());
orderMapper.update(null, orderUpdateWrapper);
}
}
public List<OrderOperateHistoryVO> log(Long orderId) {
LambdaQueryWrapper<OrderOperateHistory> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(OrderOperateHistory::getOrderId, orderId);
wrapper.in(OrderOperateHistory::getOrderStatus, Arrays.asList(11, 12, 13, 14));
wrapper.orderByDesc(OrderOperateHistory::getCreateTime);
List<OrderOperateHistory> historyList = orderOperateHistoryMapper.selectList(wrapper);
return historyConvert.dos2vos(historyList);
}
public Aftersale queryAfterSale(Long orderId) {
QueryWrapper<Aftersale> itemQw = new QueryWrapper<>();
itemQw.eq("order_id",orderId);
itemQw.in("status",Arrays.asList(AftersaleStatus.APPLY.getType(),AftersaleStatus.WAIT.getType()));
return aftersaleMapper.selectOne(itemQw);
}
public interface AftersaleService extends IService<Aftersale> {
}

View File

@ -1,93 +1,7 @@
package com.wzj.soopin.order.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.query.OrderDeliveryHistoryQuery;
import com.wzj.soopin.order.mapper.OrderDeliveryHistoryMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单发货记录Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderDeliveryHistoryService {
@Autowired
private OrderDeliveryHistoryMapper orderDeliveryHistoryMapper;
/**
* 查询订单发货记录
*
* @param id 订单发货记录主键
* @return 订单发货记录
*/
public OrderDeliveryHistory selectById(Long id) {
return orderDeliveryHistoryMapper.selectById(id);
}
/**
* 查询订单发货记录列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单发货记录
*/
public List<OrderDeliveryHistory> selectList(OrderDeliveryHistoryQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<OrderDeliveryHistory> qw = new QueryWrapper<>();
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
String deliveryCompany = query.getDeliveryCompany();
if (!StringUtils.isEmpty(deliveryCompany)) {
qw.eq("delivery_company", deliveryCompany);
}
String deliverySn = query.getDeliverySn();
if (!StringUtils.isEmpty(deliverySn)) {
qw.eq("delivery_sn", deliverySn);
}
return orderDeliveryHistoryMapper.selectList(qw);
}
/**
* 新增订单发货记录
*
* @param orderDeliveryHistory 订单发货记录
* @return 结果
*/
public int insert(OrderDeliveryHistory orderDeliveryHistory) {
orderDeliveryHistory.setCreateTime(LocalDateTime.now());
return orderDeliveryHistoryMapper.insert(orderDeliveryHistory);
}
/**
* 修改订单发货记录
*
* @param orderDeliveryHistory 订单发货记录
* @return 结果
*/
public int update(OrderDeliveryHistory orderDeliveryHistory) {
return orderDeliveryHistoryMapper.updateById(orderDeliveryHistory);
}
/**
* 删除订单发货记录信息
*
* @param id 订单发货记录主键
* @return 结果
*/
public int deleteById(Long id) {
return orderDeliveryHistoryMapper.deleteById(id);
}
public interface OrderDeliveryHistoryService extends IService<OrderDeliveryHistory> {
}

View File

@ -1,172 +1,7 @@
package com.wzj.soopin.order.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.order.domain.dto.OrderProductListDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.query.OrderItemQuery;
import com.wzj.soopin.order.mapper.OrderItemMapper;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.utils.IDGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* 订单中所包含的商品Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderItemService extends ServiceImpl<OrderItemMapper, OrderItem> {
@Autowired
private OrderItemMapper orderItemMapper;
/**
* 查询订单中所包含的商品
*
* @param id 订单中所包含的商品主键
* @return 订单中所包含的商品
*/
public OrderItem selectById(Long id) {
return orderItemMapper.selectById(id);
}
/**
* 查询订单中所包含的商品列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单中所包含的商品
*/
public List<OrderItem> selectList(OrderItemQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
Long productId = query.getProductId();
if (productId != null) {
qw.eq("product_id", productId);
}
String outProductId = query.getOutProductId();
if (!StringUtils.isEmpty(outProductId)) {
qw.eq("out_product_id", outProductId);
}
Long skuId = query.getSkuId();
if (skuId != null) {
qw.eq("sku_id", skuId);
}
String outSkuId = query.getOutSkuId();
if (!StringUtils.isEmpty(outSkuId)) {
qw.eq("out_sku_id", outSkuId);
}
Long productSnapshotId = query.getProductSnapshotId();
if (productSnapshotId != null) {
qw.eq("product_snapshot_id", productSnapshotId);
}
Long skuSnapshotId = query.getSkuSnapshotId();
if (skuSnapshotId != null) {
qw.eq("sku_snapshot_id", skuSnapshotId);
}
String pic = query.getPic();
if (!StringUtils.isEmpty(pic)) {
qw.eq("pic", pic);
}
String productNameLike = query.getProductNameLike();
if (!StringUtils.isEmpty(productNameLike)) {
qw.like("product_name", productNameLike);
}
BigDecimal salePrice = query.getSalePrice();
if (salePrice != null) {
qw.eq("sale_price", salePrice);
}
BigDecimal purchasePrice = query.getPurchasePrice();
if (purchasePrice != null) {
qw.eq("purchase_price", purchasePrice);
}
Integer quantity = query.getQuantity();
if (quantity != null) {
qw.eq("quantity", quantity);
}
Long productCategoryId = query.getProductCategoryId();
if (productCategoryId != null) {
qw.eq("product_category_id", productCategoryId);
}
String spData = query.getSpData();
if (!StringUtils.isEmpty(spData)) {
qw.eq("sp_data", spData);
}
return orderItemMapper.selectList(qw);
}
/**
* 新增订单中所包含的商品
*
* @param orderItem 订单中所包含的商品
* @return 结果
*/
public int insert(OrderItem orderItem) {
orderItem.setCreateTime(LocalDateTime.now());
return orderItemMapper.insert(orderItem);
}
/**
* 修改订单中所包含的商品
*
* @param orderItem 订单中所包含的商品
* @return 结果
*/
public int update(OrderItem orderItem) {
return orderItemMapper.updateById(orderItem);
}
/**
* 删除订单中所包含的商品信息
*
* @param id 订单中所包含的商品主键
* @return 结果
*/
public int deleteById(Long id) {
return orderItemMapper.deleteById(id);
}
@Transactional
public void saveOrderItem(Member member, LocalDateTime optTime,
Long orderId, List<OrderProductListDTO> list){
List<OrderItem> addOrderItemList = new ArrayList<>();
list.forEach(item -> {
OrderItem orderItem = new OrderItem();
orderItem.setId(IDGenerator.generateId());
orderItem.setOrderId(orderId);
orderItem.setProductId(item.getProduct().getId());
orderItem.setOutProductId(item.getProduct().getOutProductId());
orderItem.setSkuId(item.getSku().getId());
orderItem.setOutSkuId(item.getSku().getOutSkuId());
orderItem.setPic(item.getSku().getPic());
orderItem.setProductName(item.getProduct().getName());
orderItem.setSalePrice(item.getSku().getPrice());
orderItem.setQuantity(item.getQuantity());
orderItem.setProductCategoryId(item.getProduct().getCategoryId());
orderItem.setSpData(item.getSku().getSpData());
orderItem.setCreateBy(member.getId());
orderItem.setCreateTime(optTime);
addOrderItemList.add(orderItem);
});
boolean flag = saveBatch(addOrderItemList);
if (!flag){
throw new RuntimeException("新增订单item失败");
}
}
public interface OrderItemService extends IService<OrderItem> {
}

View File

@ -1,100 +1,7 @@
package com.wzj.soopin.order.service;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单操作历史记录Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderOperateHistoryService extends ServiceImpl<OrderOperateHistoryMapper, OrderOperateHistory> {
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
/**
* 查询订单操作历史记录
*
* @param id 订单操作历史记录主键
* @return 订单操作历史记录
*/
public OrderOperateHistory selectById(Long id) {
return orderOperateHistoryMapper.selectById(id);
}
/**
* 查询订单操作历史记录列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单操作历史记录
*/
public List<OrderOperateHistory> selectList(OrderOperateHistoryQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<OrderOperateHistory> qw = new QueryWrapper<>();
String orderSn = query.getOrderSn();
if (StrUtil.isNotBlank(orderSn)) {
qw.eq("order_sn", orderSn);
}
String operateMan = query.getOperateMan();
if (!StringUtils.isEmpty(operateMan)) {
qw.eq("operate_man", operateMan);
}
Integer orderStatus = query.getOrderStatus();
if (orderStatus != null) {
qw.eq("order_status", orderStatus);
}
String note = query.getNote();
if (!StringUtils.isEmpty(note)) {
qw.eq("note", note);
}
qw.orderByDesc("create_time");
return orderOperateHistoryMapper.selectList(qw);
}
/**
* 新增订单操作历史记录
*
* @param orderOperateHistory 订单操作历史记录
* @return 结果
*/
public int insert(OrderOperateHistory orderOperateHistory) {
orderOperateHistory.setCreateTime(LocalDateTime.now());
return orderOperateHistoryMapper.insert(orderOperateHistory);
}
/**
* 修改订单操作历史记录
*
* @param orderOperateHistory 订单操作历史记录
* @return 结果
*/
public int update(OrderOperateHistory orderOperateHistory) {
return orderOperateHistoryMapper.updateById(orderOperateHistory);
}
/**
* 删除订单操作历史记录信息
*
* @param id 订单操作历史记录主键
* @return 结果
*/
public int deleteById(Long id) {
return orderOperateHistoryMapper.deleteById(id);
}
public interface OrderOperateHistoryService extends IService<OrderOperateHistory> {
}

View File

@ -1,402 +1,7 @@
package com.wzj.soopin.order.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.goods.convert.SkuConvert;
import com.wzj.soopin.goods.mapper.ProductMapper;
import com.wzj.soopin.goods.mapper.SkuMapper;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.order.convert.OrderConvert;
import com.wzj.soopin.order.convert.OrderOperateHistoryConvert;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.form.DeliverProductForm;
import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm;
import com.wzj.soopin.order.domain.query.OrderH5Query;
import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.mapper.OrderDeliveryHistoryMapper;
import com.wzj.soopin.order.mapper.OrderItemMapper;
import com.wzj.soopin.order.mapper.OrderMapper;
import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper;
import com.wzj.soopin.order.utils.AesCryptoUtils;
import com.wzj.soopin.order.utils.SecurityUtils;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.utils.PhoneUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.wzj.soopin.member.mapper.MemberAddressMapper;
import com.wzj.soopin.member.mapper.MemberCartMapper;
import com.wzj.soopin.member.mapper.MemberMapper;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单表Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderConvert orderConvert;
@Autowired
private OrderItemMapper orderItemMapper;
@Autowired
private MemberAddressMapper memberAddressMapper;
@Autowired
private SkuMapper skuMapper;
@Autowired
private ProductMapper productMapper;
@Autowired
private SkuConvert skuConvert;
@Autowired
private OrderItemService orderItemService;
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
@Autowired
private MemberCartMapper memberCartMapper;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderDeliveryHistoryMapper orderDeliveryHistoryMapper;
@Autowired
private OrderOperateHistoryConvert historyConvert;
/**
* 查询订单表
*
* @param id 订单表主键
* @return 订单表
*/
public ManagerOrderDetailVO selectById(Long id) {
Order order = orderMapper.selectById(id);
if (order == null){
throw new RuntimeException("查不到订单信息");
}
ManagerOrderDetailVO managerOrderDetailVO = new ManagerOrderDetailVO();
//封装订单信息
managerOrderDetailVO.setOrderId(id);
managerOrderDetailVO.setCouponAmount(order.getCouponAmount());
managerOrderDetailVO.setOrderSn(order.getOrderSn());
managerOrderDetailVO.setOrderStatus(order.getStatus());
managerOrderDetailVO.setCreateTime(order.getCreateTime());
managerOrderDetailVO.setDeliveryTime(order.getDeliveryTime());
managerOrderDetailVO.setExpressName(order.getDeliveryCompany());
managerOrderDetailVO.setExpressNo(order.getDeliverySn());
managerOrderDetailVO.setPayAmount(order.getPayAmount());
managerOrderDetailVO.setPayTime(order.getPaymentTime());
managerOrderDetailVO.setPayType(order.getPayType());
managerOrderDetailVO.setTotalAmount(order.getTotalAmount());
managerOrderDetailVO.setPayAmount(order.getPayAmount());
managerOrderDetailVO.setReceiveTime(order.getReceiveTime());
//封装订单地址信息
ManagerOrderAddressVo managerOrderAddressVo = new ManagerOrderAddressVo();
managerOrderAddressVo.setUserPhone(order.getReceiverPhone());
managerOrderAddressVo.setAddress(order.getReceiverDetailAddress());
managerOrderAddressVo.setArea(
order.getReceiverProvince() +
order.getReceiverCity() +
order.getReceiverDistrict());
managerOrderAddressVo.setName(order.getReceiverName());
managerOrderDetailVO.setAddressInfo(managerOrderAddressVo);
//查询会员信息
Member member = memberMapper.selectById(order.getMemberId());
managerOrderDetailVO.setUserName(member.getNickname());
managerOrderDetailVO.setUserPhone(member.getPhoneHidden());
//查询购买商品信息
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.eq("order_id", order.getId());
List<OrderItem> orderItemList = orderItemMapper.selectList(qw);
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setProductId(item.getProductId());
productVO.setBuyNum(item.getQuantity());
productVO.setPic(item.getPic());
productVO.setProductName(item.getProductName());
productVO.setSalePrice(item.getSalePrice());
productVO.setSpData(item.getSpData());
productList.add(productVO);
});
managerOrderDetailVO.setProductInfo(productList);
return managerOrderDetailVO;
}
/**
* 查询订单表列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单表
*/
public PageImpl<ManagerOrderVO> selectList(ManagerOrderQueryForm query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
if (!StringUtils.isEmpty(query.getUserPhone())){
// query.setUserPhone(AesCryptoUtils.encrypt(aesKey, query.getUserPhone()));
}
List<ManagerOrderVO> managerOrderVOList = orderMapper.selectManagerOrderPage(query);
if (CollectionUtil.isEmpty(managerOrderVOList)){
return new PageImpl<>(managerOrderVOList, page, 0);
}
long total = managerOrderVOList.size();
Map<Long, ManagerOrderVO> orderMap = managerOrderVOList.stream().collect(Collectors.toMap(ManagerOrderVO::getId, it -> it, (v1,v2) -> v2, LinkedHashMap::new));
//查orderItem
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.in("order_id", orderMap.keySet());
Map<Long, List<OrderItem>> groupedOrderItemMap = orderItemMapper.selectList(qw)
.stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
groupedOrderItemMap.keySet().forEach(key -> {
ManagerOrderVO managerOrderVO = orderMap.get(key);
managerOrderVO.setBuyNum(0);
List<OrderItem> orderItemList = groupedOrderItemMap.get(key);
List<ManagerOrderProductVO> addProductList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO vo = new ManagerOrderProductVO();
vo.setProductName(item.getProductName());
vo.setSalePrice(item.getSalePrice());
vo.setPic(item.getPic());
vo.setBuyNum(item.getQuantity());
vo.setProductId(item.getProductId());
vo.setSpData(item.getSpData());
addProductList.add(vo);
managerOrderVO.setBuyNum(managerOrderVO.getBuyNum() + item.getQuantity());
});
managerOrderVO.setProductList(addProductList);
});
return new PageImpl<>(new ArrayList<>(orderMap.values()), page, total);
}
/**
* 新增订单表
*
* @param order 订单表
* @return 结果
*/
public int insert(Order order) {
order.setCreateTime(LocalDateTime.now());
return orderMapper.insert(order);
}
/**
* 修改订单表
*
* @param order 订单表
* @return 结果
*/
public int update(Order order) {
return orderMapper.updateById(order);
}
/**
* 删除订单表信息
*
* @param id 订单表主键
* @return 结果
*/
public int deleteById(Long id) {
return orderMapper.deleteById(id);
}
public Page<OrderVO> queryOrderPage(OrderH5Query query, Pageable pageReq) {
QueryWrapper<Order> qw = new QueryWrapper<>();
qw.eq("member_id", SecurityUtils.getUserId());
IPage<Order> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>();
page.setCurrent(pageReq.getPageNumber())
.setSize(pageReq.getPageSize());
if (CollUtil.isEmpty(pageReq.getSort())) {
pageReq.getSort().forEach(it -> {
qw.orderBy(true, it.getDirection().isAscending(), it.getProperty());
});
}
Integer tab = query.getTab();
if (tab != null) {
qw.eq("delete_status", 0);
if (tab == 1) {
qw.eq("status", 0);
} else if (tab == 2) {
qw.eq("status", 1);
qw.eq("aftersale_status", 1);
} else if (tab == 3) {
qw.eq("status", 2);
qw.eq("confirm_status", 0);
} else if (tab == 4) {
qw.eq("status", 2);
qw.eq("confirm_status", 1);
}
}
orderMapper.selectPage(page, qw);
List<Order> orders = page.getRecords();
long total = page.getPages();
if (CollUtil.isEmpty(orders)) {
return new PageImpl<>(Collections.emptyList(), pageReq, total);
}
LambdaQueryWrapper<OrderItem> qw1 = new LambdaQueryWrapper<>();
qw1.in(OrderItem::getOrderId, orders.stream().map(Order::getId).collect(Collectors.toList()));
Map<Long, List<OrderItem>> oid2items = orderItemMapper.selectList(qw1)
.stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
List<OrderVO> res = orderConvert.dos2vos(orders);
res.forEach(it -> {
it.setItems(oid2items.get(it.getId()));
});
return new PageImpl<>(res, pageReq, total);
}
public Integer saveMerchantNote(Order order) {
Order orderInDb = orderMapper.selectById(order.getId());
if (orderInDb == null){
throw new RuntimeException("订单不存在");
}
UpdateWrapper<Order> qw = new UpdateWrapper<>();
qw.eq("id", order.getId());
qw.set("merchant_note", order.getMerchantNote());
return orderMapper.update(null, qw);
}
/**
* 管理后台发货
* 目前发货是这样的待发货已发货已完成都能执行发货每次都会创建一条新的发货记录且修改订单发货信息
* @param request 发货请求
* @param userId 操作人
* @return 结果
*/
@Transactional
public String deliverProduct(DeliverProductForm request, Long userId) {
//查询订单
Order order = orderMapper.selectById(request.getOrderId());
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.eq("order_id", request.getOrderId());
List<OrderItem> orderItemList = orderItemMapper.selectList(qw);
if (order == null || CollectionUtil.isEmpty(orderItemList)){
throw new RuntimeException("未找到该订单信息");
}
// 是否为待发货已发货 已完成
if (!(Constants.OrderStatus.SEND.equals(order.getStatus())
|| Constants.OrderStatus.GET.equals(order.getStatus())
|| Constants.OrderStatus.CONFIRM.equals(order.getStatus()))){
throw new RuntimeException("订单状态错误");
}
Integer orderStatus =
Constants.OrderStatus.SEND.equals(order.getStatus()) ? Constants.OrderStatus.GET : order.getStatus();
//更新订单
LocalDateTime optDate = LocalDateTime.now();
order.setUpdateBy(null);
order.setStatus(orderStatus);
order.setDeliveryTime(optDate);
order.setUpdateTime(optDate);
order.setDeliveryCompany(request.getExpressName());
order.setDeliverySn(request.getExpressSn());
orderMapper.updateById(order);
//创建新的发货记录
this.createDeliveryHistory(request, userId, optDate);
//创建订单操作记录
this.createOrderOptHistory(order.getId(), order.getOrderSn(), orderStatus, userId, optDate);
return "发货成功";
}
/**
* 创建发货记录
* @param request 发货请求
* @param userId 操作人
* @param optDate 操作时间
*/
private void createDeliveryHistory(DeliverProductForm request, Long userId, LocalDateTime optDate){
OrderDeliveryHistory orderDeliveryHistory = new OrderDeliveryHistory();
orderDeliveryHistory.setOrderId(request.getOrderId());
orderDeliveryHistory.setDeliveryCompany(request.getExpressName());
orderDeliveryHistory.setDeliverySn(request.getExpressSn());
orderDeliveryHistory.setCreateTime(optDate);
orderDeliveryHistory.setCreateBy(userId);
int rows = orderDeliveryHistoryMapper.insert(orderDeliveryHistory);
if (rows < 1) {
throw new RuntimeException("新增订单发货记录失败");
}
}
/**
* 创建订单操作历史
* @param orderId 订单id
* @param orderStatus 订单状态
* @param userId 操作人
* @param optDate 操作时间
*/
private void createOrderOptHistory(Long orderId, String orderSn, Integer orderStatus, Long userId, LocalDateTime optDate){
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(orderId);
optHistory.setOrderSn(orderSn);
optHistory.setOperateMan(SecurityUtils.getUsername());
optHistory.setOrderStatus(orderStatus);
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(userId);
optHistory.setUpdateBy(userId);
optHistory.setUpdateTime(optDate);
int rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1) {
throw new RuntimeException("新增订单操作记录失败");
}
}
/**
* 根据订单id查询订单操作日志
* @param orderId 订单id
* @return 结果
*/
public List<OrderOperateHistoryVO> log(Long orderId) {
LambdaQueryWrapper<OrderOperateHistory> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(OrderOperateHistory::getOrderId, orderId);
wrapper.in(OrderOperateHistory::getOrderStatus, Arrays.asList(0, 1, 2, 3, 4));
wrapper.orderByDesc(OrderOperateHistory::getCreateTime);
List<OrderOperateHistory> historyList = orderOperateHistoryMapper.selectList(wrapper);
return historyConvert.dos2vos(historyList);
}
public String decryptPhone(Long orderId) {
Order order = orderMapper.selectById(orderId);
String receiverPhoneEncrypted = order.getReceiverPhoneEncrypted();
if(receiverPhoneEncrypted!=null){
// return AesCryptoUtils.decrypt(aesKey,receiverPhoneEncrypted);
return null;
}else {
return null;
}
}
public Boolean updateReceiver(Order order) {
Order dbOrder = orderMapper.selectById(order.getId());
if (dbOrder == null) {
return false;
}
UpdateWrapper<Order> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("receiver_name",order.getReceiverName())
.set("receiver_phone", PhoneUtils.hidePhone(order.getReceiverPhone()))
.set("receiver_city",order.getReceiverCity())
.set("receiver_district",order.getReceiverDistrict())
.set("receiver_province",order.getReceiverProvince())
.set("receiver_detail_address",order.getReceiverDetailAddress())
// .set("receiver_phone_encrypted", AesCryptoUtils.encrypt(aesKey, order.getReceiverPhone()))
.set("update_time",LocalDateTime.now());
updateWrapper.eq("id",order.getId());
int update = orderMapper.update(null, updateWrapper);
return update == 1;
}
public interface OrderService extends IService<Order> {
}

View File

@ -1,126 +1,7 @@
package com.wzj.soopin.order.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import com.wzj.soopin.order.domain.query.WechatPaymentHistoryQuery;
import com.wzj.soopin.order.mapper.WechatPaymentHistoryMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 微信订单表Service业务层处理
*
*
* @author zcc
*/
@Service
public class WechatPaymentHistoryService {
@Autowired
private WechatPaymentHistoryMapper wechatPaymentHistoryMapper;
/**
* 查询微信订单表
*
* @param id 微信订单表主键
* @return 微信订单表
*/
public WechatPaymentHistory selectById(Long id) {
return wechatPaymentHistoryMapper.selectById(id);
}
/**
* 查询微信订单表列表
*
* @param query 查询条件
* @param page 分页条件
* @return 微信订单表
*/
public List<WechatPaymentHistory> selectList(WechatPaymentHistoryQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
String paymentId = query.getPaymentId();
if (!StringUtils.isEmpty(paymentId)) {
qw.eq("payment_id", paymentId);
}
Long memberId = query.getMemberId();
if (memberId != null) {
qw.eq("member_id", memberId);
}
String openid = query.getOpenid();
if (!StringUtils.isEmpty(openid)) {
qw.eq("openid", openid);
}
String realNameLike = query.getRealNameLike();
if (!StringUtils.isEmpty(realNameLike)) {
qw.like("real_name", realNameLike);
}
String title = query.getTitle();
if (!StringUtils.isEmpty(title)) {
qw.eq("title", title);
}
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
BigDecimal money = query.getMoney();
if (money != null) {
qw.eq("money", money);
}
Integer opType = query.getOpType();
if (opType != null) {
qw.eq("op_type", opType);
}
Integer paymentStatus = query.getPaymentStatus();
if (paymentStatus != null) {
qw.eq("payment_status", paymentStatus);
}
String attach = query.getAttach();
if (!StringUtils.isEmpty(attach)) {
qw.eq("attach", attach);
}
String responseBody = query.getResponseBody();
if (!StringUtils.isEmpty(responseBody)) {
qw.eq("response_body", responseBody);
}
return wechatPaymentHistoryMapper.selectList(qw);
}
/**
* 新增微信订单表
*
* @param wechatPaymentHistory 微信订单表
* @return 结果
*/
public int insert(WechatPaymentHistory wechatPaymentHistory) {
wechatPaymentHistory.setCreateTime(LocalDateTime.now());
return wechatPaymentHistoryMapper.insert(wechatPaymentHistory);
}
/**
* 修改微信订单表
*
* @param wechatPaymentHistory 微信订单表
* @return 结果
*/
public int update(WechatPaymentHistory wechatPaymentHistory) {
return wechatPaymentHistoryMapper.updateById(wechatPaymentHistory);
}
/**
* 删除微信订单表信息
*
* @param id 微信订单表主键
* @return 结果
*/
public int deleteById(Long id) {
return wechatPaymentHistoryMapper.deleteById(id);
}
public interface WechatPaymentHistoryService extends IService<WechatPaymentHistory> {
}

View File

@ -0,0 +1,111 @@
package com.wzj.soopin.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.order.domain.entity.AftersaleItem;
import com.wzj.soopin.order.domain.query.AftersaleItemQuery;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.mapper.AftersaleItemMapper;
import com.wzj.soopin.order.service.AftersaleItemService;
import com.wzj.soopin.order.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单售后Service业务层处理
*
*
* @author zcc
*/
@Service
public class AftersaleItemServiceImpl extends ServiceImpl<AftersaleItemMapper, AftersaleItem> implements AftersaleItemService {
@Autowired
private AftersaleItemMapper aftersaleItemMapper;
/**
* 查询订单售后
*
* @param id 订单售后主键
* @return 订单售后
*/
public AftersaleItem selectById(Long id) {
return aftersaleItemMapper.selectById(id);
}
/**
* 查询订单售后列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单售后
*/
public List<AftersaleItem> selectList(AftersaleItemQuery query, Pageable page) {
// if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
QueryWrapper<AftersaleItem> qw = new QueryWrapper<>();
Long memberId = query.getMemberId();
if (memberId != null) {
qw.eq("member_id", memberId);
}
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
Long orderItemId = query.getOrderItemId();
if (orderItemId != null) {
qw.eq("order_item_id", orderItemId);
}
BigDecimal returnAmount = query.getReturnAmount();
if (returnAmount != null) {
qw.eq("return_amount", returnAmount);
}
Integer quantity = query.getQuantity();
if (quantity != null) {
qw.eq("quantity", quantity);
}
return aftersaleItemMapper.selectList(qw);
}
/**
* 新增订单售后
*
* @param aftersaleItem 订单售后
* @return 结果
*/
public int insert(AftersaleItem aftersaleItem) {
aftersaleItem.setCreateTime(LocalDateTime.now());
return aftersaleItemMapper.insert(aftersaleItem);
}
/**
* 修改订单售后
*
* @param aftersaleItem 订单售后
* @return 结果
*/
public int update(AftersaleItem aftersaleItem) {
return aftersaleItemMapper.updateById(aftersaleItem);
}
/**
* 删除订单售后信息
*
* @param id 订单售后主键
* @return 结果
*/
public int deleteById(Long id) {
return aftersaleItemMapper.deleteById(id);
}
public IPage<AftersaleItem> pagelist(AftersaleItemQuery query, PageVO page) {
IPage<AftersaleItem> pageParam = PageUtil.initPage(page);
return aftersaleItemMapper.selectAftersale(query, pageParam);
}
}

View File

@ -0,0 +1,472 @@
package com.wzj.soopin.order.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.RefundNotification;
import com.wzj.soopin.goods.mapper.SkuMapper;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberWechat;
import com.wzj.soopin.member.mapper.MemberMapper;
import com.wzj.soopin.member.mapper.MemberWechatMapper;
import com.wzj.soopin.order.service.AftersaleService;
import com.wzj.soopin.order.convert.OrderOperateHistoryConvert;
import com.wzj.soopin.order.domain.entity.*;
import com.wzj.soopin.order.domain.form.DealWithAftersaleForm;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.mapper.*;
import com.wzj.soopin.order.wechat.WechatPayService;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.enums.AftersaleStatus;
import org.dromara.common.core.enums.OrderRefundStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单售后Service业务层处理
*
* @author zcc
*/
@Service
@Slf4j
public class AftersaleServiceImpl extends ServiceImpl<AftersaleMapper, Aftersale> implements AftersaleService {
@Autowired
private AftersaleMapper aftersaleMapper;
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderItemMapper orderItemMapper;
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderOperateHistoryConvert historyConvert;
@Autowired
private SkuMapper skuMapper;
// @Autowired
// private MemberCouponService memberCouponService;
@Autowired
private WechatPaymentHistoryMapper wechatPaymentHistoryMapper;
@Autowired
private MemberWechatMapper memberWechatMapper;
@Autowired(required = false)
private WechatPayService wechatPayService;
@Autowired
private OrderOperateHistoryMapper operateHistoryMapper;
/**
* 查询订单售后
*
* @param id 订单售后主键
* @return 订单售后
*/
public ManagerRefundOrderDetailVO selectById(Long id) {
Order order = orderMapper.selectById(id);
if (order == null) {
throw new RuntimeException("无该订单信息");
}
ManagerRefundOrderDetailVO result = new ManagerRefundOrderDetailVO();
//订单基本信息
result.setOrderId(order.getId());
result.setOrderSn(order.getOrderSn());
result.setCreateTime(order.getCreateTime());
result.setPayType(order.getPayType());
result.setPayTime(order.getPaymentTime());
result.setStatus(order.getStatus());
result.setExpressName(order.getDeliveryCompany());
result.setDeliveryTime(order.getDeliveryTime());
result.setExpressNo(order.getDeliverySn());
result.setTotalAmount(order.getTotalAmount());
result.setPayAmount(order.getPayAmount());
//用户信息
Member member = memberMapper.selectById(order.getMemberId());
result.setNickName(member.getNickname());
result.setPhone(member.getPhoneHidden());
//收货信息
OrderAddressVO orderAddressVO = new OrderAddressVO();
orderAddressVO.setAddress(order.getReceiverDetailAddress());
orderAddressVO.setName(order.getReceiverName());
orderAddressVO.setUserPhone(order.getReceiverPhone());
orderAddressVO.setArea(order.getReceiverProvince() + order.getReceiverCity() + order.getReceiverDistrict());
result.setAddressInfo(orderAddressVO);
//orderItem
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.eq("order_id", id);
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemQw);
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(orderItem -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setPic(orderItem.getPic());
productVO.setSpData(orderItem.getSpData());
productVO.setProductName(orderItem.getProductName());
productVO.setSalePrice(orderItem.getSalePrice());
productVO.setBuyNum(orderItem.getQuantity());
productVO.setProductId(orderItem.getProductId());
productList.add(productVO);
});
result.setProductList(productList);
//售后信息
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", order.getId());
aftersaleQw.orderByDesc("create_time");
List<Aftersale> aftersaleList = aftersaleMapper.selectList(aftersaleQw);
List<RefundInfoVO> refundInfoList = new ArrayList<>();
aftersaleList.forEach(aftersale -> {
RefundInfoVO refundInfo = new RefundInfoVO();
refundInfo.setId(aftersale.getId());
refundInfo.setApplyRefundType(aftersale.getType());
refundInfo.setApplyRefundTime(aftersale.getCreateTime());
refundInfo.setRefundAmount(aftersale.getReturnAmount());
refundInfo.setReason(aftersale.getReason());
refundInfo.setDescription(aftersale.getDescription());
refundInfo.setProofPics(aftersale.getProofPics());
refundInfo.setRefundStatus(aftersale.getStatus());
refundInfo.setRefundWpCode(aftersale.getRefundWpCode());
refundInfo.setRefundWaybillCode(aftersale.getRefundWaybillCode());
refundInfo.setRefundStatus(aftersale.getStatus());
refundInfo.setRemark(aftersale.getHandleNote());
refundInfoList.add(refundInfo);
});
result.setRefundInfoList(refundInfoList);
return result;
}
/**
* 查询订单售后列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单售后
*/
public List<ManagerRefundOrderVO> selectList(ManagerAftersaleOrderForm query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
if (StrUtil.isNotBlank(query.getOrderSn()) && query.getOrderSn().length() > 7) {
query.setOrderSn(query.getOrderSn().substring(7));
}
List<ManagerRefundOrderVO> managerRefundOrderVOS = aftersaleMapper.selectManagerRefundOrder(query);
if (CollectionUtil.isEmpty(managerRefundOrderVOS)) {
return managerRefundOrderVOS;
}
Set<Long> idSet = managerRefundOrderVOS.stream().map(ManagerRefundOrderVO::getOrderId).collect(Collectors.toSet());
//查一下orderSn集合
QueryWrapper<Order> orderQw = new QueryWrapper<>();
orderQw.in("id", idSet);
Map<Long, Order> orderMap = orderMapper.selectList(orderQw).stream().collect(Collectors.toMap(Order::getId, it -> it));
//封装售后单商品数据
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.in("order_id", idSet);
Map<Long, List<OrderItem>> orderItemMap = orderItemMapper.selectList(orderItemQw).stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
managerRefundOrderVOS.forEach(vo -> {
Order order = orderMap.get(vo.getOrderId());
vo.setOrderSn(order.getOrderSn());
List<OrderItem> orderItemList = orderItemMap.get(vo.getOrderId());
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setProductName(item.getProductName());
productVO.setSalePrice(item.getSalePrice());
productVO.setPic(item.getPic());
productVO.setBuyNum(item.getQuantity());
productVO.setProductId(item.getProductId());
productVO.setSpData(item.getSpData());
productList.add(productVO);
});
vo.setProductList(productList);
});
return managerRefundOrderVOS;
}
/**
* 新增订单售后
*
* @param aftersale 订单售后
* @return 结果
*/
public int insert(Aftersale aftersale) {
aftersale.setCreateTime(LocalDateTime.now());
return aftersaleMapper.insert(aftersale);
}
/**
* 修改订单售后
*
* @param aftersale 订单售后
* @return 结果
*/
public int update(Aftersale aftersale) {
return aftersaleMapper.updateById(aftersale);
}
/**
* 删除订单售后信息
*
* @param id 订单售后主键
* @return 结果
*/
public int deleteById(Long id) {
return aftersaleMapper.deleteById(id);
}
/**
* 售后处理
*
* @param request 请求体
* @param
* @return
*/
@Transactional(rollbackFor = Exception.class)
public void dealWith(DealWithAftersaleForm request, Long userId, String optUserName) {
Order order = orderMapper.selectById(request.getOrderId());
if (order == null) {
throw new RuntimeException("无该订单");
}
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", request.getOrderId());
if (request.getOptType() == 3) {
aftersaleQw.eq("status", 1);
} else {
aftersaleQw.eq("status", 0);
}
Aftersale aftersale = aftersaleMapper.selectOne(aftersaleQw);
if (aftersale == null) {
throw new RuntimeException("没有售后单");
}
//售后状态与售后类型是否对应
if (Constants.OptType.AGREE.equals(request.getOptType()) || Constants.OptType.REFUSE.equals(request.getOptType())) {
if (!AftersaleStatus.APPLY.getType().equals(aftersale.getStatus())) {
throw new RuntimeException("订单状态错误,请刷新页面后重试!");
}
} else {
if (!AftersaleStatus.WAIT.getType().equals(aftersale.getStatus())) {
throw new RuntimeException("订单状态错误,请刷新页面后重试!");
}
}
//拒绝则理由必填
if (Constants.OptType.REFUSE.equals(request.getOptType()) && StrUtil.isBlank(request.getRemark())) {
throw new RuntimeException("请填写拒绝理由");
}
LocalDateTime optDate = LocalDateTime.now();
//要创建的订单操作记录status后续判断再设置
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOrderSn(order.getOrderSn());
optHistory.setOperateMan("后台管理员");
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(userId);
optHistory.setUpdateBy(userId);
optHistory.setUpdateTime(optDate);
//封装售后wrapper
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", request.getOrderId());
aftersaleWrapper.eq("status", AftersaleStatus.APPLY.getType());
aftersaleWrapper.set("handle_man", optUserName);
aftersaleWrapper.set("update_time", optDate);
aftersaleWrapper.set("handle_time", optDate);
aftersaleWrapper.set("update_by", userId);
//封装订单wrapper
UpdateWrapper<Order> orderWrapper = new UpdateWrapper<>();
orderWrapper.eq("id", request.getOrderId());
orderWrapper.set("update_time", optDate);
orderWrapper.set("update_by", userId);
//更新订单售后单创建操作记录
if (request.getOptType().equals(Constants.OptType.REFUSE)) {
aftersaleWrapper.set("status", AftersaleStatus.REJECT.getType());
aftersaleWrapper.set("handle_note", request.getRemark());
orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType());
optHistory.setOrderStatus(14);
} else if (request.getOptType().equals(Constants.OptType.AGREE)) {
aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType());
orderWrapper.set("aftersale_status", Objects.equals(aftersale.getType(), 1) ? 3 : 2);
optHistory.setOrderStatus(12);
} else {
//如果是退货退款 order身上的售后状态应该是保持不变的 仅退款的话就进入退款了
orderWrapper.set("aftersale_status", 3);
int row = orderMapper.update(null, orderWrapper);
if (row != 1) {
throw new RuntimeException("修改订单状态失败");
}
}
int rows = aftersaleMapper.update(null, aftersaleWrapper);
// if (rows < 1) {
// throw new RuntimeException("更新售后单失败");
// }
rows = orderMapper.update(null, orderWrapper);
if (rows < 1) {
throw new RuntimeException("更新订单失败");
}
rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1) {
throw new RuntimeException("创建订单操作记录失败");
}
// 是否需要发起退款
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
tradeRefund(aftersale, order, optDate, userId);
}
}
public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) {
//查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
qw.eq("order_id", order.getPayId()).eq("op_type", 1);
WechatPaymentHistory history = wechatPaymentHistoryMapper.selectOne(qw);
//查用户的微信信息
QueryWrapper<MemberWechat> wechatQw = new QueryWrapper<>();
wechatQw.eq("member_id", order.getMemberId());
MemberWechat memberWechat = memberWechatMapper.selectOne(wechatQw);
//查订单item
QueryWrapper<OrderItem> itemQw = new QueryWrapper<>();
itemQw.eq("order_id", order.getId());
OrderItem orderItem = orderItemMapper.selectList(itemQw).get(0);
//开始退款
Refund wechatResponse = wechatPayService.refundPay(returnApply.getId() + "",
order.getPayId() + "",
"https://mall.ichengle.top/api/no-auth/wechat/weChatRefundNotify",
returnApply.getReturnAmount().multiply(new BigDecimal("100")).longValue(),
history.getMoney().multiply(new BigDecimal("100")).longValue(), returnApply.getReason());
log.info("发起微信退款返回信息,tradeRefund:{}", JSONObject.toJSONString(wechatResponse == null ? "" : wechatResponse));
if (wechatResponse != null && Arrays.asList("PROCESSING", "SUCCESS").contains(wechatResponse.getStatus().name())) {
qw = new QueryWrapper<>();
qw.eq("order_id", order.getId()).eq("op_type", 3);
WechatPaymentHistory refundHistory = wechatPaymentHistoryMapper.selectOne(qw);
if (refundHistory == null) {
WechatPaymentHistory wechatPaymentHistory = new WechatPaymentHistory();
wechatPaymentHistory.setPaymentId(wechatResponse.getRefundId());
wechatPaymentHistory.setMemberId(order.getMemberId());
LambdaQueryWrapper<WechatPaymentHistory> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(WechatPaymentHistory::getOrderId, order.getPayId());
queryWrapper.eq(WechatPaymentHistory::getOpType, Constants.PaymentOpType.PAY);
WechatPaymentHistory payHistory = wechatPaymentHistoryMapper.selectOne(queryWrapper);
wechatPaymentHistory.setOpenid(payHistory.getOpenid());
wechatPaymentHistory.setTitle(orderItem.getProductName());
wechatPaymentHistory.setOrderId(order.getId());
wechatPaymentHistory.setMoney(returnApply.getReturnAmount().multiply(new BigDecimal("100")));
wechatPaymentHistory.setOpType(3);
wechatPaymentHistory.setPaymentStatus(0);
wechatPaymentHistory.setResponseBody(JSON.toJSONString(wechatResponse));
wechatPaymentHistory.setCreateTime(optDate);
wechatPaymentHistory.setUpdateTime(optDate);
wechatPaymentHistory.setCreateBy(userId);
wechatPaymentHistory.setUpdateBy(userId);
wechatPaymentHistoryMapper.insert(wechatPaymentHistory);
} else {
UpdateWrapper<WechatPaymentHistory> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", refundHistory.getId())
.set("payment_id", wechatResponse.getRefundId()).set("update_time", optDate);
wechatPaymentHistoryMapper.update(null, updateWrapper);
}
}
}
/**
* 订单退款回调MQ
*
* @param weChatRefundNotify
*/
@Transactional
public void refundOrderExc(RefundNotification weChatRefundNotify) {
log.info("收到订单回调MQ" + JSONObject.toJSONString(weChatRefundNotify));
if ("PROCESSING".equals(weChatRefundNotify.getRefundStatus().name())) {
return;
}
//查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
qw.eq("payment_id", weChatRefundNotify.getRefundId()).eq("op_type", 3);
WechatPaymentHistory history = wechatPaymentHistoryMapper.selectOne(qw);
if (history == null) {
log.info("未找到退款单");
throw new RuntimeException();
}
LocalDateTime optDate = LocalDateTime.now();
QueryWrapper<Order> orderQw = new QueryWrapper<>();
orderQw.eq("id", history.getOrderId());
Order order = orderMapper.selectOne(orderQw);
if (order.getStatus() == OrderRefundStatus.SUCCESS.getType()) {
log.info("订单已经是退款成功状态");
throw new RuntimeException();
}
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", history.getOrderId()).eq("status", AftersaleStatus.WAIT.getType());
if ("SUCCESS".equals(weChatRefundNotify.getRefundStatus().name())) {
//更改订单表
UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>();
orderUpdateWrapper.eq("id", history.getOrderId())
.set("aftersale_status", OrderRefundStatus.SUCCESS.getType());
orderMapper.update(null, orderUpdateWrapper);
//更改 售后表
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", history.getOrderId()).set("status", AftersaleStatus.SUCCESS.getType());
aftersaleMapper.update(null, aftersaleWrapper);
//更改 微信表
UpdateWrapper<WechatPaymentHistory> paymentWrapper = new UpdateWrapper<>();
paymentWrapper.eq("payment_id", weChatRefundNotify.getRefundId()).eq("op_type", 3)
.set("payment_status", 1);
wechatPaymentHistoryMapper.update(null, paymentWrapper);
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOperateMan("系统");
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(order.getMemberId());
optHistory.setUpdateBy(order.getMemberId());
optHistory.setUpdateTime(optDate);
optHistory.setOrderStatus(13);
operateHistoryMapper.insert(optHistory);
// 回滚商品和sku销量
OrderItem orderItem = orderItemMapper.selectOne(new QueryWrapper<OrderItem>().eq("order_id", order.getId()));
skuMapper.updateStockById(orderItem.getSkuId(), LocalDateTime.now(), -1 * orderItem.getQuantity());
//退还优惠券
// if (order.getMemberCouponId() != null) {
// memberCouponService.backCoupon(Arrays.asList(order.getMemberCouponId()));
// }
} else {
//更改订单表
UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>();
orderUpdateWrapper.eq("id", history.getOrderId())
.set("aftersale_status", OrderRefundStatus.FAIL.getType());
orderMapper.update(null, orderUpdateWrapper);
}
}
public R log(Long orderId) {
LambdaQueryWrapper<OrderOperateHistory> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(OrderOperateHistory::getOrderId, orderId);
wrapper.in(OrderOperateHistory::getOrderStatus, Arrays.asList(11, 12, 13, 14));
wrapper.orderByDesc(OrderOperateHistory::getCreateTime);
List<OrderOperateHistory> historyList = orderOperateHistoryMapper.selectList(wrapper);
return R.ok(historyList);
}
public Aftersale queryAfterSale(Long orderId) {
QueryWrapper<Aftersale> itemQw = new QueryWrapper<>();
itemQw.eq("order_id",orderId);
itemQw.in("status",Arrays.asList(AftersaleStatus.APPLY.getType(),AftersaleStatus.WAIT.getType()));
return aftersaleMapper.selectOne(itemQw);
}
}

View File

@ -0,0 +1,104 @@
package com.wzj.soopin.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.query.OrderDeliveryHistoryQuery;
import com.wzj.soopin.order.domain.vo.OrderDeliveryHistoryVO;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.mapper.OrderDeliveryHistoryMapper;
import com.wzj.soopin.order.service.OrderDeliveryHistoryService;
import com.wzj.soopin.order.utils.PageUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单发货记录Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderDeliveryHistoryServiceImpl extends ServiceImpl<OrderDeliveryHistoryMapper, OrderDeliveryHistory> implements OrderDeliveryHistoryService {
@Autowired
private OrderDeliveryHistoryMapper orderDeliveryHistoryMapper;
/**
* 查询订单发货记录
*
* @param id 订单发货记录主键
* @return 订单发货记录
*/
public OrderDeliveryHistory selectById(Long id) {
return orderDeliveryHistoryMapper.selectById(id);
}
/**
* 查询订单发货记录列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单发货记录
*/
public List<OrderDeliveryHistory> selectList(OrderDeliveryHistoryQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<OrderDeliveryHistory> qw = new QueryWrapper<>();
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
String deliveryCompany = query.getDeliveryCompany();
if (!StringUtils.isEmpty(deliveryCompany)) {
qw.eq("delivery_company", deliveryCompany);
}
String deliverySn = query.getDeliverySn();
if (!StringUtils.isEmpty(deliverySn)) {
qw.eq("delivery_sn", deliverySn);
}
return orderDeliveryHistoryMapper.selectList(qw);
}
/**
* 新增订单发货记录
*
* @param orderDeliveryHistory 订单发货记录
* @return 结果
*/
public int insert(OrderDeliveryHistory orderDeliveryHistory) {
orderDeliveryHistory.setCreateTime(LocalDateTime.now());
return orderDeliveryHistoryMapper.insert(orderDeliveryHistory);
}
/**
* 修改订单发货记录
*
* @param orderDeliveryHistory 订单发货记录
* @return 结果
*/
public int update(OrderDeliveryHistory orderDeliveryHistory) {
return orderDeliveryHistoryMapper.updateById(orderDeliveryHistory);
}
/**
* 删除订单发货记录信息
*
* @param id 订单发货记录主键
* @return 结果
*/
public int deleteById(Long id) {
return orderDeliveryHistoryMapper.deleteById(id);
}
public IPage<OrderDeliveryHistoryVO> pagelist(OrderDeliveryHistoryQuery query, PageVO page) {
IPage<OrderDeliveryHistoryVO> pageParam = PageUtil.initPage(page);
return orderDeliveryHistoryMapper.selectOderDeliveryHistory(query, pageParam);
}
}

View File

@ -0,0 +1,181 @@
package com.wzj.soopin.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.order.domain.dto.OrderProductListDTO;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.query.OrderItemQuery;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.mapper.OrderItemMapper;
import com.wzj.soopin.order.service.OrderItemService;
import com.wzj.soopin.order.utils.PageUtil;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.utils.IDGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* 订单中所包含的商品Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem> implements OrderItemService {
@Autowired
private OrderItemMapper orderItemMapper;
/**
* 查询订单中所包含的商品
*
* @param id 订单中所包含的商品主键
* @return 订单中所包含的商品
*/
public OrderItem selectById(Long id) {
return orderItemMapper.selectById(id);
}
/**
* 查询订单中所包含的商品列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单中所包含的商品
*/
public List<OrderItem> selectList(OrderItemQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
Long productId = query.getProductId();
if (productId != null) {
qw.eq("product_id", productId);
}
String outProductId = query.getOutProductId();
if (!StringUtils.isEmpty(outProductId)) {
qw.eq("out_product_id", outProductId);
}
Long skuId = query.getSkuId();
if (skuId != null) {
qw.eq("sku_id", skuId);
}
String outSkuId = query.getOutSkuId();
if (!StringUtils.isEmpty(outSkuId)) {
qw.eq("out_sku_id", outSkuId);
}
Long productSnapshotId = query.getProductSnapshotId();
if (productSnapshotId != null) {
qw.eq("product_snapshot_id", productSnapshotId);
}
Long skuSnapshotId = query.getSkuSnapshotId();
if (skuSnapshotId != null) {
qw.eq("sku_snapshot_id", skuSnapshotId);
}
String pic = query.getPic();
if (!StringUtils.isEmpty(pic)) {
qw.eq("pic", pic);
}
String productNameLike = query.getProductNameLike();
if (!StringUtils.isEmpty(productNameLike)) {
qw.like("product_name", productNameLike);
}
BigDecimal salePrice = query.getSalePrice();
if (salePrice != null) {
qw.eq("sale_price", salePrice);
}
BigDecimal purchasePrice = query.getPurchasePrice();
if (purchasePrice != null) {
qw.eq("purchase_price", purchasePrice);
}
Integer quantity = query.getQuantity();
if (quantity != null) {
qw.eq("quantity", quantity);
}
Long productCategoryId = query.getProductCategoryId();
if (productCategoryId != null) {
qw.eq("product_category_id", productCategoryId);
}
String spData = query.getSpData();
if (!StringUtils.isEmpty(spData)) {
qw.eq("sp_data", spData);
}
return orderItemMapper.selectList(qw);
}
/**
* 新增订单中所包含的商品
*
* @param orderItem 订单中所包含的商品
* @return 结果
*/
public int insert(OrderItem orderItem) {
orderItem.setCreateTime(LocalDateTime.now());
return orderItemMapper.insert(orderItem);
}
/**
* 修改订单中所包含的商品
*
* @param orderItem 订单中所包含的商品
* @return 结果
*/
public int update(OrderItem orderItem) {
return orderItemMapper.updateById(orderItem);
}
/**
* 删除订单中所包含的商品信息
*
* @param id 订单中所包含的商品主键
* @return 结果
*/
public int deleteById(Long id) {
return orderItemMapper.deleteById(id);
}
@Transactional
public void saveOrderItem(Member member, LocalDateTime optTime,
Long orderId, List<OrderProductListDTO> list){
List<OrderItem> addOrderItemList = new ArrayList<>();
list.forEach(item -> {
OrderItem orderItem = new OrderItem();
orderItem.setId(IDGenerator.generateId());
orderItem.setOrderId(orderId);
orderItem.setProductId(item.getProduct().getId());
orderItem.setOutProductId(item.getProduct().getOutProductId());
orderItem.setSkuId(item.getSku().getId());
orderItem.setOutSkuId(item.getSku().getOutSkuId());
orderItem.setPic(item.getSku().getPic());
orderItem.setProductName(item.getProduct().getName());
orderItem.setSalePrice(item.getSku().getPrice());
orderItem.setQuantity(item.getQuantity());
orderItem.setProductCategoryId(item.getProduct().getCategoryId());
orderItem.setSpData(item.getSku().getSpData());
orderItem.setCreateBy(member.getId());
orderItem.setCreateTime(optTime);
addOrderItemList.add(orderItem);
});
boolean flag = saveBatch(addOrderItemList);
if (!flag){
throw new RuntimeException("新增订单item失败");
}
}
public IPage<OrderItem> pagelist(OrderItemQuery query, PageVO page) {
IPage<OrderItem> pageParam = PageUtil.initPage(page);
return orderItemMapper.selectOrderItem(query, pageParam);
}
}

View File

@ -0,0 +1,110 @@
package com.wzj.soopin.order.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.query.OrderOperateHistoryQuery;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper;
import com.wzj.soopin.order.service.OrderOperateHistoryService;
import com.wzj.soopin.order.utils.PageUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单操作历史记录Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderOperateHistoryServiceImpl extends ServiceImpl<OrderOperateHistoryMapper, OrderOperateHistory> implements OrderOperateHistoryService {
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
/**
* 查询订单操作历史记录
*
* @param id 订单操作历史记录主键
* @return 订单操作历史记录
*/
public OrderOperateHistory selectById(Long id) {
return orderOperateHistoryMapper.selectById(id);
}
/**
* 查询订单操作历史记录列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单操作历史记录
*/
public List<OrderOperateHistory> selectList(OrderOperateHistoryQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<OrderOperateHistory> qw = new QueryWrapper<>();
String orderSn = query.getOrderSn();
if (StrUtil.isNotBlank(orderSn)) {
qw.eq("order_sn", orderSn);
}
String operateMan = query.getOperateMan();
if (!StringUtils.isEmpty(operateMan)) {
qw.eq("operate_man", operateMan);
}
Integer orderStatus = query.getOrderStatus();
if (orderStatus != null) {
qw.eq("order_status", orderStatus);
}
String note = query.getNote();
if (!StringUtils.isEmpty(note)) {
qw.eq("note", note);
}
qw.orderByDesc("create_time");
return orderOperateHistoryMapper.selectList(qw);
}
/**
* 新增订单操作历史记录
*
* @param orderOperateHistory 订单操作历史记录
* @return 结果
*/
public int insert(OrderOperateHistory orderOperateHistory) {
orderOperateHistory.setCreateTime(LocalDateTime.now());
return orderOperateHistoryMapper.insert(orderOperateHistory);
}
/**
* 修改订单操作历史记录
*
* @param orderOperateHistory 订单操作历史记录
* @return 结果
*/
public int update(OrderOperateHistory orderOperateHistory) {
return orderOperateHistoryMapper.updateById(orderOperateHistory);
}
/**
* 删除订单操作历史记录信息
*
* @param id 订单操作历史记录主键
* @return 结果
*/
public int deleteById(Long id) {
return orderOperateHistoryMapper.deleteById(id);
}
public IPage<OrderOperateHistory> pagelist(OrderOperateHistoryQuery query, PageVO page) {
IPage<OrderItem> pageParam = PageUtil.initPage(page);
return orderOperateHistoryMapper.selectOrderOperateHistory(query, pageParam);
}
}

View File

@ -0,0 +1,433 @@
package com.wzj.soopin.order.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.goods.convert.SkuConvert;
import com.wzj.soopin.goods.mapper.ProductMapper;
import com.wzj.soopin.goods.mapper.SkuMapper;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.order.convert.OrderConvert;
import com.wzj.soopin.order.convert.OrderOperateHistoryConvert;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.entity.OrderDeliveryHistory;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.entity.OrderOperateHistory;
import com.wzj.soopin.order.domain.form.DeliverProductForm;
import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm;
import com.wzj.soopin.order.domain.query.OrderH5Query;
import com.wzj.soopin.order.domain.vo.*;
import com.wzj.soopin.order.mapper.OrderDeliveryHistoryMapper;
import com.wzj.soopin.order.mapper.OrderItemMapper;
import com.wzj.soopin.order.mapper.OrderMapper;
import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper;
import com.wzj.soopin.order.service.OrderService;
import com.wzj.soopin.order.utils.SecurityUtils;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.utils.PhoneUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.wzj.soopin.member.mapper.MemberAddressMapper;
import com.wzj.soopin.member.mapper.MemberCartMapper;
import com.wzj.soopin.member.mapper.MemberMapper;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单表Service业务层处理
*
*
* @author zcc
*/
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderConvert orderConvert;
@Autowired
private OrderItemMapper orderItemMapper;
@Autowired
private MemberAddressMapper memberAddressMapper;
@Autowired
private SkuMapper skuMapper;
@Autowired
private ProductMapper productMapper;
@Autowired
private SkuConvert skuConvert;
@Autowired
private OrderItemServiceImpl orderItemService;
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
@Autowired
private MemberCartMapper memberCartMapper;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderDeliveryHistoryMapper orderDeliveryHistoryMapper;
@Autowired
private OrderOperateHistoryConvert historyConvert;
/**
* 查询订单表
*
* @param id 订单表主键
* @return 订单表
*/
public ManagerOrderDetailVO selectById(Long id) {
Order order = orderMapper.selectById(id);
if (order == null){
throw new RuntimeException("查不到订单信息");
}
ManagerOrderDetailVO managerOrderDetailVO = new ManagerOrderDetailVO();
//封装订单信息
managerOrderDetailVO.setOrderId(id);
managerOrderDetailVO.setCouponAmount(order.getCouponAmount());
managerOrderDetailVO.setOrderSn(order.getOrderSn());
managerOrderDetailVO.setOrderStatus(order.getStatus());
managerOrderDetailVO.setCreateTime(order.getCreateTime());
managerOrderDetailVO.setDeliveryTime(order.getDeliveryTime());
managerOrderDetailVO.setExpressName(order.getDeliveryCompany());
managerOrderDetailVO.setExpressNo(order.getDeliverySn());
managerOrderDetailVO.setPayAmount(order.getPayAmount());
managerOrderDetailVO.setPayTime(order.getPaymentTime());
managerOrderDetailVO.setPayType(order.getPayType());
managerOrderDetailVO.setTotalAmount(order.getTotalAmount());
managerOrderDetailVO.setPayAmount(order.getPayAmount());
managerOrderDetailVO.setReceiveTime(order.getReceiveTime());
//封装订单地址信息
ManagerOrderAddressVo managerOrderAddressVo = new ManagerOrderAddressVo();
managerOrderAddressVo.setUserPhone(order.getReceiverPhone());
managerOrderAddressVo.setAddress(order.getReceiverDetailAddress());
managerOrderAddressVo.setArea(
order.getReceiverProvince() +
order.getReceiverCity() +
order.getReceiverDistrict());
managerOrderAddressVo.setName(order.getReceiverName());
managerOrderDetailVO.setAddressInfo(managerOrderAddressVo);
//查询会员信息
Member member = memberMapper.selectById(order.getMemberId());
managerOrderDetailVO.setUserName(member.getNickname());
managerOrderDetailVO.setUserPhone(member.getPhoneHidden());
//查询购买商品信息
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.eq("order_id", order.getId());
List<OrderItem> orderItemList = orderItemMapper.selectList(qw);
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setProductId(item.getProductId());
productVO.setBuyNum(item.getQuantity());
productVO.setPic(item.getPic());
productVO.setProductName(item.getProductName());
productVO.setSalePrice(item.getSalePrice());
productVO.setSpData(item.getSpData());
productList.add(productVO);
});
managerOrderDetailVO.setProductInfo(productList);
return managerOrderDetailVO;
}
/**
* 查询订单表列表
*
* @param query 查询条件
* @param page 分页条件
* @return 订单表
*/
public PageImpl<ManagerOrderVO> selectList(ManagerOrderQueryForm query, Pageable page) {
// if (page != null) {
//// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
// }
// if (!StringUtils.isEmpty(query.getUserPhone())){
//// query.setUserPhone(AesCryptoUtils.encrypt(aesKey, query.getUserPhone()));
// }
List<ManagerOrderVO> managerOrderVOList = orderMapper.selectManagerOrderPage(query);
if (CollectionUtil.isEmpty(managerOrderVOList)){
return new PageImpl<>(managerOrderVOList, page, 0);
}
long total = managerOrderVOList.size();
Map<Long, ManagerOrderVO> orderMap = managerOrderVOList.stream().collect(Collectors.toMap(ManagerOrderVO::getId, it -> it, (v1,v2) -> v2, LinkedHashMap::new));
//查orderItem
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.in("order_id", orderMap.keySet());
Map<Long, List<OrderItem>> groupedOrderItemMap = orderItemMapper.selectList(qw)
.stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
groupedOrderItemMap.keySet().forEach(key -> {
ManagerOrderVO managerOrderVO = orderMap.get(key);
managerOrderVO.setBuyNum(0);
List<OrderItem> orderItemList = groupedOrderItemMap.get(key);
List<ManagerOrderProductVO> addProductList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO vo = new ManagerOrderProductVO();
vo.setProductName(item.getProductName());
vo.setSalePrice(item.getSalePrice());
vo.setPic(item.getPic());
vo.setBuyNum(item.getQuantity());
vo.setProductId(item.getProductId());
vo.setSpData(item.getSpData());
addProductList.add(vo);
managerOrderVO.setBuyNum(managerOrderVO.getBuyNum() + item.getQuantity());
});
managerOrderVO.setProductList(addProductList);
});
return new PageImpl<>(new ArrayList<>(orderMap.values()), page, total);
}
/**
* 新增订单表
*
* @param order 订单表
* @return 结果
*/
public R<Order> insert(Order order) {
order.setCreateTime(LocalDateTime.now());
int insert = orderMapper.insert(order);
if (insert>1){
return R.fail("订单创建失败");
}else {
return R.ok(order);
}
}
/**
* 修改订单表
*
* @param order 订单表
* @return 结果
*/
public R<Order> update(Order order) {
int update = orderMapper.updateById(order);
if (update>1){
return R.fail("订单修改失败");
}else {
return R.ok(order);
}
}
/**
* 删除订单表信息
*
* @param id 订单表主键
* @return 结果
*/
public R<Order> deleteById(Long id) {
Order order = orderMapper.selectById(id);
if (order == null) {
return R.fail("订单不存在");
}
int affectedRows = orderMapper.deleteById(id);
return affectedRows > 0 ? R.ok(order) : R.fail("删除失败");
}
public Page<OrderVO> queryOrderPage(OrderH5Query query, Pageable pageReq) {
QueryWrapper<Order> qw = new QueryWrapper<>();
qw.eq("member_id", SecurityUtils.getUserId());
IPage<Order> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>();
page.setCurrent(pageReq.getPageNumber())
.setSize(pageReq.getPageSize());
if (CollUtil.isEmpty(pageReq.getSort())) {
pageReq.getSort().forEach(it -> {
qw.orderBy(true, it.getDirection().isAscending(), it.getProperty());
});
}
Integer tab = query.getTab();
if (tab != null) {
qw.eq("delete_status", 0);
if (tab == 1) {
qw.eq("status", 0);
} else if (tab == 2) {
qw.eq("status", 1);
qw.eq("aftersale_status", 1);
} else if (tab == 3) {
qw.eq("status", 2);
qw.eq("confirm_status", 0);
} else if (tab == 4) {
qw.eq("status", 2);
qw.eq("confirm_status", 1);
}
}
orderMapper.selectPage(page, qw);
List<Order> orders = page.getRecords();
long total = page.getPages();
if (CollUtil.isEmpty(orders)) {
return new PageImpl<>(Collections.emptyList(), pageReq, total);
}
LambdaQueryWrapper<OrderItem> qw1 = new LambdaQueryWrapper<>();
qw1.in(OrderItem::getOrderId, orders.stream().map(Order::getId).collect(Collectors.toList()));
Map<Long, List<OrderItem>> oid2items = orderItemMapper.selectList(qw1)
.stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
// List<OrderVO> res = orderConvert.dos2vos(orders);
// res.forEach(it -> {
// it.setItems(oid2items.get(it.getId()));
// });
// return new PageImpl<>(res, pageReq, total);
return null;
}
public R saveMerchantNote(Order order) {
// 1. 查询现有订单
Order orderInDb = orderMapper.selectById(order.getId());
if (orderInDb == null) {
return R.fail("订单不存在");
}
// 2. 更新商家备注
UpdateWrapper<Order> qw = new UpdateWrapper<>();
qw.eq("id", order.getId());
qw.set("merchant_note", order.getMerchantNote());
int affectedRows = orderMapper.update(null, qw);
if (affectedRows > 0) {
orderMapper.selectById(order.getId());
return R.ok();
}
return R.fail("更新失败");
}
/**
* 管理后台发货
* 目前发货是这样的待发货已发货已完成都能执行发货每次都会创建一条新的发货记录且修改订单发货信息
* @param request 发货请求
* @param userId 操作人
* @return 结果
*/
@Transactional
public String deliverProduct(DeliverProductForm request, Long userId) {
//查询订单
Order order = orderMapper.selectById(request.getOrderId());
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.eq("order_id", request.getOrderId());
List<OrderItem> orderItemList = orderItemMapper.selectList(qw);
if (order == null || CollectionUtil.isEmpty(orderItemList)){
throw new RuntimeException("未找到该订单信息");
}
// 是否为待发货已发货 已完成
if (!(Constants.OrderStatus.SEND.equals(order.getStatus())
|| Constants.OrderStatus.GET.equals(order.getStatus())
|| Constants.OrderStatus.CONFIRM.equals(order.getStatus()))){
throw new RuntimeException("订单状态错误");
}
Integer orderStatus =
Constants.OrderStatus.SEND.equals(order.getStatus()) ? Constants.OrderStatus.GET : order.getStatus();
//更新订单
LocalDateTime optDate = LocalDateTime.now();
order.setUpdateBy(null);
order.setStatus(orderStatus);
order.setDeliveryTime(optDate);
order.setUpdateTime(optDate);
order.setDeliveryCompany(request.getExpressName());
order.setDeliverySn(request.getExpressSn());
orderMapper.updateById(order);
//创建新的发货记录
this.createDeliveryHistory(request, userId, optDate);
//创建订单操作记录
this.createOrderOptHistory(order.getId(), order.getOrderSn(), orderStatus, userId, optDate);
return "发货成功";
}
/**
* 创建发货记录
* @param request 发货请求
* @param userId 操作人
* @param optDate 操作时间
*/
private void createDeliveryHistory(DeliverProductForm request, Long userId, LocalDateTime optDate){
OrderDeliveryHistory orderDeliveryHistory = new OrderDeliveryHistory();
orderDeliveryHistory.setOrderId(request.getOrderId());
orderDeliveryHistory.setDeliveryCompany(request.getExpressName());
orderDeliveryHistory.setDeliverySn(request.getExpressSn());
orderDeliveryHistory.setCreateTime(optDate);
orderDeliveryHistory.setCreateBy(userId);
int rows = orderDeliveryHistoryMapper.insert(orderDeliveryHistory);
if (rows < 1) {
throw new RuntimeException("新增订单发货记录失败");
}
}
/**
* 创建订单操作历史
* @param orderId 订单id
* @param orderStatus 订单状态
* @param userId 操作人
* @param optDate 操作时间
*/
private void createOrderOptHistory(Long orderId, String orderSn, Integer orderStatus, Long userId, LocalDateTime optDate){
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(orderId);
optHistory.setOrderSn(orderSn);
optHistory.setOperateMan(SecurityUtils.getUsername());
optHistory.setOrderStatus(orderStatus);
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(userId);
optHistory.setUpdateBy(userId);
optHistory.setUpdateTime(optDate);
int rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1) {
throw new RuntimeException("新增订单操作记录失败");
}
}
/**
* 根据订单id查询订单操作日志
* @param orderId 订单id
* @return 结果
*/
public List<OrderOperateHistory> log(Long orderId) {
LambdaQueryWrapper<OrderOperateHistory> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(OrderOperateHistory::getOrderId, orderId);
wrapper.in(OrderOperateHistory::getOrderStatus, Arrays.asList(0, 1, 2, 3, 4));
wrapper.orderByDesc(OrderOperateHistory::getCreateTime);
List<OrderOperateHistory> historyList = orderOperateHistoryMapper.selectList(wrapper);
return historyList;
}
public R decryptPhone(Long orderId) {
Order order = orderMapper.selectById(orderId);
String receiverPhoneEncrypted = order.getReceiverPhoneEncrypted();
if (receiverPhoneEncrypted != null) {
return R.ok("操作成功", receiverPhoneEncrypted);
} else {
return R.fail("获取的电话号码加密字段为空");
}
}
public R<Order> updateReceiver(Order order) {
Order dbOrder = orderMapper.selectById(order.getId());
if (dbOrder == null) {
return R.fail("无该订单信息");
}
UpdateWrapper<Order> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("receiver_name",order.getReceiverName())
.set("receiver_phone", PhoneUtils.hidePhone(order.getReceiverPhone()))
.set("receiver_city",order.getReceiverCity())
.set("receiver_district",order.getReceiverDistrict())
.set("receiver_province",order.getReceiverProvince())
.set("receiver_detail_address",order.getReceiverDetailAddress())
// .set("receiver_phone_encrypted", AesCryptoUtils.encrypt(aesKey, order.getReceiverPhone()))
.set("update_time",LocalDateTime.now());
updateWrapper.eq("id",order.getId());
int update = orderMapper.update(null, updateWrapper);
if (update>0){
return R.ok(order);
}else {
return R.fail("修改失败");
}
}
}

View File

@ -0,0 +1,136 @@
package com.wzj.soopin.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.order.domain.entity.WechatPaymentHistory;
import com.wzj.soopin.order.domain.query.WechatPaymentHistoryQuery;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.mapper.WechatPaymentHistoryMapper;
import com.wzj.soopin.order.service.WechatPaymentHistoryService;
import com.wzj.soopin.order.utils.PageUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 微信订单表Service业务层处理
*
*
* @author zcc
*/
@Service
public class WechatPaymentHistoryServiceImpl extends ServiceImpl<WechatPaymentHistoryMapper, WechatPaymentHistory> implements WechatPaymentHistoryService {
@Autowired
private WechatPaymentHistoryMapper wechatPaymentHistoryMapper;
/**
* 查询微信订单表
*
* @param id 微信订单表主键
* @return 微信订单表
*/
public WechatPaymentHistory selectById(Long id) {
return wechatPaymentHistoryMapper.selectById(id);
}
/**
* 查询微信订单表列表
*
* @param query 查询条件
* @param page 分页条件
* @return 微信订单表
*/
public List<WechatPaymentHistory> selectList(WechatPaymentHistoryQuery query, Pageable page) {
if (page != null) {
// PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
String paymentId = query.getPaymentId();
if (!StringUtils.isEmpty(paymentId)) {
qw.eq("payment_id", paymentId);
}
Long memberId = query.getMemberId();
if (memberId != null) {
qw.eq("member_id", memberId);
}
String openid = query.getOpenid();
if (!StringUtils.isEmpty(openid)) {
qw.eq("openid", openid);
}
String realNameLike = query.getRealNameLike();
if (!StringUtils.isEmpty(realNameLike)) {
qw.like("real_name", realNameLike);
}
String title = query.getTitle();
if (!StringUtils.isEmpty(title)) {
qw.eq("title", title);
}
Long orderId = query.getOrderId();
if (orderId != null) {
qw.eq("order_id", orderId);
}
BigDecimal money = query.getMoney();
if (money != null) {
qw.eq("money", money);
}
Integer opType = query.getOpType();
if (opType != null) {
qw.eq("op_type", opType);
}
Integer paymentStatus = query.getPaymentStatus();
if (paymentStatus != null) {
qw.eq("payment_status", paymentStatus);
}
String attach = query.getAttach();
if (!StringUtils.isEmpty(attach)) {
qw.eq("attach", attach);
}
String responseBody = query.getResponseBody();
if (!StringUtils.isEmpty(responseBody)) {
qw.eq("response_body", responseBody);
}
return wechatPaymentHistoryMapper.selectList(qw);
}
/**
* 新增微信订单表
*
* @param wechatPaymentHistory 微信订单表
* @return 结果
*/
public int insert(WechatPaymentHistory wechatPaymentHistory) {
wechatPaymentHistory.setCreateTime(LocalDateTime.now());
return wechatPaymentHistoryMapper.insert(wechatPaymentHistory);
}
/**
* 修改微信订单表
*
* @param wechatPaymentHistory 微信订单表
* @return 结果
*/
public int update(WechatPaymentHistory wechatPaymentHistory) {
return wechatPaymentHistoryMapper.updateById(wechatPaymentHistory);
}
/**
* 删除微信订单表信息
*
* @param id 微信订单表主键
* @return 结果
*/
public int deleteById(Long id) {
return wechatPaymentHistoryMapper.deleteById(id);
}
public IPage<WechatPaymentHistory> pagelist(WechatPaymentHistoryQuery query, PageVO page) {
IPage<WechatPaymentHistory> pageParam = PageUtil.initPage(page);
return wechatPaymentHistoryMapper.selectWechatPaymentHistory(query, pageParam);
}
}

View File

@ -0,0 +1,137 @@
package com.wzj.soopin.order.utils;
import org.springframework.beans.BeanUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 对象属性复制
*
* @author Chopper
*/
public class BeanUtil {
/**
* 复制属性
*
* @param objectFrom 源自对象
* @param objectTo 复制给对象
*/
public static void copyProperties(Object objectFrom, Object objectTo) {
BeanUtils.copyProperties(objectFrom, objectTo);
}
/**
* 获取属性名数组
*
* @param o 获取字段的对象
* @return 返回各个字段
*/
public static String[] getFiledName(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
Field[] superFields = o.getClass().getSuperclass().getDeclaredFields();
String[] fieldNames = new String[fields.length + superFields.length];
int index = 0;
for (int i = 0; i < fields.length; i++) {
fieldNames[index] = fields[i].getName();
index++;
}
for (int i = 0; i < superFields.length; i++) {
if ("id".equals(superFields[i].getName())) {
continue;
}
fieldNames[index] = superFields[i].getName();
index++;
}
return fieldNames;
}
/**
* 根据属性名获取属性值
*
* @param fieldName 属性名
* @param o 对象
* @return 属性值
*/
public static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(o, new Object[]{});
return value;
} catch (Exception e) {
return null;
}
}
/**
* 将对象转换为key value
* A=a&B=b&C=c 格式
*
* @param object 对象
* @return 格式化结果
*/
public static String formatKeyValuePair(Object object) {
//准备接受的字符串
StringBuilder stringBuffer = new StringBuilder();
//获取对象字段
String[] fieldNames = BeanUtil.getFiledName(object);
//遍历所有属性
for (int j = 0; j < fieldNames.length; j++) {
//不是第一个并且不是最后一个拼接&
if (j != 0) {
stringBuffer.append("&");
}
//获取属性的名字
String key = fieldNames[j];
//获取值
Object value = BeanUtil.getFieldValueByName(key, object);
assert value != null;
stringBuffer.append(key).append("=").append(value.toString());
}
return stringBuffer.toString();
}
/**
* key value键值对 转换为 对象
* A=a&B=b&C=c 格式 转换为对象
*
* @param str 对象字符串
* @param t 范型
* @param <T> 范型
* @return 格式化结果
*/
public static <T> T formatKeyValuePair(String str, T t) {
//填写对参数键值对
String[] params = str.split("&");
//获取对象字段
String[] fieldNames = BeanUtil.getFiledName(t);
try {
//循环每个参数
for (String param : params) {
String[] keyValues = param.split("=");
for (int i = 0; i < fieldNames.length; i++) {
if (fieldNames[i].equals(keyValues[0])) {
Field f = t.getClass().getDeclaredField(fieldNames[i]);
f.setAccessible(true);
//长度为2 才转换否则不转
if (keyValues.length == 2) {
f.set(t, keyValues[1]);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
}

View File

@ -0,0 +1,398 @@
package com.wzj.soopin.order.utils;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.*;
/**
* 日期相关的操作
*
* @author Chopper
*/
public class DateUtil {
public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String STANDARD_DATE_FORMAT = "yyyy-MM-dd";
public static final String STANDARD_DATE_NO_UNDERLINE_FORMAT = "yyyyMMdd";
public static final String FULL_DATE = "yyyyMMddHHmmss";
/**
* 当天的开始时间
*
* @return 今天开始时间
*/
public static Date startOfTodDayTime() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 当天的开始时间
*
* @param date 时间
* @return 根据传入的时间获取开始时间
*/
public static Date startOfTodDayTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 当天的开始时间
*
* @return 今天开始时间
*/
public static long startOfTodDay() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date date = calendar.getTime();
return date.getTime() / 1000;
}
/**
* 当天的结束时间
*
* @return 今天结束时间
*/
public static Date endOfDate() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 当天的结束时间
*
* @param date 传入日期
* @return 获得传入日期当天结束时间
*/
public static Date endOfDate(Date date) {
if (date == null) {
date = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 某天的年月日
*
* @param dayUntilNow 距今多少天以前
* @return 年月日map key为 year month day
*/
public static Map<String, Object> getYearMonthAndDay(int dayUntilNow) {
Map<String, Object> map = new HashMap<String, Object>(3);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.DATE, -dayUntilNow);
map.put("year", calendar.get(Calendar.YEAR));
map.put("month", calendar.get(Calendar.MONTH) + 1);
map.put("day", calendar.get(Calendar.DAY_OF_MONTH));
return map;
}
/**
* 将一个字符串转换成日期格式
*
* @param date 字符串日期
* @param pattern 日期格式
* @return date
*/
public static Date toDate(String date, String pattern) {
if ("".equals("" + date)) {
return null;
}
if (pattern == null) {
pattern = STANDARD_DATE_FORMAT;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.ENGLISH);
Date newDate = new Date();
try {
newDate = sdf.parse(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return newDate;
}
/**
* 获取上个月的开始结束时间
*
* @return 上个月的开始结束时间
*/
public static Long[] getLastMonth() {
//取得系统当前时间
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
//取得系统当前时间所在月第一天时间对象
cal.set(Calendar.DAY_OF_MONTH, 1);
//日期减一,取得上月最后一天时间对象
cal.add(Calendar.DAY_OF_MONTH, -1);
//输出上月最后一天日期
int day = cal.get(Calendar.DAY_OF_MONTH);
String months = "";
String days = "";
if (month > 1) {
month--;
} else {
year--;
month = 12;
}
if (String.valueOf(month).length() <= 1) {
months = "0" + month;
} else {
months = String.valueOf(month);
}
if (String.valueOf(day).length() <= 1) {
days = "0" + day;
} else {
days = String.valueOf(day);
}
String firstDay = "" + year + "-" + months + "-01";
String lastDay = "" + year + "-" + months + "-" + days + " 23:59:59";
Long[] lastMonth = new Long[2];
lastMonth[0] = DateUtil.getDateline(firstDay);
lastMonth[1] = DateUtil.getDateline(lastDay, STANDARD_FORMAT);
return lastMonth;
}
/**
* 把日期转换成字符串型
*
* @param date 日期
* @return 字符串时间
*/
public static String toString(Date date) {
return toString(date, STANDARD_FORMAT);
}
/**
* 把日期转换成字符串型
*
* @param date 日期
* @return 字符串时间
*/
public static String toString(Long date) {
return toString(date, STANDARD_FORMAT);
}
/**
* 把日期转换成字符串型
*
* @param date 日期
* @param pattern 类型
* @return 字符串时间
*/
public static String toString(Date date, String pattern) {
if (date == null) {
return "";
}
if (pattern == null) {
pattern = STANDARD_DATE_FORMAT;
}
String dateString = "";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
dateString = sdf.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return dateString;
}
/**
* 时间戳转换成时间类型
*
* @param time 时间戳
* @param pattern 格式
* @return 字符串时间
*/
public static String toString(Long time, String pattern) {
if (time > 0) {
if (time.toString().length() == 10) {
time = time * 1000;
}
Date date = new Date(time);
return DateUtil.toString(date, pattern);
}
return "";
}
/**
* 判断当前时间是否在某个时间范围
*
* @param start 开始时间以秒为单位的时间戳
* @param end 结束时间以秒为单位的时间戳
* @return 是否在范围内
*/
public static boolean inRangeOf(long start, long end) {
long now = getDateline();
return start <= now && end >= now;
}
/**
* 获取指定日期的时间戳
*
* @param date 指定日期
* @return 时间戳
*/
public static long getDateline(String date) {
return Objects.requireNonNull(toDate(date, STANDARD_DATE_FORMAT)).getTime() / 1000;
}
/**
* 获取当前时间的时间戳
*
* @return 时间戳
*/
public static long getDateline() {
return System.currentTimeMillis() / 1000;
}
/**
* 获取当前时间格式化字符串
*
* @return 时间戳
*/
public static String getCurrentDateStr(String format) {
return toString(new Date(), format);
}
/**
* 获取当前时间格式化字符串
*
* @return 格式化的时间
*/
public static String getCurrentDateStr() {
return toString(new Date(), FULL_DATE);
}
/**
* 根据日期格式及日期获取时间戳
*
* @param date 日期
* @param pattern 日期格式
* @return 时间戳
*/
public static long getDateline(String date, String pattern) {
return Objects.requireNonNull(toDate(date, pattern)).getTime() / 1000;
}
/**
* 获取几个月之前的日期时间戳
*
* @param beforeMonth 几个月之前
* @return 时间戳
*/
public static long getBeforeMonthDateline(int beforeMonth) {
SimpleDateFormat format = new SimpleDateFormat(STANDARD_FORMAT);
Calendar c = Calendar.getInstance();
//过去一月
c.setTime(new Date());
c.add(Calendar.MONTH, (0 - beforeMonth));
Date m = c.getTime();
String mon = format.format(m);
return getDateline(mon, STANDARD_FORMAT);
}
/**
* 获取当前天的结束时间
*
* @return 当前天的结束时间
*/
public static Date getCurrentDayEndTime() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1);
cal.set(Calendar.SECOND, cal.get(Calendar.SECOND) - 1);
return cal.getTime();
}
/**
* 获取延时时间
*
* @param startTime 开始时间
* @return 延时时间
*/
public static Integer getDelayTime(Long startTime) {
int time = Math.toIntExact((startTime - System.currentTimeMillis()) / 1000);
//如果时间为负数则改为一秒后执行
if (time <= 0) {
time = 1;
}
return time;
}
/**
* 获取某年某月开始时间
*
* @param year
* @param month
* @return 开始时间
*/
public static Date getBeginTime(int year, int month) {
YearMonth yearMonth = YearMonth.of(year, month);
LocalDate localDate = yearMonth.atDay(1);
LocalDateTime startOfDay = localDate.atStartOfDay();
ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));
return Date.from(zonedDateTime.toInstant());
}
/**
* 获取某年某月结束时间
*
* @param year
* @param month
* @return 结束时间
*/
public static Date getEndTime(int year, int month) {
YearMonth yearMonth = YearMonth.of(year, month);
LocalDate endOfMonth = yearMonth.atEndOfMonth();
LocalDateTime localDateTime = endOfMonth.atTime(23, 59, 59, 999);
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
return Date.from(zonedDateTime.toInstant());
}
}

View File

@ -0,0 +1,173 @@
package com.wzj.soopin.order.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.order.domain.vo.PageVO;
import com.wzj.soopin.order.domain.vo.SearchVO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 分页工具
*
* @author Chopper
* @version v4.0
* @since 2020/11/26 15:23
*/
public class PageUtil {
/**
* Mybatis-Plus分页封装
*
* @param page 分页VO
* @param <T> 范型
* @return 分页响应
*/
public static <T> Page<T> initPage(PageVO page) {
Page<T> p;
int pageNumber = page.getPage();
int pageSize = page.getSize();
String sort = page.getSort();
String order = page.getOrder();
if (pageNumber < 1) {
pageNumber = 1;
}
if (pageSize < 1) {
pageSize = 10;
}
if (pageSize > 100) {
pageSize = 100;
}
if (StrUtil.isNotBlank(sort)) {
Boolean isAsc = false;
if (StrUtil.isBlank(order)) {
isAsc = false;
} else {
if ("desc".equals(order.toLowerCase())) {
isAsc = false;
} else if ("asc".equals(order.toLowerCase())) {
isAsc = true;
}
}
p = new Page<>(pageNumber, pageSize);
if (isAsc) {
p.addOrder(OrderItem.asc(sort));
} else {
p.addOrder(OrderItem.desc(sort));
}
} else {
p = new Page<>(pageNumber, pageSize);
}
return p;
}
/**
* 生成条件搜索 全对象对比 equals
* 如果需要like 需要另行处理
*
* @param object 对象根据对象构建查询条件
* @return 查询wrapper
*/
public static <T> QueryWrapper<T> initWrapper(Object object) {
return initWrapper(object, null);
}
/**
* 生成条件搜索 全对象对比
*
* @param object 对象
* @param searchVo 查询条件
* @return 查询wrapper
*/
public static <T> QueryWrapper<T> initWrapper(Object object, SearchVO searchVo) {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
//创建时间区间判定
if (searchVo != null && StrUtil.isNotBlank(searchVo.getStartDate()) && StrUtil.isNotBlank(searchVo.getEndDate())) {
Date start = DateUtil.parse(searchVo.getStartDate());
Date end = DateUtil.parse(searchVo.getEndDate());
queryWrapper.between("create_time", start, DateUtil.endOfDay(end));
}
if (object != null) {
String[] fieldNames = BeanUtil.getFiledName(object);
//遍历所有属性
for (int j = 0; j < fieldNames.length; j++) {
//获取属性的名字
String key = fieldNames[j];
//获取值
Object value = BeanUtil.getFieldValueByName(key, object);
//如果值不为空才做查询处理
if (value != null && !"".equals(value)) {
//字段数据库中驼峰转下划线
queryWrapper.eq(StringUtils.camel2Underline(key), value);
}
}
}
return queryWrapper;
}
/**
* List 手动分页
*
* @param page 分页对象
* @param list 分页集合
* @return 范型结果
*/
public static <T> List<T> listToPage(PageVO page, List<T> list) {
int pageNumber = page.getPage() - 1;
int pageSize = page.getSize();
if (pageNumber < 0) {
pageNumber = 0;
}
if (pageSize < 1) {
pageSize = 10;
}
if (pageSize > 100) {
pageSize = 100;
}
int fromIndex = pageNumber * pageSize;
int toIndex = pageNumber * pageSize + pageSize;
if (fromIndex > list.size()) {
return new ArrayList<>();
} else if (toIndex >= list.size()) {
return list.subList(fromIndex, list.size());
} else {
return list.subList(fromIndex, toIndex);
}
}
/**
* 转换分页类型
*
* @param originPage 原分页
* @param records 新分页数据
* @param <T> 新类型
* @return 新类型分页
*/
public static <T> IPage<T> convertPage(IPage originPage, List<T> records) {
IPage<T> resultPage = new Page<>();
if (originPage != null) {
resultPage.setCurrent(originPage.getCurrent());
resultPage.setPages(originPage.getPages());
resultPage.setTotal(originPage.getTotal());
resultPage.setSize(originPage.getSize());
resultPage.setRecords(records);
}
return resultPage;
}
}

View File

@ -0,0 +1,181 @@
package com.wzj.soopin.order.utils;
import cn.hutool.core.util.StrUtil;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 字串工具类
*
* @author pikachu
*/
public class StringUtils extends StrUtil {
/**
* MD5加密方法
*
* @param str String
* @return String
*/
public static String md5(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
return null;
}
byte[] resultByte = messageDigest.digest(str.getBytes());
StringBuffer result = new StringBuffer();
for (int i = 0; i < resultByte.length; ++i) {
int v = 0xFF & resultByte[i];
if (v < 16) {
result.append("0");
}
result.append(Integer.toHexString(v));
}
return result.toString();
}
/**
* 获取随机数
*
* @param n 随机次数
* @return
*/
public static String getRandStr(int n) {
Random random = new Random();
String sRand = "";
for (int i = 0; i < n; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
}
return sRand;
}
/**
* 切个字符串如果超出长度则切割
*
* @param var
* @param size
* @return
*/
public static String subStringLength(String var, Integer size) {
if (var.length() > size) {
return var.substring(0, (size - 4)).toString() + "...";
}
return var;
}
/**
* 对象转map
*
* @param obj
* @return
* @throws Exception
*/
public static Map<String, Object> objectToMap(Object obj) throws Exception {
if (obj == null) {
return null;
}
Map<String, Object> map = new HashMap<String, Object>(16);
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (key.compareToIgnoreCase("class") == 0) {
continue;
}
Method getter = property.getReadMethod();
Object value = getter != null ? getter.invoke(obj) : null;
map.put(key, value);
}
return map;
}
/**
* 驼峰法转下划线
*/
public static String camel2Underline(String str) {
if (StrUtil.isBlank(str)) {
return "";
}
if (str.length() == 1) {
return str.toLowerCase();
}
StringBuffer sb = new StringBuffer();
for (int i = 1; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) {
sb.append("_" + Character.toLowerCase(str.charAt(i)));
} else {
sb.append(str.charAt(i));
}
}
return (str.charAt(0) + sb.toString()).toLowerCase();
}
/**
* 如果给定字符串{@code str}中不包含{@code appendStr}则在{@code str}后追加{@code appendStr}
* 如果已包含{@code appendStr}则在{@code str}后追加{@code otherwise}
*
* @param str 给定的字符串
* @param appendStr 需要追加的内容
* @param otherwise {@code appendStr}不满足时追加到{@code str}后的内容
* @return 追加后的字符串
*/
public static String appendIfNotContain(String str, String appendStr, String otherwise) {
if (isEmpty(str) || isEmpty(appendStr)) {
return str;
}
if (str.contains(appendStr)) {
return str.concat(otherwise);
}
return str.concat(appendStr);
}
/**
* 过滤特殊字符串
*
* @param str
* @return
*/
public static String filterSpecialChart(String str) {
String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
/**
* double 转价格字符串
*
* @return
*/
public static String toFen(Double doubleValue) {
String str = doubleValue.toString();
if (!str.contains(".")) {
str = str + ".00";
} else if (str.substring(str.indexOf(".")).length() == 2) {
str = str + "0";
}
return str;
}
}

View File

@ -55,4 +55,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quantity != null "> and quantity = #{quantity}</if>
</where>
</select>
<select id="selectAftersale" parameterType="AftersaleItem" resultMap="AftersaleItemResult">
SELECT * FROM oms_aftersale_item
<where>
<if test="query.memberId != null and query.memberId != ''">
AND member_id LIKE CONCAT('%', #{query.memberId}, '%')
</if>
<if test="query.orderId != null and query.orderId != ''">
AND order_id LIKE CONCAT('%', #{query.orderId}, '%')
</if>
<if test="query.orderItemId != null and query.orderItemId != ''">
AND order_item_id LIKE CONCAT('%', #{query.orderItemId}, '%')
</if>
<if test="query.returnAmount != null">
AND return_amount = #{query.returnAmount}
</if>
<if test="query.quantity != null">
AND quantity = #{query.quantity}
</if>
</where>
</select>
</mapper>

View File

@ -31,4 +31,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="deliverySn != null and deliverySn != ''"> and delivery_sn = #{deliverySn}</if>
</where>
</select>
<select id="selectOderDeliveryHistory" parameterType="OrderDeliveryHistory" resultMap="OrderDeliveryHistoryResult">
SELECT * FROM oms_order_delivery_history
<where>
<if test="query.orderId != null and query.orderId != ''">
AND order_id LIKE CONCAT('%', #{query.orderId}, '%')
</if>
<if test="query.deliveryCompany != null and query.deliveryCompany != ''">
AND delivery_company LIKE CONCAT('%', #{query.deliveryCompany}, '%')
</if>
<if test="query.deliverySn != null and query.deliverySn != ''">
AND delivery_sn LIKE CONCAT('%', #{query.deliverySn}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -53,4 +53,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="spData != null and spData != ''"> and sp_data = #{spData}</if>
</where>
</select>
<select id="selectOrderItem" parameterType="OrderItem" resultMap="OrderItemResult">
SELECT * FROM oms_order_item
<where>
<if test="query.orderId != null and query.orderId != ''">
AND order_id LIKE CONCAT('%', #{query.orderId}, '%')
</if>
<if test="query.productId != null">
AND product_id LIKE CONCAT('%', CAST(#{query.productId} AS CHAR), '%')
</if>
<if test="query.outProductId != null and query.outProductId != ''">
AND out_product_id LIKE CONCAT('%', #{query.outProductId}, '%')
</if>
<if test="query.skuId != null">
AND sku_id LIKE CONCAT('%', CAST(#{query.skuId} AS CHAR), '%')
</if>
<if test="query.outSkuId != null and query.outSkuId != ''">
AND out_sku_id LIKE CONCAT('%', #{query.outSkuId}, '%')
</if>
<if test="query.productSnapshotId != null">
AND product_snapshot_id LIKE CONCAT('%', CAST(#{query.productSnapshotId} AS CHAR), '%')
</if>
<if test="query.skuSnapshotId != null">
AND sku_snapshot_id LIKE CONCAT('%', CAST(#{query.skuSnapshotId} AS CHAR), '%')
</if>
<if test="query.pic != null and query.pic != ''">
AND pic LIKE CONCAT('%', #{query.pic}, '%')
</if>
<if test="query.productNameLike != null and query.productNameLike != ''">
AND product_name LIKE CONCAT('%', #{query.productNameLike}, '%')
</if>
<if test="query.salePrice != null">
AND sale_price = #{query.salePrice}
</if>
<if test="query.purchasePrice != null">
AND purchase_price = #{query.purchasePrice}
</if>
<if test="query.quantity != null">
AND quantity = #{query.quantity}
</if>
<if test="query.productCategoryId != null">
AND product_category_id = #{query.productCategoryId}
</if>
<if test="query.spData != null and query.spData != ''">
AND sp_data LIKE CONCAT('%', #{query.spData}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -91,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="receiveTime != null "> and receive_time = #{receiveTime}</if>
</where>
</select>
<select id="selectManagerOrderPage" resultType="com.wzj.soopin.order.domain.vo.ManagerOrderVO">
select
a.id,

View File

@ -34,4 +34,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="note != null and note != ''"> and note = #{note}</if>
</where>
</select>
<select id="selectOrderOperateHistory" parameterType="OrderOperateHistory" resultMap="OrderOperateHistoryResult">
SELECT * FROM oms_order_operate_history
<where>
<if test="query.orderSn != null and query.orderSn != ''">
AND order_sn LIKE CONCAT('%', #{query.orderSn}, '%')
</if>
<if test="query.operateMan != null and query.operateMan != ''">
AND operate_man LIKE CONCAT('%', #{query.operateMan}, '%')
</if>
<if test="query.orderStatus != null">
AND order_status = #{query.orderStatus}
</if>
<if test="query.note != null and query.note != ''">
AND note LIKE CONCAT('%', #{query.note}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -48,4 +48,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="responseBody != null and responseBody != ''"> and response_body = #{responseBody}</if>
</where>
</select>
<select id="selectWechatPaymentHistory" parameterType="WechatPaymentHistory" resultMap="OmsWechatPaymentHistoryResult">
SELECT * FROM oms_wechat_payment_history
<where>
<if test="query.paymentId != null and query.paymentId != ''">
AND payment_id LIKE CONCAT('%', #{query.paymentId}, '%')
</if>
<if test="query.memberId != null">
AND member_id LIKE CONCAT('%', CAST(#{query.memberId} AS CHAR), '%')
</if>
<if test="query.openid != null and query.openid != ''">
AND openid LIKE CONCAT('%', #{query.openid}, '%')
</if>
<if test="query.realNameLike != null and query.realNameLike != ''">
AND real_name LIKE CONCAT('%', #{query.realNameLike}, '%')
</if>
<if test="query.title != null and query.title != ''">
AND title LIKE CONCAT('%', #{query.title}, '%')
</if>
<if test="query.orderId != null">
AND order_id LIKE CONCAT('%', CAST(#{query.orderId} AS CHAR), '%')
</if>
<if test="query.money != null">
AND money = #{query.money}
</if>
<if test="query.opType != null">
AND op_type = #{query.opType}
</if>
<if test="query.paymentStatus != null">
AND payment_status = #{query.paymentStatus}
</if>
<if test="query.attach != null and query.attach != ''">
AND attach LIKE CONCAT('%', #{query.attach}, '%')
</if>
<if test="query.responseBody != null and query.responseBody != ''">
AND response_body LIKE CONCAT('%', #{query.responseBody}, '%')
</if>
</where>
</select>
</mapper>

Some files were not shown because too many files have changed in this diff Show More