فهرست منبع

订单app端管理端接口分离,app端用户认证,新订单状态机

yubin 5 روز پیش
والد
کامیت
8930b222db
29فایلهای تغییر یافته به همراه2698 افزوده شده و 88 حذف شده
  1. 4 0
      mall-service/src/main/java/com/txz/mall/controller/OrderController.java
  2. 124 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppBannerController.java
  3. 156 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCategoryController.java
  4. 257 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java
  5. 49 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCommonController.java
  6. 121 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppFlashActivityController.java
  7. 235 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderController.java
  8. 124 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderInfoController.java
  9. 122 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderStatusController.java
  10. 183 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppPinkController.java
  11. 124 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductAttrController.java
  12. 129 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductAttrResultController.java
  13. 124 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductAttrValueController.java
  14. 201 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductController.java
  15. 124 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductRuleController.java
  16. 195 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppUserAddressController.java
  17. 49 0
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppUserSignController.java
  18. 1 1
      mall-service/src/main/java/com/txz/mall/core/AuthService.java
  19. 46 0
      mall-service/src/main/java/com/txz/mall/core/UserUtil.java
  20. 55 0
      mall-service/src/main/java/com/txz/mall/enums/OrderEventsEnum.java
  21. 8 12
      mall-service/src/main/java/com/txz/mall/enums/PinkOrderStatusEnum.java
  22. 21 21
      mall-service/src/main/java/com/txz/mall/model/StoreOrder.java
  23. 1 1
      mall-service/src/main/java/com/txz/mall/service/ProductAttrValueService.java
  24. 2 0
      mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java
  25. 30 28
      mall-service/src/main/java/com/txz/mall/service/impl/ProductAttrValueServiceImpl.java
  26. 43 15
      mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java
  27. 169 0
      mall-service/src/main/java/com/txz/mall/util/OrderStateMachine.java
  28. 0 9
      mall-service/src/main/java/dto/CreateOrderRequest.java
  29. 1 1
      mall-service/src/main/resources/mapper/StoreOrderMapper.xml

+ 4 - 0
mall-service/src/main/java/com/txz/mall/controller/OrderController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.annotation.JSONField;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.txz.mall.business.OrderServiceBusiness;
+import com.txz.mall.core.AuthService;
 import com.txz.mall.core.Result;
 import com.txz.mall.core.ResultCode;
 import com.txz.mall.model.StoreOrder;
@@ -116,6 +117,9 @@ public class OrderController {
     @PostMapping("/app/list")
     @ApiOperation(value = "订单获取列表")
     public Result<List<StoreOrderVO>> appList(@RequestBody StoreOrderAppDTO dto, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        dto.setUserId(tokenUserId);
         PageHelper.startPage(page, size);
         PageInfo pageInfo = null;
         try {

+ 124 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppBannerController.java

@@ -0,0 +1,124 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.Banner;
+import com.txz.mall.service.BannerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example.Criteria;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/08/05.
+ */
+@Api(tags = "app轮播图管理")
+@RestController
+@RequestMapping("/app/banner")
+public class AppBannerController {
+
+    private static Logger log = LoggerFactory.getLogger(AppBannerController.class);
+
+    @Resource
+    private BannerService bannerService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "轮播图新增")
+    public Result add(@RequestBody Banner banner) {
+        if (banner == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            banner.setCreateTime(new Date());
+//            banner.setCreateUserId(userId);
+            bannerService.save(banner);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "轮播图删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            Banner banner = new Banner();
+            banner.setId(id);
+            banner.setIsDelete(1);
+            bannerService.update(banner);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "轮播图更新")
+    public Result update(@RequestBody Banner banner) {
+        if (banner == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (banner.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            banner.setUpdateTime(new Date());
+//            banner.setUpdateUserId(userId);
+            bannerService.update(banner);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "轮播图获取详情")
+    public Result<Banner> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        Banner banner = null;
+        try {
+            banner = bannerService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(banner);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "轮播图获取列表")
+    public Result<List<Banner>> list(@RequestBody Banner banner, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(banner.getClass());
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<Banner> list = bannerService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 156 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCategoryController.java

@@ -0,0 +1,156 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.Category;
+import com.txz.mall.service.CategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+import vo.CategoryTreeVO;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/11.
+ */
+@Api(tags = "app类目管理")
+@RestController
+@RequestMapping("/app/category")
+public class AppCategoryController {
+
+    private static Logger log = LoggerFactory.getLogger(AppCategoryController.class);
+
+    @Resource
+    private CategoryService categoryService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "类目新增")
+    public Result add(@RequestBody Category category) {
+        if (category == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            category.setCreateTime(new Date());
+//            category.setCreateUserId(userId);
+            categoryService.save(category);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "类目删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        categoryService.delete(id);
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "类目更新")
+    public Result update(@RequestBody Category category) {
+        if (category == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (category.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            category.setUpdateTime(new Date());
+//            category.setUpdateUserId(userId);
+            categoryService.update(category);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "类目获取详情")
+    public Result<Category> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        Category category = null;
+        try {
+            category = categoryService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(category);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "类目获取列表")
+    public Result<List<Category>> list(@RequestBody Category category, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+
+        Condition condition = new Condition(category.getClass());
+        Example.Criteria criteria = condition.createCriteria();
+        if (StringUtils.isNotBlank(category.getName())) {
+            criteria.andLike("name", "%" + category.getName() + "%");
+        }
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("sort DESC, create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            PageHelper.startPage(page, size);
+            List<Category> list = categoryService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation(value = "获取tree结构的列表")
+    @GetMapping(value = "/list/tree")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "type", value = "类型ID | 类型,1 产品分类,2 附件分类,3 文章分类, 4 设置分类, 5 菜单分类, 6 配置分类, 7 秒杀配置", example = "1"),
+            @ApiImplicitParam(name = "status", value = "-1=全部,0=未生效,1=已生效", example = "1"),
+            @ApiImplicitParam(name = "name", value = "模糊搜索", example = "电视")
+    })
+    public Result<List<CategoryTreeVO>> getListTree(@RequestParam(name = "type") Integer type,
+                                                    @RequestParam(name = "status") Integer status,
+                                                    @RequestParam(name = "name", required = false) String name) {
+        List<CategoryTreeVO> listTree = categoryService.getListTree(type, status, name);
+        return Result.success(listTree);
+    }
+
+    @ApiOperation(value = "根据id集合获取分类列表")
+    @GetMapping(value = "/list/ids")
+    @ApiImplicitParam(name = "ids", value = "分类id集合")
+    public Result<List<Category>> getByIds(@Validated @RequestParam(name = "ids") String ids) {
+        return Result.success(categoryService.findByIds(ids));
+    }
+
+    @ApiOperation(value = "更改分类状态")
+    @GetMapping(value = "/updateStatus/{id}")
+    @ApiImplicitParam(name = "id", value = "分类id")
+    public Result getByIds(@Validated @PathVariable(name = "id") Long id) {
+        if (categoryService.updateStatus(id)) {
+            return Result.success("修改成功");
+        } else {
+            return Result.fail("修改失败");
+        }
+    }
+}

+ 257 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java

@@ -0,0 +1,257 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.business.OrderServiceBusiness;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.core.ServiceException;
+import com.txz.mall.model.StoreCombination;
+import com.txz.mall.service.StoreCombinationService;
+import com.txz.mall.service.StoreOrderService;
+import dto.GoPinkDTO;
+import dto.StoreProductDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+import vo.StoreCombinationRankVO;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by CodeGenerator on 2025/07/14.
+ */
+@Api(tags = "app拼团商品管理")
+@RestController
+@RequestMapping("/app/combination")
+public class AppCombinationController {
+
+    private static Logger log = LoggerFactory.getLogger(AppCombinationController.class);
+
+    @Resource
+    private StoreCombinationService storeCombinationService;
+    @Resource
+    private StoreOrderService storeOrderService;
+    @Resource
+    private OrderServiceBusiness orderServiceBusiness;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "拼团商品表新增")
+    public Result add(@RequestBody StoreCombination storeCombination) {
+        if (storeCombination == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            storeCombination.setCreateTime(new Date());
+//            storeCombination.setCreateUserId(userId);
+            storeCombinationService.save(storeCombination);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "拼团商品表删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        StoreCombination combination = storeCombinationService.findById(id);
+        if (combination == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        Date date = new Date();
+        if (combination.getIsShow().equals(1) && combination.getStartTime().before(date) && combination.getStopTime().after(date)) {
+            throw new ServiceException("活动开启中,商品不支持删除");
+        }
+        try {
+            StoreCombination storeCombination = new StoreCombination();
+            storeCombination.setId(id);
+            storeCombination.setIsDelete(1);
+            storeCombinationService.update(storeCombination);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "拼团商品表更新")
+    public Result update(@RequestBody StoreCombination storeCombination) {
+        if (storeCombination == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storeCombination.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            storeCombination.setUpdateTime(new Date());
+//            storeCombination.setUpdateUserId(userId);
+            storeCombinationService.update(storeCombination);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "拼团商品表获取详情")
+    public Result<StoreCombination> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        StoreCombination storeCombination = null;
+        try {
+            storeCombination = storeCombinationService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storeCombination);
+    }
+
+    @PostMapping("/app/list")
+    @ApiOperation(value = "拼团商品表获取列表")
+    public Result<List<StoreCombination>> list(@RequestBody StoreProductDTO dto, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(StoreCombination.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("isShow", 1);
+
+        if (dto.getSortWay() == null) {
+            dto.setSortWay(0);
+        }
+        switch (dto.getSortWay()) {
+            case 1:
+                condition.setOrderByClause("price ASC");
+                break;
+            case 2:
+                condition.setOrderByClause("price DESC");
+                break;
+            case 3:
+                condition.setOrderByClause("sales DESC");
+                break;
+            case 4:
+                condition.setOrderByClause("sales ASC");
+                break;
+            default:
+                condition.setOrderByClause("create_time DESC");
+                break;
+        }
+        if (dto.getIsNew() != null) {
+            criteria.andEqualTo("isNew", 1);
+        }
+
+        if (dto.getMinPrice() != null && dto.getMaxPrice() != null) {
+            criteria.andBetween("price", dto.getMinPrice(), dto.getMaxPrice());
+        }
+        PageInfo pageInfo = null;
+        try {
+            List<StoreCombination> list = storeCombinationService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @PostMapping("/addActivityProduct")
+    @ApiOperation(value = "添加活动商品")
+    public Result addActivityProduct(@RequestBody List<StoreCombination> list, @RequestParam("activityId") Long activityId) {
+        if (CollectionUtils.isEmpty(list)) {
+            throw new ServiceException("添加商品不能为空");
+        }
+        if (activityId == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        storeCombinationService.addActivityProduct(list, activityId);
+        return Result.success();
+    }
+
+    @PostMapping("/getActivityProductIds")
+    @ApiOperation(value = "获取活动商品ids")
+    public Result<List<Long>> getActivityProductIds(@RequestParam("activityId") Long activityId) {
+        Condition condition = new Condition(StoreCombination.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("activityId", activityId);
+        List<StoreCombination> combinationList = storeCombinationService.findByCondition(condition);
+        List<Long> arrayList = combinationList.stream().map(StoreCombination::getProductId).collect(Collectors.toList());
+        return Result.success(arrayList);
+    }
+
+    /**
+     * 去开团
+     */
+//    @ApiOperation(value = "支付成功-去开团")
+//    @PostMapping(value = "/open")
+    public Result goOpen(@RequestParam("orderId") String orderId) {
+        storeOrderService.goOpen(orderId);
+        return Result.success();
+    }
+
+    /**
+     * 去拼团
+     */
+//    @ApiOperation(value = "去拼团")
+//    @PostMapping(value = "/pink")
+    public Result goPink(@Validated @RequestBody GoPinkDTO dto) {
+        if (dto.getPinkId() == null && dto.getCid() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        storeOrderService.goPink(dto);
+        return Result.success();
+    }
+
+    /**
+     * 更多拼团
+     */
+    @ApiOperation(value = "更多拼团")
+    @GetMapping(value = "/more")
+    public Result<PageInfo<StoreCombination>> getMore(@RequestParam Integer comId, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+        PageInfo pageInfo = null;
+        try {
+            List<StoreCombination> list = storeCombinationService.getMore(comId);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation(value = "排行榜")
+    @GetMapping(value = "/rank")
+    public Result<List<StoreCombinationRankVO>> getRank(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+        PageInfo pageInfo = null;
+        try {
+            List<StoreCombinationRankVO> list = orderServiceBusiness.getRank();
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+
+}

+ 49 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCommonController.java

@@ -0,0 +1,49 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.txz.mall.core.Result;
+import com.txz.mall.enums.PinkOrderStatusEnum;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import vo.EnumBo;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by CodeGenerator on 2025/07/11.
+ */
+@Api(tags = "app通用管理")
+@RestController
+@RequestMapping("/app/common")
+public class AppCommonController {
+
+    private static Logger log = LoggerFactory.getLogger(AppCommonController.class);
+
+    @ApiOperation(value = "枚举 1-订单状态")
+    @PostMapping(value = "/getEnum")
+    public Result getEnum(@RequestParam Integer id) {
+        if (id == null) {
+            id = 1;
+        }
+        List<EnumBo> list = new ArrayList<>();
+        switch (id) {
+            case 1:
+                list = Arrays.stream(PinkOrderStatusEnum.values())
+                        .map(temp -> EnumBo.builder().code(temp.getKey()).name(temp.getValue()).build()).collect(Collectors.toList());
+                break;
+
+            default:
+                break;
+        }
+        return Result.success(list);
+    }
+
+}

+ 121 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppFlashActivityController.java

@@ -0,0 +1,121 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreFlashActivity;
+import com.txz.mall.service.StoreFlashActivityService;
+import dto.StoreFlashActivityDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/14.
+ */
+@Api(tags = "app限时活动管理")
+@RestController
+@RequestMapping("/app/flash/activity")
+public class AppFlashActivityController {
+
+    private static Logger log = LoggerFactory.getLogger(AppFlashActivityController.class);
+
+    @Resource
+    private StoreFlashActivityService storeFlashActivityService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "限时活动新增")
+    public Result add(@RequestBody StoreFlashActivityDTO dto) {
+        if (dto == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            StoreFlashActivity storeFlashActivity = new StoreFlashActivity();
+            BeanUtils.copyProperties(dto, storeFlashActivity);
+            storeFlashActivity.setContent(JSONObject.toJSONString(dto.getContent()));
+            storeFlashActivity.setCreateTime(new Date());
+//            storeFlashActivity.setCreateUserId(userId);
+            storeFlashActivityService.save(storeFlashActivity);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "限时活动删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            StoreFlashActivity storeFlashActivity = new StoreFlashActivity();
+            storeFlashActivity.setId(id);
+            storeFlashActivity.setIsDelete(1);
+            storeFlashActivityService.update(storeFlashActivity);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "限时活动更新")
+    public Result update(@RequestBody StoreFlashActivityDTO dto) {
+        if (dto == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (dto.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            StoreFlashActivity storeFlashActivity = new StoreFlashActivity();
+            BeanUtils.copyProperties(dto, storeFlashActivity);
+            storeFlashActivity.setContent(JSONObject.toJSONString(dto.getContent()));
+            storeFlashActivity.setUpdateTime(new Date());
+//            storeFlashActivity.setUpdateUserId(userId);
+            storeFlashActivityService.update(storeFlashActivity);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "限时活动获取详情")
+    public Result<StoreFlashActivity> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        StoreFlashActivity storeFlashActivity = null;
+        try {
+            storeFlashActivity = storeFlashActivityService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storeFlashActivity);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "限时活动获取列表")
+    public Result<List<StoreFlashActivity>> list(@RequestBody StoreFlashActivity storeFlashActivity, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageInfo pageInfo = null;
+        List<StoreFlashActivity> arrayList = storeFlashActivityService.activityList(storeFlashActivity, page, size);
+        pageInfo = new PageInfo(arrayList);
+        return Result.success(pageInfo);
+    }
+
+}

+ 235 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderController.java

@@ -0,0 +1,235 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.business.OrderServiceBusiness;
+import com.txz.mall.core.AuthService;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreOrder;
+import com.txz.mall.service.StoreOrderService;
+import dto.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import vo.MyRecord;
+import vo.StoreOrderCountItemVO;
+import vo.StoreOrderVO;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/15.
+ */
+@Api(tags = "app端订单管理")
+@RestController
+@RequestMapping("/app/order")
+public class AppOrderController {
+
+    private static Logger log = LoggerFactory.getLogger(AppOrderController.class);
+
+    @Resource
+    private StoreOrderService storeOrderService;
+    @Resource
+    private OrderServiceBusiness orderServiceBusiness;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "创建订单")
+    public Result add(@Validated @RequestBody CreateOrderRequest orderRequest) {
+
+
+        if (orderRequest == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        orderRequest.setUserId(tokenUserId);
+        MyRecord record = storeOrderService.createOrder(orderRequest);
+        return Result.success(record);
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "订单删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            StoreOrder storeOrder = new StoreOrder();
+            storeOrder.setId(id);
+            storeOrder.setIsDelete(1);
+            storeOrderService.update(storeOrder);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "订单更新")
+    public Result update(@RequestBody StoreOrder storeOrder) {
+        if (storeOrder == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storeOrder.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            storeOrder.setUpdateTime(new Date());
+//    		storeOrder.setUpdateUserId(userId);
+            storeOrderService.update(storeOrder);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "订单获取详情")
+    public Result<StoreOrderVO> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        StoreOrderVO vo = orderServiceBusiness.orderDetail(id);
+        return Result.success(vo);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "订单获取列表")
+    public Result<List<StoreOrderVO>> list(@RequestBody StoreOrderDTO dto, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+        PageInfo pageInfo = null;
+        try {
+            List<StoreOrderVO> arrayList = storeOrderService.orderList(dto);
+            pageInfo = new PageInfo(arrayList);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @PostMapping("/app/list")
+    @ApiOperation(value = "订单获取列表")
+    public Result<List<StoreOrderVO>> appList(@RequestBody StoreOrderAppDTO dto, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        dto.setUserId(tokenUserId);
+        PageHelper.startPage(page, size);
+        PageInfo pageInfo = null;
+        try {
+            List<StoreOrderVO> arrayList = storeOrderService.appList(dto);
+            pageInfo = new PageInfo(arrayList);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation(value = "获取订单各状态数量")
+    @PostMapping(value = "/status/num")
+    public Result<StoreOrderCountItemVO> getOrderStatusNum() {
+        return Result.success(storeOrderService.getOrderStatusNum());
+    }
+
+    @ApiOperation("导出订单")
+    @PostMapping("/export")
+    public Result exportFile(@RequestBody StoreOrderDTO dto, HttpServletResponse response) {
+        storeOrderService.exportFile(dto, response);
+        return Result.success();
+    }
+
+    @ApiOperation("退款")
+    @PostMapping("/refund")
+    public Result refund(@RequestParam("id") Long id) {
+        storeOrderService.refund(id);
+        return Result.success();
+    }
+
+    @ApiOperation("关闭订单")
+    @PostMapping("/close")
+    public Result close(@RequestParam("id") Long id) {
+        storeOrderService.close(id);
+        return Result.success();
+    }
+
+    @ApiOperation("取消订单")
+    @PostMapping("/cancel")
+    public Result cancel(@RequestParam("id") Long id) {
+        storeOrderService.cancel(id);
+        return Result.success();
+    }
+
+    @ApiOperation("联系用户")
+    @PostMapping("/contactUser")
+    public Result contactUser(@RequestParam("userId") Long userId) {
+//        storeOrderService.contactUser(userId);
+        return Result.success();
+    }
+
+    @ApiOperation("批量发货")
+    @PostMapping("/batchDelivery")
+    public Result batchDelivery(@RequestBody List<StoreOrderDeliveryDTO> list) {
+        storeOrderService.batchDelivery(list);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "预下单")
+    @PostMapping(value = "/pre/order")
+    public Result preOrder(@RequestBody @Validated PreOrderRequest request) {
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        request.setUserId(tokenUserId);
+        return Result.success(storeOrderService.preOrder(request));
+
+    }
+    @ApiOperation(value = "加载预下单")
+    @PostMapping(value = "load/pre")
+    public Result<PreOrderResponse> loadPreOrder(@RequestParam String preOrderNo) {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        return Result.success(storeOrderService.loadPreOrder(preOrderNo));
+    }
+
+    @ApiOperation(value = "计算订单价格")
+    @PostMapping(value = "/computed/price")
+    public Result<ComputedOrderPriceResponse> computedPrice(@Validated @RequestBody OrderComputedPriceRequest request) {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        request.setUserId(tokenUserId);
+        return Result.success(storeOrderService.computedOrderPrice(request));
+    }
+
+    @ApiOperation(value = "去支付")
+    @PostMapping(value = "/goPay")
+    public Result getPayResult(@RequestBody GoPinkDTO dto) {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        dto.setUserId(tokenUserId);
+        Boolean result = storeOrderService.goPay(dto);
+        return Result.success(result);
+    }
+
+    @ApiOperation("导出发货单")
+    @PostMapping("/exportDelivery")
+    public Result exportDelivery(HttpServletResponse response) {
+        storeOrderService.exportDelivery(response);
+        return Result.success();
+    }
+
+    @ApiOperation("导入发货单")
+    @PostMapping("/importDelivery")
+    public Result importDelivery(@JSONField(serialize = false) @RequestParam("file") MultipartFile file) {
+        storeOrderService.importDelivery(file);
+        return Result.success();
+    }
+}

+ 124 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderInfoController.java

@@ -0,0 +1,124 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreOrderInfo;
+import com.txz.mall.service.StoreOrderInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example.Criteria;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/22.
+ */
+@Api(tags = "app订单内容管理")
+@RestController
+@RequestMapping("/app/store/order/info")
+public class AppOrderInfoController {
+
+    private static Logger log = LoggerFactory.getLogger(AppOrderInfoController.class);
+
+    @Resource
+    private StoreOrderInfoService storeOrderInfoService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "订单内容新增")
+    public Result add(@RequestBody StoreOrderInfo storeOrderInfo) {
+        if (storeOrderInfo == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            storeOrderInfo.setCreateTime(new Date());
+//            storeOrderInfo.setCreateUserId(userId);
+            storeOrderInfoService.save(storeOrderInfo);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "订单内容删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            StoreOrderInfo storeOrderInfo = new StoreOrderInfo();
+            storeOrderInfo.setId(id);
+            storeOrderInfo.setIsDelete(1);
+            storeOrderInfoService.update(storeOrderInfo);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "订单内容更新")
+    public Result update(@RequestBody StoreOrderInfo storeOrderInfo) {
+        if (storeOrderInfo == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storeOrderInfo.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            storeOrderInfo.setUpdateTime(new Date());
+//            storeOrderInfo.setUpdateUserId(userId);
+            storeOrderInfoService.update(storeOrderInfo);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "订单内容获取详情")
+    public Result<StoreOrderInfo> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        StoreOrderInfo storeOrderInfo = null;
+        try {
+            storeOrderInfo = storeOrderInfoService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storeOrderInfo);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "订单内容获取列表")
+    public Result<List<StoreOrderInfo>> list(@RequestBody StoreOrderInfo storeOrderInfo, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(storeOrderInfo.getClass());
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<StoreOrderInfo> list = storeOrderInfoService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 122 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderStatusController.java

@@ -0,0 +1,122 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreOrderStatus;
+import com.txz.mall.service.StoreOrderStatusService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example.Criteria;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/25.
+ */
+@Api(tags = "app订单状态管理")
+@RestController
+@RequestMapping("/app/store/order/status")
+public class AppOrderStatusController {
+
+    private static Logger log = LoggerFactory.getLogger(AppOrderStatusController.class);
+
+    @Resource
+    private StoreOrderStatusService storeOrderStatusService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "订单状态新增")
+    public Result add(@RequestBody StoreOrderStatus storeOrderStatus) {
+        if (storeOrderStatus == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            storeOrderStatus.setCreateTime(new Date());
+//            storeOrderStatus.setCreateUserId(userId);
+            storeOrderStatusService.save(storeOrderStatus);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "订单状态删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            StoreOrderStatus storeOrderStatus = new StoreOrderStatus();
+            storeOrderStatus.setId(id);
+            storeOrderStatusService.update(storeOrderStatus);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "订单状态更新")
+    public Result update(@RequestBody StoreOrderStatus storeOrderStatus) {
+        if (storeOrderStatus == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storeOrderStatus.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+//            storeOrderStatus.setUpdateUserId(userId);
+            storeOrderStatusService.update(storeOrderStatus);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "订单状态获取详情")
+    public Result<StoreOrderStatus> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        StoreOrderStatus storeOrderStatus = null;
+        try {
+            storeOrderStatus = storeOrderStatusService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storeOrderStatus);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "订单状态获取列表")
+    public Result<List<StoreOrderStatus>> list(@RequestBody StoreOrderStatus storeOrderStatus, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(storeOrderStatus.getClass());
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<StoreOrderStatus> list = storeOrderStatusService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 183 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppPinkController.java

@@ -0,0 +1,183 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.business.PinkServiceBusiness;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StorePink;
+import com.txz.mall.service.StorePinkService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+import vo.StorePinkDetailVO;
+import vo.StorePinkOngoingVO;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/15.
+ */
+@Api(tags = "app拼团管理")
+@RestController
+@RequestMapping("/app/pink")
+public class AppPinkController {
+
+    private static Logger log = LoggerFactory.getLogger(AppPinkController.class);
+
+    @Resource
+    private StorePinkService storePinkService;
+
+    @Resource
+    private PinkServiceBusiness pinkServiceBusiness;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "拼团新增")
+    public Result add(@RequestBody StorePink storePink) {
+        if (storePink == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            storePink.setCreateTime(new Date());
+//    		storePink.setCreateUserId(userId);
+            storePinkService.save(storePink);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "拼团删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            StorePink storePink = new StorePink();
+            storePink.setId(id);
+            storePink.setIsDelete(1);
+            storePinkService.update(storePink);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "拼团更新")
+    public Result update(@RequestBody StorePink storePink) {
+        if (storePink == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storePink.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            storePink.setUpdateTime(new Date());
+//    		storePink.setUpdateUserId(userId);
+            storePinkService.update(storePink);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "拼团获取详情")
+    public Result<StorePink> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        StorePink storePink = null;
+        try {
+            storePink = storePinkService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storePink);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "拼团获取列表")
+    public Result<List<StorePink>> list(@RequestBody StorePink storePink, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(storePink.getClass());
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("orderId", storePink.getOrderId());
+        criteria.andEqualTo("id", storePink.getId());
+        condition.setOrderByClause("create_time DESC");
+        if (storePink.getPid() != null) {
+            criteria.andEqualTo("pid", storePink.getPid());
+        }
+        PageInfo pageInfo = null;
+        try {
+            List<StorePink> list = storePinkService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation(value = "已存在的拼团列表")
+    @PostMapping(value = "/ongoing/list")
+    public Result<List<StorePinkOngoingVO>> ongoingList(@RequestBody StorePink storePink, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+        List<StorePinkOngoingVO> list = storePinkService.ongoingList(storePink);
+        PageInfo pageInfo = new PageInfo(list);
+        return Result.success(pageInfo);
+    }
+
+    /**
+     * 拼团订单列表
+     */
+    @ApiOperation(value = "拼团订单列表")
+    @GetMapping(value = "/orderPink/{id}")
+    public Result<List<StorePinkDetailVO>> getPinkList(@PathVariable(value = "id") Integer id) {
+        return Result.success(pinkServiceBusiness.getAdminList(id));
+    }
+
+    /**
+     * 拼团成功
+     */
+    @ApiOperation(value = "拼团成功")
+    @PostMapping(value = "/pinkSuccess")
+    public Result pinkSuccess(@RequestParam("id") Long id) {
+        storePinkService.pinkSuccess(id);
+        return Result.success();
+    }
+
+    /**
+     * 拼团失败
+     */
+    @ApiOperation(value = "拼团失败")
+    @PostMapping(value = "/pinkFail")
+    public Result pinkFail() {
+        pinkServiceBusiness.pinkFail();
+        return Result.success();
+    }
+
+    /**
+     * 天选
+     */
+    @ApiOperation(value = "天选")
+    @PostMapping(value = "/theSelection")
+    public Result theSelection(@RequestParam("id") String orderId) {
+        storePinkService.theSelection(orderId);
+        return Result.success();
+    }
+}

+ 124 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductAttrController.java

@@ -0,0 +1,124 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.ProductAttr;
+import com.txz.mall.service.ProductAttrService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example.Criteria;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/16.
+ */
+@Api(tags = "app商品属性管理")
+@RestController
+@RequestMapping("/app/product/attr")
+public class AppProductAttrController {
+
+    private static Logger log = LoggerFactory.getLogger(AppProductAttrController.class);
+
+    @Resource
+    private ProductAttrService productAttrService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "商品属性新增")
+    public Result add(@RequestBody ProductAttr productAttr) {
+        if (productAttr == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            productAttr.setCreateTime(new Date());
+//            productAttr.setCreateUserId(userId);
+            productAttrService.save(productAttr);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "商品属性删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            ProductAttr productAttr = new ProductAttr();
+            productAttr.setId(id);
+            productAttr.setIsDelete(1);
+            productAttrService.update(productAttr);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "商品属性更新")
+    public Result update(@RequestBody ProductAttr productAttr) {
+        if (productAttr == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (productAttr.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            productAttr.setUpdateTime(new Date());
+//            productAttr.setUpdateUserId(userId);
+            productAttrService.update(productAttr);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "商品属性获取详情")
+    public Result<ProductAttr> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        ProductAttr productAttr = null;
+        try {
+            productAttr = productAttrService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(productAttr);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "商品属性获取列表")
+    public Result<List<ProductAttr>> list(@RequestBody ProductAttr productAttr, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(productAttr.getClass());
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<ProductAttr> list = productAttrService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 129 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductAttrResultController.java

@@ -0,0 +1,129 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreProductAttrResult;
+import com.txz.mall.service.StoreProductAttrResultService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/11.
+ */
+@Api(tags = "app商品属性详情管理")
+@RestController
+@RequestMapping("/app/product/attr/result")
+public class AppProductAttrResultController {
+
+    private static Logger log = LoggerFactory.getLogger(AppProductAttrResultController.class);
+
+    @Resource
+    private StoreProductAttrResultService storeProductAttrResultService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "商品属性详情新增")
+    public Result add(@RequestBody StoreProductAttrResult storeProductAttrResult) {
+        if (storeProductAttrResult == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+
+        try {
+            storeProductAttrResult.setCreateTime(new Date());
+//            storeProductAttrResult.setCreateUserId(userId);
+            storeProductAttrResultService.save(storeProductAttrResult);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "商品属性详情删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            StoreProductAttrResult storeProductAttrResult = new StoreProductAttrResult();
+            storeProductAttrResult.setId(id);
+            storeProductAttrResult.setIsDelete(1);
+            storeProductAttrResultService.update(storeProductAttrResult);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "商品属性详情更新")
+    public Result update(@RequestBody StoreProductAttrResult storeProductAttrResult) {
+        if (storeProductAttrResult == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storeProductAttrResult.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            storeProductAttrResult.setUpdateTime(new Date());
+//            storeProductAttrResult.setUpdateUserId(userId);
+            storeProductAttrResultService.update(storeProductAttrResult);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "商品属性详情获取详情")
+    public Result<StoreProductAttrResult> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        StoreProductAttrResult storeProductAttrResult = null;
+        try {
+            storeProductAttrResult = storeProductAttrResultService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storeProductAttrResult);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "商品属性详情获取列表")
+    public Result<List<StoreProductAttrResult>> list(@RequestBody StoreProductAttrResult storeProductAttrResult, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+       
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(storeProductAttrResult.getClass());
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<StoreProductAttrResult> list = storeProductAttrResultService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 124 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductAttrValueController.java

@@ -0,0 +1,124 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.ProductAttrValue;
+import com.txz.mall.service.ProductAttrValueService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example.Criteria;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/16.
+ */
+@Api(tags = "app端SKU")
+@RestController
+@RequestMapping("/app/product/attr/value")
+public class AppProductAttrValueController {
+
+    private static Logger log = LoggerFactory.getLogger(AppProductAttrValueController.class);
+
+    @Resource
+    private ProductAttrValueService productAttrValueService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "SKU新增")
+    public Result add(@RequestBody ProductAttrValue productAttrValue) {
+        if (productAttrValue == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            productAttrValue.setCreateTime(new Date());
+//            productAttrValue.setCreateUserId(userId);
+            productAttrValueService.save(productAttrValue);
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "SKU删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            ProductAttrValue productAttrValue = new ProductAttrValue();
+            productAttrValue.setId(id);
+            productAttrValue.setIsDelete(1);
+            productAttrValueService.update(productAttrValue);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "SKU更新")
+    public Result update(@RequestBody ProductAttrValue productAttrValue) {
+        if (productAttrValue == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (productAttrValue.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            productAttrValue.setUpdateTime(new Date());
+//            productAttrValue.setUpdateUserId(userId);
+            productAttrValueService.update(productAttrValue);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "SKU获取详情")
+    public Result<ProductAttrValue> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        ProductAttrValue productAttrValue = null;
+        try {
+            productAttrValue = productAttrValueService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(productAttrValue);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "SKU获取列表")
+    public Result<List<ProductAttrValue>> list(@RequestBody ProductAttrValue productAttrValue, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(productAttrValue.getClass());
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<ProductAttrValue> list = productAttrValueService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 201 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductController.java

@@ -0,0 +1,201 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreProduct;
+import com.txz.mall.service.StoreProductService;
+import dto.StoreProductAddRequest;
+import dto.StoreProductDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example.Criteria;
+import vo.StoreProductCountItemVO;
+import vo.StoreProductInfoVO;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/10.
+ */
+@Api(tags = "app商品管理")
+@RestController
+@RequestMapping("/app/product")
+public class AppProductController {
+
+    private static Logger log = LoggerFactory.getLogger(AppProductController.class);
+
+    @Resource
+    private StoreProductService storeProductService;
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "商品删除")
+    public Result delete(@RequestParam("ids") List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            ids.forEach(id -> {
+                StoreProduct storeProduct = new StoreProduct();
+                storeProduct.setId(id);
+//                storeProduct.setIsRecycle(1);
+                storeProduct.setIsDelete(1);
+                storeProduct.setUpdateTime(new Date());
+                storeProductService.update(storeProduct);
+            });
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "商品更新")
+    public Result update(@RequestBody @Validated StoreProductAddRequest request) {
+        if (request == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (request.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        storeProductService.update(request);
+        return Result.success();
+    }
+
+    @PostMapping("/updateShowStatus")
+    @ApiOperation(value = "商品上下架")
+    public Result updateShowStatus(@RequestParam Long id, @RequestParam Integer ShowStatus) {
+        if (ShowStatus == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            StoreProduct storeProduct = new StoreProduct();
+            storeProduct.setUpdateTime(new Date());
+//            storeProduct.setUpdateUserId(userId);
+            storeProduct.setId(id);
+            storeProduct.setIsShow(ShowStatus);
+            storeProductService.update(storeProduct);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "商品获取列表")
+    public Result<List<StoreProduct>> list(@RequestBody StoreProductDTO dto, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(StoreProduct.class);
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        if (StringUtils.isNotBlank(dto.getStoreName())) {
+            criteria.andLike("storeName", "%" + dto.getStoreName() + "%");
+        }
+        if (StringUtils.isNotBlank(dto.getItemNumber())) {
+            criteria.andLike("itemNumber", "%" + dto.getItemNumber() + "%");
+        }
+        if (dto.getIsShow() != null) {
+            criteria.andEqualTo("isShow", dto.getIsShow());
+        }
+        if (dto.getCateId() != null) {
+            criteria.andEqualTo("cateId", dto.getCateId());
+        }
+        if (dto.getIsRecycle() != null) {
+            criteria.andEqualTo("isRecycle", dto.getIsRecycle());
+        }
+        if (dto.getMinPrice() != null && dto.getMaxPrice() != null) {
+            criteria.andBetween("price", dto.getMinPrice(), dto.getMaxPrice());
+        }
+        PageInfo pageInfo = null;
+        try {
+            List<StoreProduct> list = storeProductService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation("商品导入")
+    @PostMapping("/import")
+    public Result importFile(@JSONField(serialize = false) @RequestParam("file") MultipartFile file) {
+        storeProductService.importFile(file);
+        return Result.success();
+    }
+
+    @ApiOperation("商品导入模版")
+    @PostMapping("/export")
+    public Result exportFile(HttpServletResponse response) {
+        storeProductService.exportFile(response);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "商品详情")
+    @PostMapping(value = "/detail")
+    public Result<StoreProductInfoVO> info(@RequestParam Long id) {
+        return Result.success(storeProductService.getInfo(id));
+    }
+
+    @PostMapping("/batchShowStatus")
+    @ApiOperation(value = "批量商品上下架")
+    public Result batchShowStatus(@RequestParam("ids") List<Long> ids, @RequestParam("showStatus") Integer showStatus) {
+        if (showStatus == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (CollectionUtils.isEmpty(ids)) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            ids.forEach(id -> {
+                StoreProduct storeProduct = new StoreProduct();
+                storeProduct.setUpdateTime(new Date());
+//                storeProduct.setUpdateUserId(userId);
+                storeProduct.setId(id);
+                storeProduct.setIsShow(showStatus);
+                storeProductService.update(storeProduct);
+            });
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @ApiOperation(value = "获取商品各状态数量")
+    @GetMapping(value = "/status/num")
+    public Result<StoreProductCountItemVO> getOrderStatusNum() {
+        return Result.success(storeProductService.getOrderStatusNum());
+    }
+
+    @ApiOperation(value = "新增商品")
+    @PostMapping(value = "/add")
+    public Result<String> save(@RequestBody @Validated StoreProductAddRequest request) {
+        storeProductService.save(request);
+        return Result.success();
+    }
+
+}

+ 124 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppProductRuleController.java

@@ -0,0 +1,124 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.StoreProductRule;
+import com.txz.mall.service.StoreProductRuleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/11.
+ */
+@Api(tags = "app商品规则管理")
+@RestController
+@RequestMapping("/app/product/rule")
+public class AppProductRuleController {
+
+    private static Logger log = LoggerFactory.getLogger(AppProductRuleController.class);
+
+    @Resource
+    private StoreProductRuleService storeProductRuleService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "商品规则新增")
+    public Result add(@RequestBody StoreProductRule storeProductRule) {
+        if (storeProductRule == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+
+        storeProductRule.setCreateTime(new Date());
+//            storeProductRule.setCreateUserId(userId);
+        storeProductRuleService.saveRule(storeProductRule);
+        return Result.success();
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "商品规则删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            StoreProductRule storeProductRule = new StoreProductRule();
+            storeProductRule.setId(id);
+            storeProductRule.setIsDelete(1);
+            storeProductRuleService.update(storeProductRule);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "商品规则更新")
+    public Result update(@RequestBody StoreProductRule storeProductRule) {
+        if (storeProductRule == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (storeProductRule.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        try {
+            storeProductRule.setUpdateTime(new Date());
+//            storeProductRule.setUpdateUserId(userId);
+            storeProductRuleService.update(storeProductRule);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "商品规则获取详情")
+    public Result<StoreProductRule> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+
+        StoreProductRule storeProductRule = null;
+        try {
+            storeProductRule = storeProductRuleService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(storeProductRule);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "商品规则获取列表")
+    public Result<List<StoreProductRule>> list(@RequestBody StoreProductRule storeProductRule, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(storeProductRule.getClass());
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        PageInfo pageInfo = null;
+        try {
+            List<StoreProductRule> list = storeProductRuleService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+}

+ 195 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppUserAddressController.java

@@ -0,0 +1,195 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.txz.mall.core.AuthService;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.model.UserAddress;
+import com.txz.mall.service.StoreOrderService;
+import com.txz.mall.service.UserAddressService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by CodeGenerator on 2025/07/15.
+ */
+@Api(tags = "app收获地址管理")
+@RestController
+@RequestMapping("/app/user/address")
+public class AppUserAddressController {
+
+    private static Logger log = LoggerFactory.getLogger(AppUserAddressController.class);
+
+    @Resource
+    private UserAddressService userAddressService;
+
+    @Resource
+    private StoreOrderService storeOrderService;
+
+    @PostMapping("/add")
+    @ApiOperation(value = "收获地址新增")
+    public Result<Long> add(@RequestBody UserAddress userAddress) {
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        userAddress.setUid(tokenUserId);
+        if (userAddress == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            userAddress.setCreateTime(new Date());
+            userAddress.setCreateUserId(userAddress.getUid());
+            userAddressService.save(userAddress);
+            if (userAddress.getIsDefault() == 1) {
+                checkOnlyAddress(userAddress, userAddress.getId());
+            }
+        } catch (Exception e) {
+            log.error("新增对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(userAddress.getId());
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "收获地址删除")
+    public Result delete(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            UserAddress userAddress = new UserAddress();
+            userAddress.setId(id);
+            userAddress.setIsDelete(1);
+            userAddressService.update(userAddress);
+        } catch (Exception e) {
+            log.error("删除对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "收获地址更新")
+    public Result update(@RequestBody UserAddress userAddress) {
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        userAddress.setUid(tokenUserId);
+        if (userAddress == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        if (userAddress.getId() == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        try {
+            userAddress.setUpdateTime(new Date());
+//    		userAddress.setUpdateUserId(userId);
+            userAddressService.update(userAddress);
+            if (userAddress.getIsDefault() == 1) {
+                checkOnlyAddress(userAddress, userAddress.getId());
+            }
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "收获地址获取详情")
+    public Result<UserAddress> detail(@RequestParam Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.ID_IS_NULL);
+        }
+        UserAddress userAddress = null;
+        try {
+            userAddress = userAddressService.findById(id);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(userAddress);
+    }
+
+    @PostMapping("/list")
+    @ApiOperation(value = "收获地址获取列表")
+    public Result<List<UserAddress>> list(@RequestBody UserAddress userAddress, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        userAddress.setUid(tokenUserId);
+        PageHelper.startPage(page, size);
+
+        Condition condition = new Condition(userAddress.getClass());
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        condition.setOrderByClause("create_time DESC");
+        if (userAddress.getUid() != null) {
+            criteria.andEqualTo("uid", userAddress.getUid());
+        }
+        PageInfo pageInfo = null;
+        try {
+            List<UserAddress> list = userAddressService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success(pageInfo);
+    }
+
+    @PostMapping("/default")
+    @ApiOperation(value = "设置默认地址")
+    public Result defaultAddress(@RequestParam("id") Long id) {
+        if (id == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        try {
+            UserAddress userAddress = new UserAddress();
+            userAddress.setUpdateTime(new Date());
+//    		userAddress.setUpdateUserId(userId);
+            userAddress.setId(id);
+            userAddress.setIsDefault(1);
+            userAddressService.update(userAddress);
+
+            UserAddress address = userAddressService.findById(id);
+            if (address == null) {
+                return Result.fail(ResultCode.OBJECT_IS_NULL);
+            }
+            checkOnlyAddress(address, id);
+        } catch (Exception e) {
+            log.error("更新对象操作异常e:{}", e);
+            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        return Result.success();
+    }
+
+    @PostMapping("/getDefault")
+    @ApiOperation(value = "获取默认地址")
+    public Result<UserAddress> getDefault(@RequestParam("uid") Long uid) {
+        if (uid == null) {
+            return Result.fail(ResultCode.OBJECT_IS_NULL);
+        }
+        UserAddress userAddress = userAddressService.getDefaultByUid(uid);
+        return Result.success(userAddress);
+    }
+
+    private void checkOnlyAddress(UserAddress userAddress, Long defaultId) {
+        Condition condition = new Condition(UserAddress.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("uid", userAddress.getUid());
+        criteria.andNotEqualTo("id", defaultId);
+        criteria.andEqualTo("isDefault", 1);
+        List<UserAddress> list = userAddressService.findByCondition(condition);
+        for (UserAddress ua : list) {
+            ua.setIsDefault(0);
+            userAddressService.update(ua);
+        }
+    }
+}

+ 49 - 0
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppUserSignController.java

@@ -0,0 +1,49 @@
+package com.txz.mall.controller.appcontroller;
+
+import com.txz.mall.core.AuthService;
+import com.txz.mall.core.Result;
+import com.txz.mall.service.UserSignService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import vo.UserSignDetailVO;
+
+import javax.annotation.Resource;
+
+/**
+ * Created by CodeGenerator on 2025/07/11.
+ */
+@Api(tags = "app签到管理")
+@RestController
+@RequestMapping("/app/user/sign")
+public class AppUserSignController {
+
+    private static Logger log = LoggerFactory.getLogger(AppUserSignController.class);
+
+    @Resource
+    private UserSignService userSignService;
+
+    @ApiOperation(value = "签到")
+    @PostMapping(value = "/clockIn")
+    public Result clockIn() {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+
+        userSignService.clockIn(tokenUserId);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "今日记录详情")
+    @PostMapping(value = "/todayDetail")
+    public Result<UserSignDetailVO> todayDetail() {
+
+        Long tokenUserId = AuthService.getTokenUserId(null);
+        return Result.success(userSignService.todayDetail(tokenUserId));
+    }
+
+}

+ 1 - 1
mall-service/src/main/java/com/txz/mall/core/AuthService.java

@@ -100,7 +100,7 @@ public class AuthService {
         return null;
     }
 
-    public Long getTokenUserId(HttpServletRequest request) {
+    public static Long getTokenUserId(HttpServletRequest request) {
         if (request == null) {
             ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
             if (null != sra) {

+ 46 - 0
mall-service/src/main/java/com/txz/mall/core/UserUtil.java

@@ -0,0 +1,46 @@
+package com.txz.mall.core;
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.txz.mall.core.cache.CacheKey;
+import com.txz.mall.core.cache.CacheType;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Date: 2019/10/10 10:12
+ * @Version 1.0
+ */
+@Component
+public class UserUtil {
+
+    @Resource
+    private RedisUtil redisUtil;
+
+//    @Resource
+//    private UserService userService;
+
+
+    public JSONObject getTokenUser(HttpServletRequest request) {
+        if (request == null){
+            ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            if (null != sra) {
+                request = sra.getRequest();
+            } else {
+                return null;
+            }
+        }
+        String token = request.getHeader("accessToken");
+        CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
+        Object user = redisUtil.get(key.toString());
+        if (user != null) {
+            return (JSONObject) JSONObject.toJSON(user);
+            //return JSONUtil.toBean(user.toString(), User.class);
+        }
+        return null;
+    }
+}

+ 55 - 0
mall-service/src/main/java/com/txz/mall/enums/OrderEventsEnum.java

@@ -0,0 +1,55 @@
+package com.txz.mall.enums;
+
+import java.util.Objects;
+
+/**
+ * 订单状态类型枚举
+ */
+public enum OrderEventsEnum {
+
+
+
+
+    GROUP_PURCHASE_PAY(1, "支付订单"),
+    GROUP_PURCHASE_CANCEL(2, "取消订单"),
+
+    GROUP_PURCHASE_WIN(3,"拼团中奖"),
+
+    GROUP_PURCHASE_FAIL(4,"拼团失败"),
+
+    GROUP_PURCHASE_NOT_WIN(5,"拼团未中奖"),
+
+    GROUP_PURCHASE_DELIVER(6, "商家发货"),
+    GROUP_PURCHASE_CONFIRM_RECEIPT(7, "买家确认收货"),
+
+    GROUP_PURCHASE_APPLY_REFUND(8, "申请退款"),
+    GROUP_PURCHASE_COMPLETE_REFUND(9, "完成退款");
+
+    private Integer key;
+    private String value;
+
+    OrderEventsEnum(Integer key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public static OrderEventsEnum getEnum(Integer inType) {
+        if (inType == null) {
+            return null;
+        }
+        for (OrderEventsEnum temp : values()) {
+            if (Objects.equals(temp.key, inType)) {
+                return temp;
+            }
+        }
+        return null;
+    }
+
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

+ 8 - 12
mall-service/src/main/java/com/txz/mall/enums/PinkOrderStatusEnum.java

@@ -7,23 +7,19 @@ import java.util.Objects;
  */
 public enum PinkOrderStatusEnum {
 
-    UNPAID(1, "待支付"),
-    WAIT_OPEN(2, "等待成团"),
+    GROUP_ORDER_TO_PAY(1, "拼团待支付"),
+    GROUP_ORDER_CANCELLATION(2, "拼团订单取消"),
 
-    GROUP_REFUND(4, "成团退款"),
-    GROUP_REFUNDING(5, "成团退款中"),
+    GROUP_ORDER_PAID(3, "拼团已支付"),
+    GROUP_ORDER_REFUND(4, "拼团失败已退款"),
 
-    UN_GROUP_REFUND(6, "未成团退款"),
-    UN_GROUP_REFUNDING(7, "未成团退款中"),
+    GROUP_ORDER_TO_SHIP(5, "拼团待发货"),
+    GROUP_ORDER_TO_CLOSED(6, "拼团未中奖关闭"),
 
-    REFUNDED(7, "已退款"),
+    GROUP_ORDER_TO_RECEVIE(7, "拼团待收货"),
 
-    WAIT_DELIVER(8, "待发货"),
-    WAIT_RECEIVER(9, "待收货"),
+    GROUP_ORDER_COMPLETED(8, "拼团订单完成")
 
-    COMPLETE(10, "已完成"),
-    CANCEL(11, "已取消"),
-    CLOSE(12, "已关闭"),
     ;
 
     private Integer key;

+ 21 - 21
mall-service/src/main/java/com/txz/mall/model/StoreOrder.java

@@ -332,9 +332,9 @@ public class StoreOrder {
     /**
      * 消息提醒
      */
-    @ApiModelProperty(value = "消息提醒")
-    @Column(name = "is_remind")
-    private Integer isRemind;
+//    @ApiModelProperty(value = "消息提醒")
+//    @Column(name = "is_remind")
+//    private Integer isRemind;
 
     /**
      * 更新时间
@@ -349,12 +349,12 @@ public class StoreOrder {
     @Column(name = "delivery_code")
     private String deliveryCode;
 
-    /**
-     * 用户拼团活动id 0没有
-     */
-    @ApiModelProperty(value = "用户砍价活动id 0没有")
-    @Column(name = "bargain_user_id")
-    private Integer bargainUserId;
+//    /**
+//     * 用户拼团活动id 0没有
+//     */
+//    @ApiModelProperty(value = "用户砍价活动id 0没有")
+//    @Column(name = "bargain_user_id")
+//    private Integer bargainUserId;
 
     /**
      * 订单类型:0-普通订单,1-视频号订单
@@ -369,19 +369,19 @@ public class StoreOrder {
     @Column(name = "pro_total_price")
     private BigDecimal proTotalPrice;
 
-    /**
-     * 改价前支付金额
-     */
-    @ApiModelProperty(value = "改价前支付金额")
-    @Column(name = "before_pay_price")
-    private BigDecimal beforePayPrice;
+//    /**
+//     * 改价前支付金额
+//     */
+//    @ApiModelProperty(value = "改价前支付金额")
+//    @Column(name = "before_pay_price")
+//    private BigDecimal beforePayPrice;
 
-    /**
-     * 是否改价,0-否,1-是
-     */
-    @ApiModelProperty(value = "是否改价,0-否,1-是")
-    @Column(name = "is_alter_price")
-    private Integer isAlterPrice;
+//    /**
+//     * 是否改价,0-否,1-是
+//     */
+//    @ApiModelProperty(value = "是否改价,0-否,1-是")
+//    @Column(name = "is_alter_price")
+//    private Integer isAlterPrice;
 
     /**
      * 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号

+ 1 - 1
mall-service/src/main/java/com/txz/mall/service/ProductAttrValueService.java

@@ -47,5 +47,5 @@ public interface ProductAttrValueService extends Service<ProductAttrValue> {
      * @param operationType 类型:add—添加,sub—扣减
      * @param type          活动类型 0=商品,1=秒杀,2=砍价,3=拼团
      */
-    void operationStock(Integer id, Integer num, String operationType, Integer type);
+    //void operationStock(Integer id, Integer num, String operationType, Integer type);
 }

+ 2 - 0
mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java

@@ -148,4 +148,6 @@ public interface StoreOrderService extends Service<StoreOrder> {
      * 订单状态机
      */
     void updateOrderStatus(Long id, Integer status);
+
+
 }

+ 30 - 28
mall-service/src/main/java/com/txz/mall/service/impl/ProductAttrValueServiceImpl.java

@@ -8,6 +8,7 @@ import com.txz.mall.core.AbstractService;
 import com.txz.mall.dao.ProductAttrValueMapper;
 import com.txz.mall.model.ProductAttrValue;
 import com.txz.mall.service.ProductAttrValueService;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import tk.mybatis.mapper.entity.Condition;
@@ -22,6 +23,7 @@ import java.util.List;
  */
 @Service
 @Transactional
+
 public class ProductAttrValueServiceImpl extends AbstractService<ProductAttrValue> implements ProductAttrValueService {
     @Resource
     private ProductAttrValueMapper productAttrValueMapper;
@@ -66,33 +68,33 @@ public class ProductAttrValueServiceImpl extends AbstractService<ProductAttrValu
         return null;
     }
 
-    @Override
-    public void operationStock(Integer id, Integer num, String operationType, Integer type) {
-        UpdateWrapper<ProductAttrValue> updateWrapper = new UpdateWrapper<>();
-        if ("add".equals(operationType)) {
-            updateWrapper.setSql(StrUtil.format("stock = stock + {}", num));
-            updateWrapper.setSql(StrUtil.format("sales = sales - {}", num));
-            if (type > 0) {
-                updateWrapper.setSql(StrUtil.format("quota = quota + {}", num));
-            }
-        }
-        if ("sub".equals(operationType)) {
-            updateWrapper.setSql(StrUtil.format("stock = stock - {}", num));
-            updateWrapper.setSql(StrUtil.format("sales = sales + {}", num));
-            if (type > 0) {
-                updateWrapper.setSql(StrUtil.format("quota = quota - {}", num));
-                // 扣减时加乐观锁保证库存不为负
-                updateWrapper.last(StrUtil.format("and (quota - {} >= 0)", num));
-            } else {
-                // 扣减时加乐观锁保证库存不为负
-                updateWrapper.last(StrUtil.format("and (stock - {} >= 0)", num));
-            }
-        }
-        updateWrapper.eq("id", id);
-        updateWrapper.eq("type", type);
-//        boolean update = update(updateWrapper);
-//        if (!update) {
-//            throw new ServiceException("更新商品attrValue失败,attrValueId = " + id);
+//    @Override
+//    public void operationStock(Integer id, Integer num, String operationType, Integer type) {
+//        UpdateWrapper<ProductAttrValue> updateWrapper = new UpdateWrapper<>();
+//        if ("add".equals(operationType)) {
+//            updateWrapper.setSql(StrUtil.format("stock = stock + {}", num));
+//            updateWrapper.setSql(StrUtil.format("sales = sales - {}", num));
+//            if (type > 0) {
+//                updateWrapper.setSql(StrUtil.format("quota = quota + {}", num));
+//            }
 //        }
-    }
+//        if ("sub".equals(operationType)) {
+//            updateWrapper.setSql(StrUtil.format("stock = stock - {}", num));
+//            updateWrapper.setSql(StrUtil.format("sales = sales + {}", num));
+//            if (type > 0) {
+//                updateWrapper.setSql(StrUtil.format("quota = quota - {}", num));
+//                // 扣减时加乐观锁保证库存不为负
+//                updateWrapper.last(StrUtil.format("and (quota - {} >= 0)", num));
+//            } else {
+//                // 扣减时加乐观锁保证库存不为负
+//                updateWrapper.last(StrUtil.format("and (stock - {} >= 0)", num));
+//            }
+//        }
+//        updateWrapper.eq("id", id);
+//        updateWrapper.eq("type", type);
+////        boolean update = update(updateWrapper);
+////        if (!update) {
+////            throw new ServiceException("更新商品attrValue失败,attrValueId = " + id);
+////        }
+//    }
 }

+ 43 - 15
mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java

@@ -22,10 +22,12 @@ import com.txz.mall.core.ResultCode;
 import com.txz.mall.core.ServiceException;
 import com.txz.mall.dubbo.client.CifAccountDubboServiceClient;
 import com.txz.mall.dubbo.client.CifUserDubboServiceClient;
+import com.txz.mall.enums.OrderEventsEnum;
 import com.txz.mall.enums.PinkOrderStatusEnum;
 import com.txz.mall.model.*;
 import com.txz.mall.service.*;
 import com.txz.mall.util.EasyExcelUtil;
+import com.txz.mall.util.OrderStateMachine;
 import com.txz.mall.util.OrderUtils;
 import dto.*;
 import lombok.AllArgsConstructor;
@@ -36,6 +38,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.multipart.MultipartFile;
 import po.StoreOrderExportPO;
 import tk.mybatis.mapper.entity.Condition;
@@ -1229,14 +1232,14 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         storeOrder.setMark(StringEscapeUtils.escapeHtml4(request.getMark()));
         storeOrder.setCombinationId(orderInfoVo.getCombinationId());
         storeOrder.setPinkId(orderInfoVo.getPinkId());
-        storeOrder.setBargainUserId(orderInfoVo.getBargainUserId());
+      //  storeOrder.setBargainUserId(orderInfoVo.getBargainUserId());
         storeOrder.setCreateTime(new Date());
         storeOrder.setShippingType(request.getShippingType());
         storeOrder.setIsChannel(isChannel);
         storeOrder.setPaid(0);
         storeOrder.setCost(BigDecimal.ZERO);
         storeOrder.setType(0);
-        storeOrder.setStatus(PinkOrderStatusEnum.UNPAID.getKey());
+        storeOrder.setStatus(PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey());
 
 //        StoreCouponUser storeCouponUser = new StoreCouponUser();
 //        // 优惠券修改
@@ -1254,17 +1257,17 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             // 拼团商品扣库存
             storeCombinationService.operationStock(skuRecord.getLong("activityId"), skuRecord.getInt("num"), "sub");
             // 拼团商品规格扣库存
-            productAttrValueService.operationStock(skuRecord.getInt("activityAttrValueId"), skuRecord.getInt("num"), "sub", Constants.PRODUCT_TYPE_PINGTUAN);
+        //**    productAttrValueService.operationStock(skuRecord.getInt("activityAttrValueId"), skuRecord.getInt("num"), "sub", Constants.PRODUCT_TYPE_PINGTUAN);
             // 普通商品口库存
             storeProductService.operationStock(skuRecord.getInt("productId"), skuRecord.getInt("num"), "sub");
             // 普通商品规格扣库存
-            productAttrValueService.operationStock(skuRecord.getInt("attrValueId"), skuRecord.getInt("num"), "sub", Constants.PRODUCT_TYPE_NORMAL);
+         //**   productAttrValueService.operationStock(skuRecord.getInt("attrValueId"), skuRecord.getInt("num"), "sub", Constants.PRODUCT_TYPE_NORMAL);
         } else { // 普通商品
             for (MyRecord skuRecord : skuRecordList) {
                 // 普通商品口库存
                 storeProductService.operationStock(skuRecord.getInt("productId"), skuRecord.getInt("num"), "sub");
                 // 普通商品规格扣库存
-                productAttrValueService.operationStock(skuRecord.getInt("attrValueId"), skuRecord.getInt("num"), "sub", Constants.PRODUCT_TYPE_NORMAL);
+         //**   productAttrValueService.operationStock(skuRecord.getInt("attrValueId"), skuRecord.getInt("num"), "sub", Constants.PRODUCT_TYPE_NORMAL);
             }
         }
 
@@ -1317,7 +1320,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         } else {
             throw new ServiceException("获取用户钱包账户失败");
         }
-        updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.WAIT_OPEN.getKey());
+        updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey());
 
         if ("open".equals(dto.getType())) {
             OpenParam openParam = new OpenParam();
@@ -1345,10 +1348,16 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     @Override
     public void refund(Long id) {
         StoreOrder storeOrder = findById(id);
-        if (storeOrder.getPaid().equals(Constants.ORDER_STATUS_H5_UNPAID)) {
+//        if (storeOrder.getPaid().equals(Constants.ORDER_STATUS_H5_UNPAID)) {
+//            throw new ServiceException("当前状态不支持退款");
+//        }
+
+        PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_APPLY_REFUND, null);
+
+        if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
             throw new ServiceException("当前状态不支持退款");
         }
-        updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.GROUP_REFUNDING.getKey());
+        updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.GROUP_ORDER_REFUND.getKey());
 
         // 归还用户余额
 //        accountDubboServiceClient.refund(id.toString(), storeOrder.getOrderId(), storeOrder.getPayPrice());
@@ -1356,24 +1365,40 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         storeCombinationService.operationStock(storeOrder.getCombinationId(), storeOrder.getTotalNum(), "add");
     }
 
+
+    // 中奖回收状态逻辑还没加
     @Override
     public void close(Long id) {
         StoreOrder storeOrder = findById(id);
-        if (storeOrder.getStatus().equals(Constants.ORDER_STATUS_H5_COMPLETE)) {
-            updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.CLOSE.getKey());
-        } else {
+        PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_NOT_WIN, null);
+
+        if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
             throw new ServiceException("当前状态不支持关闭");
         }
+        updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.GROUP_ORDER_TO_CLOSED.getKey());
+
+//        if (storeOrder.getStatus().equals(Constants.ORDER_STATUS_H5_COMPLETE)) {
+//            updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.CLOSE.getKey());
+//        } else {
+//            throw new ServiceException("当前状态不支持关闭");
+//        }
     }
 
     @Override
     public void cancel(Long id) {
         StoreOrder storeOrder = findById(id);
-        if (storeOrder.getPaid().equals(0)) {
-            updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.CANCEL.getKey());
-        } else {
+        PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_CANCEL, null);
+
+        if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
             throw new ServiceException("当前状态不支持取消");
         }
+        updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.GROUP_ORDER_CANCELLATION.getKey());
+
+//        if (storeOrder.getPaid().equals(0)) {
+//            updateOrderStatus(storeOrder.getId(), PinkOrderStatusEnum.CANCEL.getKey());
+//        } else {
+//            throw new ServiceException("当前状态不支持取消");
+//        }
     }
 
     @Override
@@ -1408,7 +1433,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 storeOrder.setDeliveryId(po.getDeliveryId());
                 storeOrder.setDeliveryName(po.getDeliveryName());
                 update(storeOrder);
-                updateOrderStatus(po.getId(), PinkOrderStatusEnum.WAIT_RECEIVER.getKey());
+             //   updateOrderStatus(po.getId(), PinkOrderStatusEnum.WAIT_RECEIVER.getKey());
+               updateOrderStatus(po.getId(), PinkOrderStatusEnum.GROUP_ORDER_TO_RECEVIE.getKey());
             }
         } catch (IOException e) {
             throw new RuntimeException(e);
@@ -1423,6 +1449,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         storeOrderStatusService.createLog(id, "", PinkOrderStatusEnum.getEnum(status).getValue());
     }
 
+
+
     /**
      * 校验商品库存(生成订单)
      *

+ 169 - 0
mall-service/src/main/java/com/txz/mall/util/OrderStateMachine.java

@@ -0,0 +1,169 @@
+package com.txz.mall.util;
+
+import com.txz.mall.enums.OrderEventsEnum;
+import com.txz.mall.enums.PinkOrderStatusEnum;
+import com.txz.mall.model.StoreOrder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.BiConsumer;
+
+public class OrderStateMachine {
+
+
+    private static Logger logger = LoggerFactory.getLogger(OrderStateMachine.class);
+
+    // 状态转移表: 当前状态 -> (事件 -> 目标状态)
+    private static final Map<PinkOrderStatusEnum, Map<OrderEventsEnum, PinkOrderStatusEnum>> transitionTable;
+
+    // 状态变更动作: 当前状态 + 事件 -> 执行的动作
+    private static final Map<PinkOrderStatusEnum, Map<OrderEventsEnum, BiConsumer<StoreOrder, Object>>> actionTable;
+
+    static {
+        // 初始化状态转移表
+        transitionTable = new HashMap<>();
+
+        // 待付款状态下的可能转移
+        Map<OrderEventsEnum, PinkOrderStatusEnum> pendingPaymentTransitions = new HashMap<>();
+        pendingPaymentTransitions.put(OrderEventsEnum.GROUP_PURCHASE_PAY, PinkOrderStatusEnum.GROUP_ORDER_PAID);
+        pendingPaymentTransitions.put(OrderEventsEnum.GROUP_PURCHASE_CANCEL, PinkOrderStatusEnum.GROUP_ORDER_CANCELLATION);
+        transitionTable.put(PinkOrderStatusEnum.GROUP_ORDER_TO_PAY, pendingPaymentTransitions);
+
+        // 已支付状态下的可能转移
+        Map<OrderEventsEnum, PinkOrderStatusEnum> pendingDeliveryTransitions = new HashMap<>();
+        pendingDeliveryTransitions.put(OrderEventsEnum.GROUP_PURCHASE_FAIL, PinkOrderStatusEnum.GROUP_ORDER_REFUND);
+        pendingDeliveryTransitions.put(OrderEventsEnum.GROUP_PURCHASE_NOT_WIN, PinkOrderStatusEnum.GROUP_ORDER_TO_CLOSED);
+        pendingDeliveryTransitions.put(OrderEventsEnum.GROUP_PURCHASE_WIN, PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP);
+        transitionTable.put(PinkOrderStatusEnum.GROUP_ORDER_PAID, pendingDeliveryTransitions);
+
+        // 待发货状态下的可能转移
+        Map<OrderEventsEnum, PinkOrderStatusEnum> pendingReceiptTransitions = new HashMap<>();
+        pendingReceiptTransitions.put(OrderEventsEnum.GROUP_PURCHASE_DELIVER, PinkOrderStatusEnum.GROUP_ORDER_TO_RECEVIE);
+
+        transitionTable.put(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP, pendingReceiptTransitions);
+
+        // 待收获态下的可能转移
+        Map<OrderEventsEnum, PinkOrderStatusEnum> completedTransitions = new HashMap<>();
+        completedTransitions.put(OrderEventsEnum.GROUP_PURCHASE_CONFIRM_RECEIPT, PinkOrderStatusEnum.GROUP_ORDER_COMPLETED);
+        transitionTable.put(PinkOrderStatusEnum.GROUP_ORDER_TO_RECEVIE, completedTransitions);
+
+
+        // 初始化状态变更动作表
+        actionTable = new HashMap<>();
+
+        // 待付款状态的动作
+        Map<OrderEventsEnum, BiConsumer<StoreOrder, Object>> pendingPaymentActions = new HashMap<>();
+        pendingPaymentActions.put(OrderEventsEnum.GROUP_PURCHASE_PAY, (order, param) -> {
+            //当前为待支付状态时支付行为产生的操作  如设置支付时间  锁定库存等等
+            order.setPayTime(new Date());
+
+            logger.info("订单[{}]支付成功,支付时间: {}", order.getOrderId(), order.getPayTime());
+        });
+        pendingPaymentActions.put(OrderEventsEnum.GROUP_PURCHASE_CANCEL, (order, param) -> {
+            //当前为待支付状态时取消行为产生的操作  如设置取消时间  释放库存等等
+
+          //  order.set(LocalDateTime.now());
+           logger.info("订单[{}]已取消,取消时间: {}", order.getOrderId(), new Date());
+            // 实际业务中这里会触发库存释放等操作
+        });
+        actionTable.put(PinkOrderStatusEnum.GROUP_ORDER_TO_PAY, pendingPaymentActions);
+
+        // 待发货状态的动作
+        Map<OrderEventsEnum, BiConsumer<StoreOrder, Object>> pendingDeliveryActions = new HashMap<>();
+        pendingDeliveryActions.put(OrderEventsEnum.GROUP_PURCHASE_FAIL, (order, param) -> {
+           // order.setDeliveryTime(LocalDateTime.now());
+           // logger.info("订单[{}]已发货,发货时间: {}", order.getOrderId(), order.getDeliveryTime());
+            // 实际业务中这里会记录物流信息
+        });
+        pendingDeliveryActions.put(OrderEventsEnum.GROUP_PURCHASE_NOT_WIN, (order, param) -> {
+            //logger.info("订单[{}]申请退款", order.getOrderId());
+        });
+
+        pendingDeliveryActions.put(OrderEventsEnum.GROUP_PURCHASE_WIN, (order, param) -> {
+            //logger.info("订单[{}]申请退款", order.getOrderId());
+        });
+        actionTable.put(PinkOrderStatusEnum.GROUP_ORDER_PAID, pendingDeliveryActions);
+
+        //
+        Map<OrderEventsEnum, BiConsumer<StoreOrder, Object>> pendingReceiptActions = new HashMap<>();
+        pendingReceiptActions.put(OrderEventsEnum.GROUP_PURCHASE_DELIVER, (order, param) -> {
+            //order.setConfirmTime(LocalDateTime.now());
+           // logger.info("订单[{}]已确认收货,确认时间: {}", order.getOrderId(), order.getConfirmTime());
+        });
+
+        actionTable.put(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP, pendingReceiptActions);
+
+        Map<OrderEventsEnum, BiConsumer<StoreOrder, Object>> refundingActions = new HashMap<>();
+        refundingActions.put(OrderEventsEnum.GROUP_PURCHASE_CONFIRM_RECEIPT, (order, param) -> {
+           // logger.info("订单[{}]订单完成", order.getOrderId());
+        });
+        actionTable.put(PinkOrderStatusEnum.GROUP_ORDER_TO_RECEVIE, refundingActions);
+    }
+
+    /**
+     * 处理订单事件,进行状态转换
+     * @param order 订单对象
+     * @param event 触发的事件
+     * @param param 事件参数(如支付金额、物流信息等)
+     * @return 状态转换是否成功
+     */
+    public  static PinkOrderStatusEnum  handleEvent(StoreOrder order, OrderEventsEnum event, Object param) {
+        PinkOrderStatusEnum currentState = PinkOrderStatusEnum.getEnum(order.getStatus().intValue());
+
+        // 检查是否允许从当前状态触发该事件
+        Map<OrderEventsEnum, PinkOrderStatusEnum> allowedEvents = transitionTable.get(currentState);
+        if (allowedEvents == null || !allowedEvents.containsKey(event)) {
+//            logger.error("订单[{}]不允许从状态[{}]触发事件[{}]",
+//                    order.getOrderId(), currentState.getValue(), event);
+            return null;
+        }
+
+        // 执行状态变更前的动作
+        BiConsumer<StoreOrder, Object> action = actionTable.get(currentState).get(event);
+        if (action != null) {
+            action.accept(order, param);
+        }
+
+        // 执行状态转换
+        PinkOrderStatusEnum targetState = allowedEvents.get(event);
+        order.setStatus(targetState.getKey());
+
+//        logger.info("订单[{}]状态变更: {} -> {}",
+//                order.getOrderId(), currentState.getValue(), targetState.getValue());
+        return targetState;
+    }
+
+
+    public static void main(String[] args) {
+        // 创建订单
+        StoreOrder order = new StoreOrder();
+        order.setOrderId("1111111");
+        order.setId(1L);
+        order.setStatus(PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey());
+
+
+        System.out.println("初始状态: " + order);
+
+        // 触发支付事件
+        OrderStateMachine.handleEvent(order, OrderEventsEnum.GROUP_PURCHASE_PAY, null);
+        System.out.println("支付后状态: " + order);
+
+        // 触发发货事件
+        OrderStateMachine.handleEvent(order, OrderEventsEnum.GROUP_PURCHASE_DELIVER, "SF1234567890");
+        System.out.println("发货后状态: " + order);
+
+        // 触发确认收货事件
+        OrderStateMachine.handleEvent(order, OrderEventsEnum.GROUP_PURCHASE_CONFIRM_RECEIPT, null);
+        System.out.println("确认收货后状态: " + order);
+
+        // 尝试触发一个不允许的事件(已完成状态不能取消)
+        OrderStateMachine.handleEvent(order, OrderEventsEnum.GROUP_PURCHASE_DELIVER, null);
+       // System.out.println("已完成状态尝试取消: " + (result ? "成功" : "失败"));
+    }
+
+}

+ 0 - 9
mall-service/src/main/java/dto/CreateOrderRequest.java

@@ -11,15 +11,6 @@ import java.io.Serializable;
 
 /**
  * 创建订单请求对象
- * +----------------------------------------------------------------------
- * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- * +----------------------------------------------------------------------
- * | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
- * +----------------------------------------------------------------------
- * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- * +----------------------------------------------------------------------
- * | Author: CRMEB Team <admin@crmeb.com>
- * +----------------------------------------------------------------------
  */
 @Data
 @EqualsAndHashCode(callSuper = false)

+ 1 - 1
mall-service/src/main/resources/mapper/StoreOrderMapper.xml

@@ -54,7 +54,7 @@
         <result column="shipping_type" jdbcType="BIT" property="shippingType"/>
         <result column="clerk_id" jdbcType="INTEGER" property="clerkId"/>
         <result column="is_channel" jdbcType="INTEGER" property="isChannel"/>
-        <result column="is_remind" jdbcType="INTEGER" property="isRemind"/>
+<!--        <result column="is_remind" jdbcType="INTEGER" property="isRemind"/>-->
         <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>
         <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
         <result column="delivery_code" jdbcType="VARCHAR" property="deliveryCode"/>