Quellcode durchsuchen

feat:自提商品(1.0版)和信息采集

caoliqin vor 1 Woche
Ursprung
Commit
802aa03270
34 geänderte Dateien mit 2086 neuen und 23 gelöschten Zeilen
  1. 103 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPickController.java
  2. 93 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPickItemController.java
  3. 103 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreRedeemedRecordController.java
  4. 103 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderPick.java
  5. 43 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderPickItem.java
  6. 12 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductScrm.java
  7. 2 2
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductUserTempField.java
  8. 58 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreRedeemedRecord.java
  9. 61 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderPickItemMapper.java
  10. 61 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderPickMapper.java
  11. 10 7
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductUserRecordMapper.java
  12. 61 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreRedeemedRecordMapper.java
  13. 24 0
      fs-service/src/main/java/com/fs/hisStore/param/FsPickupGoodsListParam.java
  14. 37 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderPickAddParam.java
  15. 21 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderPickListParam.java
  16. 28 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductUserRecordAddParam.java
  17. 23 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductUserRecordValueAddParam.java
  18. 61 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderPickItemService.java
  19. 70 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderPickService.java
  20. 6 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductUserRecordService.java
  21. 61 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreRedeemedRecordService.java
  22. 90 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderPickItemServiceImpl.java
  23. 206 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderPickServiceImpl.java
  24. 65 7
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductUserRecordServiceImpl.java
  25. 91 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreRedeemedRecordServiceImpl.java
  26. 22 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreProductUserTempDetailVO.java
  27. 76 0
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderPickItemMapper.xml
  28. 158 0
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderPickMapper.xml
  29. 10 1
      fs-service/src/main/resources/mapper/hisStore/FsStoreProductScrmMapper.xml
  30. 26 6
      fs-service/src/main/resources/mapper/hisStore/FsStoreProductUserRecord/FsStoreProductUserRecordMapper.xml
  31. 91 0
      fs-service/src/main/resources/mapper/hisStore/FsStoreRedeemedRecordMapper.xml
  32. 69 0
      fs-user-app/src/main/java/com/fs/app/controller/store/FsPickupGoodsController.java
  33. 70 0
      fs-user-app/src/main/java/com/fs/app/controller/store/FsStoreOrderPickController.java
  34. 71 0
      fs-user-app/src/main/java/com/fs/app/controller/store/FsStoreProductUserRecordController.java

+ 103 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPickController.java

@@ -0,0 +1,103 @@
+package com.fs.hisStore.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.hisStore.domain.FsStoreOrderPick;
+import com.fs.hisStore.service.IFsStoreOrderPickService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 自提商品订单Controller
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+@RestController
+@RequestMapping("/hisStore/storeOrderPick")
+public class FsStoreOrderPickController extends BaseController
+{
+    @Autowired
+    private IFsStoreOrderPickService fsStoreOrderPickService;
+
+    /**
+     * 查询自提商品订单列表
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeOrderPick:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreOrderPick fsStoreOrderPick)
+    {
+        startPage();
+        List<FsStoreOrderPick> list = fsStoreOrderPickService.selectFsStoreOrderPickList(fsStoreOrderPick);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出自提商品订单列表
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeOrderPick:export')")
+    @Log(title = "自提商品订单", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsStoreOrderPick fsStoreOrderPick)
+    {
+        List<FsStoreOrderPick> list = fsStoreOrderPickService.selectFsStoreOrderPickList(fsStoreOrderPick);
+        ExcelUtil<FsStoreOrderPick> util = new ExcelUtil<FsStoreOrderPick>(FsStoreOrderPick.class);
+        return util.exportExcel(list, "自提商品订单数据");
+    }
+
+    /**
+     * 获取自提商品订单详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeOrderPick:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsStoreOrderPickService.selectFsStoreOrderPickById(id));
+    }
+
+    /**
+     * 新增自提商品订单
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeOrderPick:add')")
+    @Log(title = "自提商品订单", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreOrderPick fsStoreOrderPick)
+    {
+        return toAjax(fsStoreOrderPickService.insertFsStoreOrderPick(fsStoreOrderPick));
+    }
+
+    /**
+     * 修改自提商品订单
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeOrderPick:edit')")
+    @Log(title = "自提商品订单", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsStoreOrderPick fsStoreOrderPick)
+    {
+        return toAjax(fsStoreOrderPickService.updateFsStoreOrderPick(fsStoreOrderPick));
+    }
+
+    /**
+     * 删除自提商品订单
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeOrderPick:remove')")
+    @Log(title = "自提商品订单", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsStoreOrderPickService.deleteFsStoreOrderPickByIds(ids));
+    }
+}

+ 93 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPickItemController.java

@@ -0,0 +1,93 @@
+package com.fs.hisStore.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.hisStore.domain.FsStoreOrderPickItem;
+import com.fs.hisStore.service.IFsStoreOrderPickItemService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 自提商品详情Controller
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+@RestController
+@RequestMapping("/hisStore/storeOrderPickItem")
+public class FsStoreOrderPickItemController extends BaseController
+{
+    @Autowired
+    private IFsStoreOrderPickItemService fsStoreOrderPickItemService;
+
+    /**
+     * 查询自提商品详情列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        startPage();
+        List<FsStoreOrderPickItem> list = fsStoreOrderPickItemService.selectFsStoreOrderPickItemList(fsStoreOrderPickItem);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出自提商品详情列表
+     */
+    @GetMapping("/export")
+    public AjaxResult export(FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        List<FsStoreOrderPickItem> list = fsStoreOrderPickItemService.selectFsStoreOrderPickItemList(fsStoreOrderPickItem);
+        ExcelUtil<FsStoreOrderPickItem> util = new ExcelUtil<FsStoreOrderPickItem>(FsStoreOrderPickItem.class);
+        return util.exportExcel(list, "自提商品详情数据");
+    }
+
+    /**
+     * 获取自提商品详情详细信息
+     */
+    @GetMapping(value = "/{itemId}")
+    public AjaxResult getInfo(@PathVariable("itemId") Long itemId)
+    {
+        return AjaxResult.success(fsStoreOrderPickItemService.selectFsStoreOrderPickItemByItemId(itemId));
+    }
+
+    /**
+     * 新增自提商品详情
+     */
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        return toAjax(fsStoreOrderPickItemService.insertFsStoreOrderPickItem(fsStoreOrderPickItem));
+    }
+
+    /**
+     * 修改自提商品详情
+     */
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        return toAjax(fsStoreOrderPickItemService.updateFsStoreOrderPickItem(fsStoreOrderPickItem));
+    }
+
+    /**
+     * 删除自提商品详情
+     */
+	@DeleteMapping("/{itemIds}")
+    public AjaxResult remove(@PathVariable Long[] itemIds)
+    {
+        return toAjax(fsStoreOrderPickItemService.deleteFsStoreOrderPickItemByItemIds(itemIds));
+    }
+}

+ 103 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreRedeemedRecordController.java

@@ -0,0 +1,103 @@
+package com.fs.hisStore.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.hisStore.domain.FsStoreRedeemedRecord;
+import com.fs.hisStore.service.IFsStoreRedeemedRecordService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 自提商品核销记录Controller
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+@RestController
+@RequestMapping("/hisStore/storeRedeemedRecord")
+public class FsStoreRedeemedRecordController extends BaseController
+{
+    @Autowired
+    private IFsStoreRedeemedRecordService fsStoreRedeemedRecordService;
+
+    /**
+     * 查询自提商品核销记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeRedeemedRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        startPage();
+        List<FsStoreRedeemedRecord> list = fsStoreRedeemedRecordService.selectFsStoreRedeemedRecordList(fsStoreRedeemedRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出自提商品核销记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeRedeemedRecord:export')")
+    @Log(title = "自提商品核销记录", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        List<FsStoreRedeemedRecord> list = fsStoreRedeemedRecordService.selectFsStoreRedeemedRecordList(fsStoreRedeemedRecord);
+        ExcelUtil<FsStoreRedeemedRecord> util = new ExcelUtil<FsStoreRedeemedRecord>(FsStoreRedeemedRecord.class);
+        return util.exportExcel(list, "自提商品核销记录数据");
+    }
+
+    /**
+     * 获取自提商品核销记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeRedeemedRecord:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsStoreRedeemedRecordService.selectFsStoreRedeemedRecordById(id));
+    }
+
+    /**
+     * 新增自提商品核销记录
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeRedeemedRecord:add')")
+    @Log(title = "自提商品核销记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        return toAjax(fsStoreRedeemedRecordService.insertFsStoreRedeemedRecord(fsStoreRedeemedRecord));
+    }
+
+    /**
+     * 修改自提商品核销记录
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeRedeemedRecord:edit')")
+    @Log(title = "自提商品核销记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        return toAjax(fsStoreRedeemedRecordService.updateFsStoreRedeemedRecord(fsStoreRedeemedRecord));
+    }
+
+    /**
+     * 删除自提商品核销记录
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:storeRedeemedRecord:remove')")
+    @Log(title = "自提商品核销记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsStoreRedeemedRecordService.deleteFsStoreRedeemedRecordByIds(ids));
+    }
+}

+ 103 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderPick.java

@@ -0,0 +1,103 @@
+package com.fs.hisStore.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 自提商品订单对象 fs_store_order_pick
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsStoreOrderPick extends BaseEntity{
+
+    /** 订单ID */
+    private Long id;
+
+    /** 订单号 */
+    @Excel(name = "订单号")
+    private String orderCode;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 用户姓名 */
+    @Excel(name = "用户姓名")
+    private String nickName;
+
+    /** 用户电话 */
+    @Excel(name = "用户电话")
+    private String phone;
+
+    /** 自提地址 */
+    @Excel(name = "自提地址")
+    private String pickupAddress;
+
+    /** 订单商品总数 */
+    @Excel(name = "订单商品总数")
+    private Integer totalNum;
+
+    /** 订单总价 */
+    @Excel(name = "订单总价")
+    private BigDecimal totalPrice;
+
+    /** 核销码 */
+    @Excel(name = "核销码")
+    private String redeemedCode;
+
+    /** 核销状态,1-待核销,2-已核销,3-已取消 */
+    @Excel(name = "核销状态,1-待核销,2-已核销,3-已取消")
+    private Integer redeemedStatus;
+
+    /** 核销时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "核销时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date redeemedTime;
+
+    /** 核销记录id */
+    @Excel(name = "核销记录id")
+    private Long redeemedId;
+
+    /** 取消订单说明 */
+    @Excel(name = "取消订单说明")
+    private String cancelExplain;
+
+    /** 取消时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date cancelTime;
+
+    /** 是否删除 */
+    @Excel(name = "是否删除")
+    private Integer isDel;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private Long companyId;
+
+    /** 所属销售 */
+    @Excel(name = "所属销售")
+    private Long companyUserId;
+
+    /** $column.columnComment */
+    @Excel(name = "所属销售")
+    private Long deptId;
+
+    /** $column.columnComment */
+    @Excel(name = "所属销售")
+    private String itemJson;
+
+    /** 信息采集记录id */
+    @Excel(name = "信息采集记录id")
+    private Long userRecordId;
+
+
+}

+ 43 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderPickItem.java

@@ -0,0 +1,43 @@
+package com.fs.hisStore.domain;
+
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 自提商品详情对象 fs_store_order_pick_item
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsStoreOrderPickItem extends BaseEntity{
+
+    /** 主键id */
+    private Long itemId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    private Long orderId;
+
+    /** 订单号 */
+    @Excel(name = "订单号")
+    private String orderCode;
+
+    /** 商品ID */
+    @Excel(name = "商品ID")
+    private Long productId;
+
+    /** $column.columnComment */
+    @Excel(name = "商品ID")
+    private String jsonInfo;
+
+    /** $column.columnComment */
+    @Excel(name = "商品ID")
+    private Integer num;
+
+
+}

+ 12 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductScrm.java

@@ -393,6 +393,18 @@ public class FsStoreProductScrm extends BaseEntity
     /** 是否自提商品 0否 1是 */
     private Integer isPickup;
 
+    /**
+     * 信息采集模板id,关联商品信息采集模板表
+     */
+    @Excel(name = "信息采集模板id")
+    private Long user_temp_id;
+
+    /**
+     * 用户信息采集记录id,关联商品信息采集记录表
+     */
+    @Excel(name = "用户信息采集记录id")
+    private Long user_record_id;
+
     /** 商品类型多选查询(用于IN查询) */
     private List<Integer> productTypes;
 }

+ 2 - 2
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductUserTempField.java

@@ -30,8 +30,8 @@ public class FsStoreProductUserTempField extends BaseEntity{
     @Excel(name = "是否必填,0-否,1-是")
     private Integer isRequired;
 
-    /** 字段类型:text/number/date/json */
-    @Excel(name = "字段类型:text/number/date/json")
+    /** 字段类型:文本、单选、多选 */
+    @Excel(name = "字段类型:文本、单选、多选")
     private String fieldType;
 
     /** 选项内容(单选/多选时必填,分号分隔) */

+ 58 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreRedeemedRecord.java

@@ -0,0 +1,58 @@
+package com.fs.hisStore.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 自提商品核销记录对象 fs_store_redeemed_record
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsStoreRedeemedRecord extends BaseEntity{
+
+    /** 主键id */
+    private Long id;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 订单id */
+    @Excel(name = "订单id")
+    private Long orderId;
+
+    /** 订单号 */
+    @Excel(name = "订单号")
+    private String orderCode;
+
+    /** 核销时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "核销时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date redeemedTime;
+
+    /** 所属销售 */
+    @Excel(name = "所属销售")
+    private Long companyUserId;
+
+    /** 所属公司 */
+    @Excel(name = "所属公司")
+    private Long companyId;
+
+    /** 核销人员 */
+    @Excel(name = "核销人员")
+    private String redeemedUserId;
+
+    /** 核销是否成功,1-成功,0-失败 */
+    @Excel(name = "核销是否成功,1-成功,0-失败")
+    private Integer status;
+
+
+}

+ 61 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderPickItemMapper.java

@@ -0,0 +1,61 @@
+package com.fs.hisStore.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hisStore.domain.FsStoreOrderPickItem;
+
+/**
+ * 自提商品详情Mapper接口
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+public interface FsStoreOrderPickItemMapper extends BaseMapper<FsStoreOrderPickItem>{
+    /**
+     * 查询自提商品详情
+     * 
+     * @param itemId 自提商品详情主键
+     * @return 自提商品详情
+     */
+    FsStoreOrderPickItem selectFsStoreOrderPickItemByItemId(Long itemId);
+
+    /**
+     * 查询自提商品详情列表
+     * 
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 自提商品详情集合
+     */
+    List<FsStoreOrderPickItem> selectFsStoreOrderPickItemList(FsStoreOrderPickItem fsStoreOrderPickItem);
+
+    /**
+     * 新增自提商品详情
+     * 
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 结果
+     */
+    int insertFsStoreOrderPickItem(FsStoreOrderPickItem fsStoreOrderPickItem);
+
+    /**
+     * 修改自提商品详情
+     * 
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 结果
+     */
+    int updateFsStoreOrderPickItem(FsStoreOrderPickItem fsStoreOrderPickItem);
+
+    /**
+     * 删除自提商品详情
+     * 
+     * @param itemId 自提商品详情主键
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickItemByItemId(Long itemId);
+
+    /**
+     * 批量删除自提商品详情
+     * 
+     * @param itemIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickItemByItemIds(Long[] itemIds);
+}

+ 61 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderPickMapper.java

@@ -0,0 +1,61 @@
+package com.fs.hisStore.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hisStore.domain.FsStoreOrderPick;
+
+/**
+ * 自提商品订单Mapper接口
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+public interface FsStoreOrderPickMapper extends BaseMapper<FsStoreOrderPick>{
+    /**
+     * 查询自提商品订单
+     * 
+     * @param id 自提商品订单主键
+     * @return 自提商品订单
+     */
+    FsStoreOrderPick selectFsStoreOrderPickById(Long id);
+
+    /**
+     * 查询自提商品订单列表
+     * 
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 自提商品订单集合
+     */
+    List<FsStoreOrderPick> selectFsStoreOrderPickList(FsStoreOrderPick fsStoreOrderPick);
+
+    /**
+     * 新增自提商品订单
+     * 
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 结果
+     */
+    int insertFsStoreOrderPick(FsStoreOrderPick fsStoreOrderPick);
+
+    /**
+     * 修改自提商品订单
+     * 
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 结果
+     */
+    int updateFsStoreOrderPick(FsStoreOrderPick fsStoreOrderPick);
+
+    /**
+     * 删除自提商品订单
+     * 
+     * @param id 自提商品订单主键
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickById(Long id);
+
+    /**
+     * 批量删除自提商品订单
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickByIds(Long[] ids);
+}

+ 10 - 7
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductUserRecordMapper.java

@@ -3,18 +3,19 @@ package com.fs.hisStore.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.hisStore.domain.FsStoreProductUserRecord;
+import com.fs.hisStore.domain.FsStoreProductUserTemp;
 import com.fs.hisStore.vo.FsStoreProductUserRecordVO;
 
 /**
  * 商品信息采集记录Mapper接口
- * 
+ *
  * @author fs
  * @date 2026-06-18
  */
 public interface FsStoreProductUserRecordMapper extends BaseMapper<FsStoreProductUserRecord>{
     /**
      * 查询商品信息采集记录
-     * 
+     *
      * @param id 商品信息采集记录主键
      * @return 商品信息采集记录
      */
@@ -22,7 +23,7 @@ public interface FsStoreProductUserRecordMapper extends BaseMapper<FsStoreProduc
 
     /**
      * 查询商品信息采集记录列表
-     * 
+     *
      * @param fsStoreProductUserRecord 商品信息采集记录
      * @return 商品信息采集记录集合
      */
@@ -32,9 +33,11 @@ public interface FsStoreProductUserRecordMapper extends BaseMapper<FsStoreProduc
 
     FsStoreProductUserRecordVO selectFsStoreProductUserRecordDetailById(Long id);
 
+    FsStoreProductUserTemp selectUserTempByProductId(Long productId);
+
     /**
      * 新增商品信息采集记录
-     * 
+     *
      * @param fsStoreProductUserRecord 商品信息采集记录
      * @return 结果
      */
@@ -42,7 +45,7 @@ public interface FsStoreProductUserRecordMapper extends BaseMapper<FsStoreProduc
 
     /**
      * 修改商品信息采集记录
-     * 
+     *
      * @param fsStoreProductUserRecord 商品信息采集记录
      * @return 结果
      */
@@ -50,7 +53,7 @@ public interface FsStoreProductUserRecordMapper extends BaseMapper<FsStoreProduc
 
     /**
      * 删除商品信息采集记录
-     * 
+     *
      * @param id 商品信息采集记录主键
      * @return 结果
      */
@@ -58,7 +61,7 @@ public interface FsStoreProductUserRecordMapper extends BaseMapper<FsStoreProduc
 
     /**
      * 批量删除商品信息采集记录
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */

+ 61 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreRedeemedRecordMapper.java

@@ -0,0 +1,61 @@
+package com.fs.hisStore.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hisStore.domain.FsStoreRedeemedRecord;
+
+/**
+ * 自提商品核销记录Mapper接口
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+public interface FsStoreRedeemedRecordMapper extends BaseMapper<FsStoreRedeemedRecord>{
+    /**
+     * 查询自提商品核销记录
+     * 
+     * @param id 自提商品核销记录主键
+     * @return 自提商品核销记录
+     */
+    FsStoreRedeemedRecord selectFsStoreRedeemedRecordById(Long id);
+
+    /**
+     * 查询自提商品核销记录列表
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 自提商品核销记录集合
+     */
+    List<FsStoreRedeemedRecord> selectFsStoreRedeemedRecordList(FsStoreRedeemedRecord fsStoreRedeemedRecord);
+
+    /**
+     * 新增自提商品核销记录
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 结果
+     */
+    int insertFsStoreRedeemedRecord(FsStoreRedeemedRecord fsStoreRedeemedRecord);
+
+    /**
+     * 修改自提商品核销记录
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 结果
+     */
+    int updateFsStoreRedeemedRecord(FsStoreRedeemedRecord fsStoreRedeemedRecord);
+
+    /**
+     * 删除自提商品核销记录
+     * 
+     * @param id 自提商品核销记录主键
+     * @return 结果
+     */
+    int deleteFsStoreRedeemedRecordById(Long id);
+
+    /**
+     * 批量删除自提商品核销记录
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsStoreRedeemedRecordByIds(Long[] ids);
+}

+ 24 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsPickupGoodsListParam.java

@@ -0,0 +1,24 @@
+package com.fs.hisStore.param;
+
+import com.fs.common.param.BaseQueryParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FsPickupGoodsListParam implements Serializable {
+    /**
+     * 页码
+     */
+    private Integer pageNum;
+    /**
+     * 每页数量
+     */
+    private Integer pageSize;
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+}

+ 37 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderPickAddParam.java

@@ -0,0 +1,37 @@
+package com.fs.hisStore.param;
+
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class FsStoreOrderPickAddParam {
+    /**
+     * 订单ID
+     */
+    private Long id;
+
+    /** 用户id */
+    @NotNull
+    private Long userId;
+
+    /** 自提地址 */
+    private String pickupAddress;
+
+    /** 商品id */
+    @NotNull
+    private Long productId;
+
+    /** 所属公司 */
+    private Long companyId;
+
+    /** 所属销售 */
+    private Long companyUserId;
+
+    /** 部分id */
+    private Long deptId;
+
+//    private String itemJson;
+
+    /** 信息采集记录id */
+    private Long userRecordId;
+}

+ 21 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderPickListParam.java

@@ -0,0 +1,21 @@
+package com.fs.hisStore.param;
+
+import lombok.Data;
+
+/**
+ * 自提订单列表查询参数
+ */
+@Data
+public class FsStoreOrderPickListParam {
+
+    /**
+     * 订单号
+     */
+    private String orderCode;
+
+    /**
+     * 核销状态,1-待核销,2-已核销,3-已取消
+     */
+    private Integer redeemedStatus;
+}
+

+ 28 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductUserRecordAddParam.java

@@ -0,0 +1,28 @@
+package com.fs.hisStore.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商品信息采集记录新增参数
+ */
+@Data
+public class FsStoreProductUserRecordAddParam {
+
+    /** 模板ID */
+    private Long tempId;
+
+    /** 商品ID */
+    private Long productId;
+
+    /** 用户ID */
+    private Long userId;
+
+    /** 备注 */
+    private String remark;
+
+    /** 采集字段值列表 */
+    private List<FsStoreProductUserRecordValueAddParam> fieldValueList;
+}
+

+ 23 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductUserRecordValueAddParam.java

@@ -0,0 +1,23 @@
+package com.fs.hisStore.param;
+
+import lombok.Data;
+
+/**
+ * 商品信息采集记录值新增参数
+ */
+@Data
+public class FsStoreProductUserRecordValueAddParam {
+
+    /** 模板字段ID */
+    private Long tempFieldId;
+
+    /** 字段名称 */
+    private String fieldName;
+
+    /** 字段值(文本) */
+    private String fieldValue;
+
+    /** 复杂值(对象/数组) */
+    private String valueJson;
+}
+

+ 61 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderPickItemService.java

@@ -0,0 +1,61 @@
+package com.fs.hisStore.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hisStore.domain.FsStoreOrderPickItem;
+
+/**
+ * 自提商品详情Service接口
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+public interface IFsStoreOrderPickItemService extends IService<FsStoreOrderPickItem>{
+    /**
+     * 查询自提商品详情
+     * 
+     * @param itemId 自提商品详情主键
+     * @return 自提商品详情
+     */
+    FsStoreOrderPickItem selectFsStoreOrderPickItemByItemId(Long itemId);
+
+    /**
+     * 查询自提商品详情列表
+     * 
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 自提商品详情集合
+     */
+    List<FsStoreOrderPickItem> selectFsStoreOrderPickItemList(FsStoreOrderPickItem fsStoreOrderPickItem);
+
+    /**
+     * 新增自提商品详情
+     * 
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 结果
+     */
+    int insertFsStoreOrderPickItem(FsStoreOrderPickItem fsStoreOrderPickItem);
+
+    /**
+     * 修改自提商品详情
+     * 
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 结果
+     */
+    int updateFsStoreOrderPickItem(FsStoreOrderPickItem fsStoreOrderPickItem);
+
+    /**
+     * 批量删除自提商品详情
+     * 
+     * @param itemIds 需要删除的自提商品详情主键集合
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickItemByItemIds(Long[] itemIds);
+
+    /**
+     * 删除自提商品详情信息
+     * 
+     * @param itemId 自提商品详情主键
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickItemByItemId(Long itemId);
+}

+ 70 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderPickService.java

@@ -0,0 +1,70 @@
+package com.fs.hisStore.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hisStore.domain.FsStoreOrderPick;
+import com.fs.hisStore.param.FsStoreOrderPickAddParam;
+
+/**
+ * 自提商品订单Service接口
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+public interface IFsStoreOrderPickService extends IService<FsStoreOrderPick>{
+    /**
+     * 查询自提商品订单
+     *
+     * @param id 自提商品订单主键
+     * @return 自提商品订单
+     */
+    FsStoreOrderPick selectFsStoreOrderPickById(Long id);
+
+    /**
+     * 查询自提商品订单列表
+     *
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 自提商品订单集合
+     */
+    List<FsStoreOrderPick> selectFsStoreOrderPickList(FsStoreOrderPick fsStoreOrderPick);
+
+    /**
+     * 新增自提商品订单
+     *
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 结果
+     */
+    int insertFsStoreOrderPick(FsStoreOrderPick fsStoreOrderPick);
+
+    /**
+     * 修改自提商品订单
+     *
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 结果
+     */
+    int updateFsStoreOrderPick(FsStoreOrderPick fsStoreOrderPick);
+
+    /**
+     * 批量删除自提商品订单
+     *
+     * @param ids 需要删除的自提商品订单主键集合
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickByIds(Long[] ids);
+
+    /**
+     * 删除自提商品订单信息
+     *
+     * @param id 自提商品订单主键
+     * @return 结果
+     */
+    int deleteFsStoreOrderPickById(Long id);
+
+    /**
+     * 新增自提商品订单
+     *
+     * @param fsStoreOrderPickAddParam 自提商品订单入参
+     * @return 结果
+     */
+    int createFsStoreOrderPick(FsStoreOrderPickAddParam fsStoreOrderPickAddParam);
+}

+ 6 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductUserRecordService.java

@@ -3,6 +3,8 @@ package com.fs.hisStore.service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.hisStore.domain.FsStoreProductUserRecord;
+import com.fs.hisStore.param.FsStoreProductUserRecordAddParam;
+import com.fs.hisStore.vo.FsStoreProductUserTempDetailVO;
 import com.fs.hisStore.vo.FsStoreProductUserRecordVO;
 
 /**
@@ -32,6 +34,10 @@ public interface IFsStoreProductUserRecordService extends IService<FsStoreProduc
 
     FsStoreProductUserRecordVO selectFsStoreProductUserRecordDetailById(Long id);
 
+    FsStoreProductUserTempDetailVO selectTemplateDetailByProductId(Long productId);
+
+    int insertFsStoreProductUserRecordWithValues(FsStoreProductUserRecordAddParam param);
+
     /**
      * 新增商品信息采集记录
      * 

+ 61 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreRedeemedRecordService.java

@@ -0,0 +1,61 @@
+package com.fs.hisStore.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hisStore.domain.FsStoreRedeemedRecord;
+
+/**
+ * 自提商品核销记录Service接口
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+public interface IFsStoreRedeemedRecordService extends IService<FsStoreRedeemedRecord>{
+    /**
+     * 查询自提商品核销记录
+     * 
+     * @param id 自提商品核销记录主键
+     * @return 自提商品核销记录
+     */
+    FsStoreRedeemedRecord selectFsStoreRedeemedRecordById(Long id);
+
+    /**
+     * 查询自提商品核销记录列表
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 自提商品核销记录集合
+     */
+    List<FsStoreRedeemedRecord> selectFsStoreRedeemedRecordList(FsStoreRedeemedRecord fsStoreRedeemedRecord);
+
+    /**
+     * 新增自提商品核销记录
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 结果
+     */
+    int insertFsStoreRedeemedRecord(FsStoreRedeemedRecord fsStoreRedeemedRecord);
+
+    /**
+     * 修改自提商品核销记录
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 结果
+     */
+    int updateFsStoreRedeemedRecord(FsStoreRedeemedRecord fsStoreRedeemedRecord);
+
+    /**
+     * 批量删除自提商品核销记录
+     * 
+     * @param ids 需要删除的自提商品核销记录主键集合
+     * @return 结果
+     */
+    int deleteFsStoreRedeemedRecordByIds(Long[] ids);
+
+    /**
+     * 删除自提商品核销记录信息
+     * 
+     * @param id 自提商品核销记录主键
+     * @return 结果
+     */
+    int deleteFsStoreRedeemedRecordById(Long id);
+}

+ 90 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderPickItemServiceImpl.java

@@ -0,0 +1,90 @@
+package com.fs.hisStore.service.impl;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.fs.hisStore.mapper.FsStoreOrderPickItemMapper;
+import com.fs.hisStore.domain.FsStoreOrderPickItem;
+import com.fs.hisStore.service.IFsStoreOrderPickItemService;
+
+/**
+ * 自提商品详情Service业务层处理
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+@Service
+public class FsStoreOrderPickItemServiceImpl extends ServiceImpl<FsStoreOrderPickItemMapper, FsStoreOrderPickItem> implements IFsStoreOrderPickItemService {
+
+    /**
+     * 查询自提商品详情
+     *
+     * @param itemId 自提商品详情主键
+     * @return 自提商品详情
+     */
+    @Override
+    public FsStoreOrderPickItem selectFsStoreOrderPickItemByItemId(Long itemId)
+    {
+        return baseMapper.selectFsStoreOrderPickItemByItemId(itemId);
+    }
+
+    /**
+     * 查询自提商品详情列表
+     *
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 自提商品详情
+     */
+    @Override
+    public List<FsStoreOrderPickItem> selectFsStoreOrderPickItemList(FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        return baseMapper.selectFsStoreOrderPickItemList(fsStoreOrderPickItem);
+    }
+
+    /**
+     * 新增自提商品详情
+     *
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 结果
+     */
+    @Override
+    public int insertFsStoreOrderPickItem(FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        return baseMapper.insertFsStoreOrderPickItem(fsStoreOrderPickItem);
+    }
+
+    /**
+     * 修改自提商品详情
+     *
+     * @param fsStoreOrderPickItem 自提商品详情
+     * @return 结果
+     */
+    @Override
+    public int updateFsStoreOrderPickItem(FsStoreOrderPickItem fsStoreOrderPickItem)
+    {
+        return baseMapper.updateFsStoreOrderPickItem(fsStoreOrderPickItem);
+    }
+
+    /**
+     * 批量删除自提商品详情
+     *
+     * @param itemIds 需要删除的自提商品详情主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreOrderPickItemByItemIds(Long[] itemIds)
+    {
+        return baseMapper.deleteFsStoreOrderPickItemByItemIds(itemIds);
+    }
+
+    /**
+     * 删除自提商品详情信息
+     *
+     * @param itemId 自提商品详情主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreOrderPickItemByItemId(Long itemId)
+    {
+        return baseMapper.deleteFsStoreOrderPickItemByItemId(itemId);
+    }
+}

+ 206 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderPickServiceImpl.java

@@ -0,0 +1,206 @@
+package com.fs.hisStore.service.impl;
+
+import cn.hutool.json.JSONUtil;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.SnowflakeUtil;
+import com.fs.common.utils.StringUtils;
+import com.fs.his.utils.qrcode.QRCodeUtils;
+import com.fs.hisStore.domain.FsStoreOrderPickItem;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hisStore.domain.FsUserScrm;
+import com.fs.hisStore.mapper.FsStoreOrderPickItemMapper;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
+import com.fs.hisStore.service.IFsUserScrmService;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
+import java.util.List;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.hisStore.param.FsStoreOrderPickAddParam;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.fs.hisStore.mapper.FsStoreOrderPickMapper;
+import com.fs.hisStore.domain.FsStoreOrderPick;
+import com.fs.hisStore.service.IFsStoreOrderPickService;
+
+import java.io.ByteArrayInputStream;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+
+/**
+ * 自提商品订单Service业务层处理
+ *
+ * @author fs
+ * @date 2026-06-24
+ */
+@Service
+public class FsStoreOrderPickServiceImpl extends ServiceImpl<FsStoreOrderPickMapper, FsStoreOrderPick> implements IFsStoreOrderPickService {
+    @Autowired
+    private IFsUserScrmService fsUserScrmService;
+    @Autowired
+    private IFsStoreProductScrmService fsStoreProductScrmService;
+    @Autowired
+    private FsStoreOrderPickItemMapper fsStoreOrderPickItemMapper;
+
+    /**
+     * 查询自提商品订单
+     *
+     * @param id 自提商品订单主键
+     * @return 自提商品订单
+     */
+    @Override
+    public FsStoreOrderPick selectFsStoreOrderPickById(Long id)
+    {
+        return baseMapper.selectFsStoreOrderPickById(id);
+    }
+
+    /**
+     * 查询自提商品订单列表
+     *
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 自提商品订单
+     */
+    @Override
+    public List<FsStoreOrderPick> selectFsStoreOrderPickList(FsStoreOrderPick fsStoreOrderPick)
+    {
+        return baseMapper.selectFsStoreOrderPickList(fsStoreOrderPick);
+    }
+
+    /**
+     * 新增自提商品订单
+     *
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 结果
+     */
+    @Override
+    public int insertFsStoreOrderPick(FsStoreOrderPick fsStoreOrderPick)
+    {
+        fsStoreOrderPick.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFsStoreOrderPick(fsStoreOrderPick);
+    }
+
+    /**
+     * 修改自提商品订单
+     *
+     * @param fsStoreOrderPick 自提商品订单
+     * @return 结果
+     */
+    @Override
+    public int updateFsStoreOrderPick(FsStoreOrderPick fsStoreOrderPick)
+    {
+        fsStoreOrderPick.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateFsStoreOrderPick(fsStoreOrderPick);
+    }
+
+    /**
+     * 批量删除自提商品订单
+     *
+     * @param ids 需要删除的自提商品订单主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreOrderPickByIds(Long[] ids)
+    {
+        return baseMapper.deleteFsStoreOrderPickByIds(ids);
+    }
+
+    /**
+     * 删除自提商品订单信息
+     *
+     * @param id 自提商品订单主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreOrderPickById(Long id)
+    {
+        return baseMapper.deleteFsStoreOrderPickById(id);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int createFsStoreOrderPick(FsStoreOrderPickAddParam fsStoreOrderPickAddParam) {
+        if (fsStoreOrderPickAddParam == null || fsStoreOrderPickAddParam.getUserId() == null || fsStoreOrderPickAddParam.getProductId() == null) {
+            throw new RuntimeException("参数错误");
+        }
+
+        FsUserScrm user = fsUserScrmService.selectFsUserById(fsStoreOrderPickAddParam.getUserId());
+        if (user == null || Integer.valueOf(1).equals(user.getIsDel())) {
+            throw new RuntimeException("用户不存在");
+        }
+        FsStoreProductScrm product = fsStoreProductScrmService.selectFsStoreProductById(fsStoreOrderPickAddParam.getProductId());
+        if (product == null || Integer.valueOf(1).equals(product.getIsDel())) {
+            throw new RuntimeException("商品不存在");
+        }
+        String orderCode = SnowflakeUtil.nextIdStr();
+        // 生成核销码
+        String redeemQrUrl = generateRedeemedQrUrl(orderCode);
+        FsStoreOrderPick orderPick = new FsStoreOrderPick();
+        orderPick.setOrderCode(orderCode);
+        orderPick.setUserId(user.getUserId());
+        String nickName = StringUtils.isNotEmpty(user.getNickName()) ? user.getNickName() : user.getNickname();
+        orderPick.setNickName(nickName);
+        orderPick.setPhone(user.getPhone());
+        orderPick.setTotalNum(1);
+        BigDecimal price = product.getPrice() == null ? BigDecimal.ZERO : product.getPrice();
+        orderPick.setTotalPrice(price);
+        orderPick.setRedeemedCode(redeemQrUrl);
+        orderPick.setRedeemedStatus(1);
+        orderPick.setIsDel(0);
+        orderPick.setCompanyId(fsStoreOrderPickAddParam.getCompanyId());
+        orderPick.setCompanyUserId(fsStoreOrderPickAddParam.getCompanyUserId());
+        orderPick.setDeptId(fsStoreOrderPickAddParam.getDeptId());
+        orderPick.setUserRecordId(fsStoreOrderPickAddParam.getUserRecordId());
+        orderPick.setCreateTime(DateUtils.getNowDate());
+        int rows = baseMapper.insertFsStoreOrderPick(orderPick);
+        if (rows <= 0 || orderPick.getId() == null) {
+            throw new RuntimeException("创建自提订单失败");
+        }
+
+        FsStoreOrderPickItem orderPickItem = new FsStoreOrderPickItem();
+        orderPickItem.setOrderId(orderPick.getId());
+        orderPickItem.setOrderCode(orderCode);
+        orderPickItem.setProductId(product.getProductId());
+        orderPickItem.setNum(1);
+        PickItemJsonInfo jsonInfo = new PickItemJsonInfo();
+        jsonInfo.setImage(product.getImage());
+        jsonInfo.setProductId(product.getProductId());
+        jsonInfo.setNum(1);
+        jsonInfo.setProductName(product.getProductName());
+        jsonInfo.setPrice(price);
+        orderPickItem.setJsonInfo(JSONUtil.toJsonStr(jsonInfo));
+        fsStoreOrderPickItemMapper.insertFsStoreOrderPickItem(orderPickItem);
+
+        List<FsStoreOrderPickItem> itemList = new ArrayList<>();
+        itemList.add(orderPickItem);
+        FsStoreOrderPick updateOrder = new FsStoreOrderPick();
+        updateOrder.setId(orderPick.getId());
+        updateOrder.setItemJson(JSONUtil.toJsonStr(itemList));
+        baseMapper.updateFsStoreOrderPick(updateOrder);
+        return rows;
+    }
+
+    private String generateRedeemedQrUrl(String orderCode) {
+        try {
+            String qrContent = "pickOrderCode=" + orderCode;
+            byte[] imageBytes = QRCodeUtils.create(qrContent).toByteArray();
+            CloudStorageService storage = OSSFactory.build();
+            if (storage == null) {
+                throw new ServiceException("OSS配置异常");
+            }
+            return storage.uploadSuffix(new ByteArrayInputStream(imageBytes), ".jpg");
+        } catch (Exception e) {
+            throw new ServiceException("生成订单核销二维码失败");
+        }
+    }
+
+    @Data
+    private static class PickItemJsonInfo {
+        private String image;
+        private Long productId;
+        private Integer num;
+        private String productName;
+        private BigDecimal price;
+    }
+}

+ 65 - 7
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductUserRecordServiceImpl.java

@@ -3,18 +3,26 @@ package com.fs.hisStore.service.impl;
 import java.util.List;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.hisStore.domain.FsStoreProductUserTemp;
+import com.fs.hisStore.domain.FsStoreProductUserTempField;
+import com.fs.hisStore.param.FsStoreProductUserRecordAddParam;
+import com.fs.hisStore.param.FsStoreProductUserRecordValueAddParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.BeanUtils;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.stereotype.Service;
 import com.fs.hisStore.domain.FsStoreProductUserRecordValue;
 import com.fs.hisStore.mapper.FsStoreProductUserRecordMapper;
 import com.fs.hisStore.domain.FsStoreProductUserRecord;
+import com.fs.hisStore.service.IFsStoreProductUserTempFieldService;
 import com.fs.hisStore.service.IFsStoreProductUserRecordValueService;
 import com.fs.hisStore.service.IFsStoreProductUserRecordService;
+import com.fs.hisStore.vo.FsStoreProductUserTempDetailVO;
 import com.fs.hisStore.vo.FsStoreProductUserRecordVO;
 
 /**
  * 商品信息采集记录Service业务层处理
- * 
+ *
  * @author fs
  * @date 2026-06-18
  */
@@ -23,9 +31,12 @@ public class FsStoreProductUserRecordServiceImpl extends ServiceImpl<FsStoreProd
     @Autowired
     private IFsStoreProductUserRecordValueService fsStoreProductUserRecordValueService;
 
+    @Autowired
+    private IFsStoreProductUserTempFieldService fsStoreProductUserTempFieldService;
+
     /**
      * 查询商品信息采集记录
-     * 
+     *
      * @param id 商品信息采集记录主键
      * @return 商品信息采集记录
      */
@@ -37,7 +48,7 @@ public class FsStoreProductUserRecordServiceImpl extends ServiceImpl<FsStoreProd
 
     /**
      * 查询商品信息采集记录列表
-     * 
+     *
      * @param fsStoreProductUserRecord 商品信息采集记录
      * @return 商品信息采集记录
      */
@@ -63,9 +74,56 @@ public class FsStoreProductUserRecordServiceImpl extends ServiceImpl<FsStoreProd
         return record;
     }
 
+    @Override
+    public FsStoreProductUserTempDetailVO selectTemplateDetailByProductId(Long productId) {
+        FsStoreProductUserTemp temp = baseMapper.selectUserTempByProductId(productId);
+        if (temp == null) {
+            return null;
+        }
+        FsStoreProductUserTempField fieldQuery = new FsStoreProductUserTempField();
+        fieldQuery.setTempId(temp.getId());
+        fieldQuery.setIsDel(0);
+        fieldQuery.setStatus(1);
+        List<FsStoreProductUserTempField> fieldList = fsStoreProductUserTempFieldService.selectFsStoreProductUserTempFieldList(fieldQuery);
+        FsStoreProductUserTempDetailVO detail = new FsStoreProductUserTempDetailVO();
+        BeanUtils.copyProperties(temp, detail);
+        detail.setFieldList(fieldList);
+        return detail;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertFsStoreProductUserRecordWithValues(FsStoreProductUserRecordAddParam param) {
+        if (param == null) {
+            return 0;
+        }
+        FsStoreProductUserRecord record = new FsStoreProductUserRecord();
+        BeanUtils.copyProperties(param, record);
+        record.setIsDel(0);
+        record.setCreateTime(DateUtils.getNowDate());
+        int rows = baseMapper.insertFsStoreProductUserRecord(record);
+        if (rows <= 0 || record.getId() == null) {
+            return 0;
+        }
+        List<FsStoreProductUserRecordValueAddParam> fieldValueList = param.getFieldValueList();
+        if (fieldValueList != null && !fieldValueList.isEmpty()) {
+            for (FsStoreProductUserRecordValueAddParam item : fieldValueList) {
+                FsStoreProductUserRecordValue value = new FsStoreProductUserRecordValue();
+                value.setRecordId(record.getId());
+                value.setTempFieldId(item.getTempFieldId());
+                value.setFieldName(item.getFieldName());
+                value.setFieldValue(item.getFieldValue());
+                value.setValueJson(item.getValueJson());
+                value.setCreateTime(DateUtils.getNowDate());
+                fsStoreProductUserRecordValueService.insertFsStoreProductUserRecordValue(value);
+            }
+        }
+        return rows;
+    }
+
     /**
      * 新增商品信息采集记录
-     * 
+     *
      * @param fsStoreProductUserRecord 商品信息采集记录
      * @return 结果
      */
@@ -78,7 +136,7 @@ public class FsStoreProductUserRecordServiceImpl extends ServiceImpl<FsStoreProd
 
     /**
      * 修改商品信息采集记录
-     * 
+     *
      * @param fsStoreProductUserRecord 商品信息采集记录
      * @return 结果
      */
@@ -91,7 +149,7 @@ public class FsStoreProductUserRecordServiceImpl extends ServiceImpl<FsStoreProd
 
     /**
      * 批量删除商品信息采集记录
-     * 
+     *
      * @param ids 需要删除的商品信息采集记录主键
      * @return 结果
      */
@@ -103,7 +161,7 @@ public class FsStoreProductUserRecordServiceImpl extends ServiceImpl<FsStoreProd
 
     /**
      * 删除商品信息采集记录信息
-     * 
+     *
      * @param id 商品信息采集记录主键
      * @return 结果
      */

+ 91 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreRedeemedRecordServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fs.hisStore.service.impl;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.hisStore.mapper.FsStoreRedeemedRecordMapper;
+import com.fs.hisStore.domain.FsStoreRedeemedRecord;
+import com.fs.hisStore.service.IFsStoreRedeemedRecordService;
+
+/**
+ * 自提商品核销记录Service业务层处理
+ * 
+ * @author fs
+ * @date 2026-06-24
+ */
+@Service
+public class FsStoreRedeemedRecordServiceImpl extends ServiceImpl<FsStoreRedeemedRecordMapper, FsStoreRedeemedRecord> implements IFsStoreRedeemedRecordService {
+
+    /**
+     * 查询自提商品核销记录
+     * 
+     * @param id 自提商品核销记录主键
+     * @return 自提商品核销记录
+     */
+    @Override
+    public FsStoreRedeemedRecord selectFsStoreRedeemedRecordById(Long id)
+    {
+        return baseMapper.selectFsStoreRedeemedRecordById(id);
+    }
+
+    /**
+     * 查询自提商品核销记录列表
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 自提商品核销记录
+     */
+    @Override
+    public List<FsStoreRedeemedRecord> selectFsStoreRedeemedRecordList(FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        return baseMapper.selectFsStoreRedeemedRecordList(fsStoreRedeemedRecord);
+    }
+
+    /**
+     * 新增自提商品核销记录
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 结果
+     */
+    @Override
+    public int insertFsStoreRedeemedRecord(FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        return baseMapper.insertFsStoreRedeemedRecord(fsStoreRedeemedRecord);
+    }
+
+    /**
+     * 修改自提商品核销记录
+     * 
+     * @param fsStoreRedeemedRecord 自提商品核销记录
+     * @return 结果
+     */
+    @Override
+    public int updateFsStoreRedeemedRecord(FsStoreRedeemedRecord fsStoreRedeemedRecord)
+    {
+        return baseMapper.updateFsStoreRedeemedRecord(fsStoreRedeemedRecord);
+    }
+
+    /**
+     * 批量删除自提商品核销记录
+     * 
+     * @param ids 需要删除的自提商品核销记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreRedeemedRecordByIds(Long[] ids)
+    {
+        return baseMapper.deleteFsStoreRedeemedRecordByIds(ids);
+    }
+
+    /**
+     * 删除自提商品核销记录信息
+     * 
+     * @param id 自提商品核销记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreRedeemedRecordById(Long id)
+    {
+        return baseMapper.deleteFsStoreRedeemedRecordById(id);
+    }
+}

+ 22 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreProductUserTempDetailVO.java

@@ -0,0 +1,22 @@
+package com.fs.hisStore.vo;
+
+import com.fs.hisStore.domain.FsStoreProductUserTemp;
+import com.fs.hisStore.domain.FsStoreProductUserTempField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 商品信息采集模板详情VO(外层模板字段 + 内层模板字段列表)
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsStoreProductUserTempDetailVO extends FsStoreProductUserTemp {
+
+    /**
+     * 模板字段列表
+     */
+    private List<FsStoreProductUserTempField> fieldList;
+}
+

+ 76 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderPickItemMapper.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.hisStore.mapper.FsStoreOrderPickItemMapper">
+    
+    <resultMap type="FsStoreOrderPickItem" id="FsStoreOrderPickItemResult">
+        <result property="itemId"    column="item_id"    />
+        <result property="orderId"    column="order_id"    />
+        <result property="orderCode"    column="order_code"    />
+        <result property="productId"    column="product_id"    />
+        <result property="jsonInfo"    column="json_info"    />
+        <result property="num"    column="num"    />
+    </resultMap>
+
+    <sql id="selectFsStoreOrderPickItemVo">
+        select item_id, order_id, order_code, product_id, json_info, num from fs_store_order_pick_item
+    </sql>
+
+    <select id="selectFsStoreOrderPickItemList" parameterType="FsStoreOrderPickItem" resultMap="FsStoreOrderPickItemResult">
+        <include refid="selectFsStoreOrderPickItemVo"/>
+        <where>  
+            <if test="orderId != null "> and order_id = #{orderId}</if>
+            <if test="orderCode != null  and orderCode != ''"> and order_code = #{orderCode}</if>
+            <if test="productId != null "> and product_id = #{productId}</if>
+            <if test="jsonInfo != null  and jsonInfo != ''"> and json_info = #{jsonInfo}</if>
+            <if test="num != null "> and num = #{num}</if>
+        </where>
+    </select>
+    
+    <select id="selectFsStoreOrderPickItemByItemId" parameterType="Long" resultMap="FsStoreOrderPickItemResult">
+        <include refid="selectFsStoreOrderPickItemVo"/>
+        where item_id = #{itemId}
+    </select>
+        
+    <insert id="insertFsStoreOrderPickItem" parameterType="FsStoreOrderPickItem" useGeneratedKeys="true" keyProperty="itemId">
+        insert into fs_store_order_pick_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderId != null">order_id,</if>
+            <if test="orderCode != null">order_code,</if>
+            <if test="productId != null">product_id,</if>
+            <if test="jsonInfo != null">json_info,</if>
+            <if test="num != null">num,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderId != null">#{orderId},</if>
+            <if test="orderCode != null">#{orderCode},</if>
+            <if test="productId != null">#{productId},</if>
+            <if test="jsonInfo != null">#{jsonInfo},</if>
+            <if test="num != null">#{num},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsStoreOrderPickItem" parameterType="FsStoreOrderPickItem">
+        update fs_store_order_pick_item
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderId != null">order_id = #{orderId},</if>
+            <if test="orderCode != null">order_code = #{orderCode},</if>
+            <if test="productId != null">product_id = #{productId},</if>
+            <if test="jsonInfo != null">json_info = #{jsonInfo},</if>
+            <if test="num != null">num = #{num},</if>
+        </trim>
+        where item_id = #{itemId}
+    </update>
+
+    <delete id="deleteFsStoreOrderPickItemByItemId" parameterType="Long">
+        delete from fs_store_order_pick_item where item_id = #{itemId}
+    </delete>
+
+    <delete id="deleteFsStoreOrderPickItemByItemIds" parameterType="String">
+        delete from fs_store_order_pick_item where item_id in 
+        <foreach item="itemId" collection="array" open="(" separator="," close=")">
+            #{itemId}
+        </foreach>
+    </delete>
+</mapper>

+ 158 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderPickMapper.xml

@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.hisStore.mapper.FsStoreOrderPickMapper">
+    
+    <resultMap type="FsStoreOrderPick" id="FsStoreOrderPickResult">
+        <result property="id"    column="id"    />
+        <result property="orderCode"    column="order_code"    />
+        <result property="userId"    column="user_id"    />
+        <result property="nickName"    column="nick_name"    />
+        <result property="phone"    column="phone"    />
+        <result property="pickupAddress"    column="pickup_address"    />
+        <result property="totalNum"    column="total_num"    />
+        <result property="totalPrice"    column="total_price"    />
+        <result property="redeemedCode"    column="redeemed_code"    />
+        <result property="redeemedStatus"    column="redeemed_status"    />
+        <result property="redeemedTime"    column="redeemed_time"    />
+        <result property="redeemedId"    column="redeemed_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="cancelExplain"    column="cancel_explain"    />
+        <result property="cancelTime"    column="cancel_time"    />
+        <result property="isDel"    column="is_del"    />
+        <result property="remark"    column="remark"    />
+        <result property="companyId"    column="company_id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="itemJson"    column="item_json"    />
+        <result property="userRecordId"    column="user_record_id"    />
+    </resultMap>
+
+    <sql id="selectFsStoreOrderPickVo">
+        select id, order_code, user_id, nick_name, phone, pickup_address, total_num, total_price, redeemed_code, redeemed_status, redeemed_time, redeemed_id, create_time, update_time, cancel_explain, cancel_time, is_del, remark, company_id, company_user_id, dept_id, item_json, user_record_id from fs_store_order_pick
+    </sql>
+
+    <select id="selectFsStoreOrderPickList" parameterType="FsStoreOrderPick" resultMap="FsStoreOrderPickResult">
+        <include refid="selectFsStoreOrderPickVo"/>
+        <where>  
+            <if test="orderCode != null  and orderCode != ''"> and order_code = #{orderCode}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="nickName != null  and nickName != ''"> and nick_name like concat('%', #{nickName}, '%')</if>
+            <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
+            <if test="pickupAddress != null  and pickupAddress != ''"> and pickup_address = #{pickupAddress}</if>
+            <if test="totalNum != null "> and total_num = #{totalNum}</if>
+            <if test="totalPrice != null "> and total_price = #{totalPrice}</if>
+            <if test="redeemedCode != null  and redeemedCode != ''"> and redeemed_code = #{redeemedCode}</if>
+            <if test="redeemedStatus != null "> and redeemed_status = #{redeemedStatus}</if>
+            <if test="redeemedTime != null "> and redeemed_time = #{redeemedTime}</if>
+            <if test="redeemedId != null "> and redeemed_id = #{redeemedId}</if>
+            <if test="cancelExplain != null  and cancelExplain != ''"> and cancel_explain = #{cancelExplain}</if>
+            <if test="cancelTime != null "> and cancel_time = #{cancelTime}</if>
+            <if test="isDel != null "> and is_del = #{isDel}</if>
+            <if test="companyId != null "> and company_id = #{companyId}</if>
+            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="itemJson != null  and itemJson != ''"> and item_json = #{itemJson}</if>
+            <if test="userRecordId != null "> and user_record_id = #{userRecordId}</if>
+        </where>
+    </select>
+    
+    <select id="selectFsStoreOrderPickById" parameterType="Long" resultMap="FsStoreOrderPickResult">
+        <include refid="selectFsStoreOrderPickVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertFsStoreOrderPick" parameterType="FsStoreOrderPick" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_store_order_pick
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderCode != null and orderCode != ''">order_code,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="nickName != null">nick_name,</if>
+            <if test="phone != null">phone,</if>
+            <if test="pickupAddress != null">pickup_address,</if>
+            <if test="totalNum != null">total_num,</if>
+            <if test="totalPrice != null">total_price,</if>
+            <if test="redeemedCode != null">redeemed_code,</if>
+            <if test="redeemedStatus != null">redeemed_status,</if>
+            <if test="redeemedTime != null">redeemed_time,</if>
+            <if test="redeemedId != null">redeemed_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="cancelExplain != null">cancel_explain,</if>
+            <if test="cancelTime != null">cancel_time,</if>
+            <if test="isDel != null">is_del,</if>
+            <if test="remark != null">remark,</if>
+            <if test="companyId != null">company_id,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="itemJson != null">item_json,</if>
+            <if test="userRecordId != null">user_record_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderCode != null and orderCode != ''">#{orderCode},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="nickName != null">#{nickName},</if>
+            <if test="phone != null">#{phone},</if>
+            <if test="pickupAddress != null">#{pickupAddress},</if>
+            <if test="totalNum != null">#{totalNum},</if>
+            <if test="totalPrice != null">#{totalPrice},</if>
+            <if test="redeemedCode != null">#{redeemedCode},</if>
+            <if test="redeemedStatus != null">#{redeemedStatus},</if>
+            <if test="redeemedTime != null">#{redeemedTime},</if>
+            <if test="redeemedId != null">#{redeemedId},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="cancelExplain != null">#{cancelExplain},</if>
+            <if test="cancelTime != null">#{cancelTime},</if>
+            <if test="isDel != null">#{isDel},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="companyId != null">#{companyId},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="itemJson != null">#{itemJson},</if>
+            <if test="userRecordId != null">#{userRecordId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsStoreOrderPick" parameterType="FsStoreOrderPick">
+        update fs_store_order_pick
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderCode != null and orderCode != ''">order_code = #{orderCode},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="nickName != null">nick_name = #{nickName},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="pickupAddress != null">pickup_address = #{pickupAddress},</if>
+            <if test="totalNum != null">total_num = #{totalNum},</if>
+            <if test="totalPrice != null">total_price = #{totalPrice},</if>
+            <if test="redeemedCode != null">redeemed_code = #{redeemedCode},</if>
+            <if test="redeemedStatus != null">redeemed_status = #{redeemedStatus},</if>
+            <if test="redeemedTime != null">redeemed_time = #{redeemedTime},</if>
+            <if test="redeemedId != null">redeemed_id = #{redeemedId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="cancelExplain != null">cancel_explain = #{cancelExplain},</if>
+            <if test="cancelTime != null">cancel_time = #{cancelTime},</if>
+            <if test="isDel != null">is_del = #{isDel},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="itemJson != null">item_json = #{itemJson},</if>
+            <if test="userRecordId != null">user_record_id = #{userRecordId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsStoreOrderPickById" parameterType="Long">
+        delete from fs_store_order_pick where id = #{id}
+    </delete>
+
+    <delete id="deleteFsStoreOrderPickByIds" parameterType="String">
+        delete from fs_store_order_pick where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 10 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreProductScrmMapper.xml

@@ -83,6 +83,8 @@
         <result property="activityEndTime"    column="activity_end_time"    />
         <result property="tagInfo"    column="tag_info"    />
         <result property="isPickup"    column="is_pickup"    />
+        <result property="user_temp_id"    column="user_temp_id"    />
+        <result property="user_record_id"    column="user_record_id"    />
     </resultMap>
 
     <sql id="selectFsStoreProductVo">
@@ -94,7 +96,8 @@
                is_display,tui_cate_id,company_ids,is_drug,drug_image,drug_reg_cert_no,common_name,dosage_form,
                unit_price,batch_number,mah,mah_address,manufacturer,manufacturer_address,indications,dosage,
                adverse_reactions,contraindications,precautions,is_audit,store_id,return_address,brand,food_production_license_code,
-               origin_place,net_content,shelf_life,domestic_imported,app_ids,purchase_limit,single_purchase_limit,activity_type,activity_start_time,activity_end_time,tag_info,is_pickup
+               origin_place,net_content,shelf_life,domestic_imported,app_ids,purchase_limit,single_purchase_limit,activity_type,activity_start_time,activity_end_time,tag_info,is_pickup,
+               user_temp_id,user_record_id
         from fs_store_product_scrm
     </sql>
 
@@ -296,6 +299,8 @@
             <if test="activityType != null">activity_type,</if>
             <if test="tagInfo != null and tagInfo != ''">tag_info,</if>
             <if test="isPickup != null">is_pickup,</if>
+            <if test="user_temp_id != null">user_temp_id,</if>
+            <if test="user_record_id != null">user_record_id,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="image != null and image != ''">#{image},</if>
@@ -373,6 +378,8 @@
             <if test="activityType != null">#{activityType},</if>
             <if test="tagInfo != null and tagInfo != ''">#{tagInfo},</if>
             <if test="isPickup != null">#{isPickup},</if>
+            <if test="user_temp_id != null">#{user_temp_id},</if>
+            <if test="user_record_id != null">#{user_record_id},</if>
         </trim>
     </insert>
 
@@ -455,6 +462,8 @@
             <if test="tagInfo != null and tagInfo != ''">tag_info = #{tagInfo},</if>
             <if test="tagInfo == null or tagInfo == ''">tag_info = #{tagInfo},</if>
             <if test="isPickup != null">is_pickup = #{isPickup},</if>
+            <if test="user_temp_id != null">user_temp_id = #{user_temp_id},</if>
+            <if test="user_record_id != null">user_record_id = #{user_record_id},</if>
         </trim>
         where product_id = #{productId}
     </update>

+ 26 - 6
fs-service/src/main/resources/mapper/hisStore/FsStoreProductUserRecord/FsStoreProductUserRecordMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.hisStore.mapper.FsStoreProductUserRecordMapper">
-    
+
     <resultMap type="FsStoreProductUserRecord" id="FsStoreProductUserRecordResult">
         <result property="id"    column="id"    />
         <result property="tempId"    column="temp_id"    />
@@ -43,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectFsStoreProductUserRecordList" parameterType="FsStoreProductUserRecord" resultMap="FsStoreProductUserRecordResult">
         <include refid="selectFsStoreProductUserRecordVo"/>
-        <where>  
+        <where>
             <if test="tempId != null "> and temp_id = #{tempId}</if>
             <if test="productId != null "> and product_id = #{productId}</if>
             <if test="userId != null "> and user_id = #{userId}</if>
@@ -64,7 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="name != null and name != ''"> and u.name like concat('%', #{name}, '%')</if>
         </where>
     </select>
-    
+
     <select id="selectFsStoreProductUserRecordById" parameterType="Long" resultMap="FsStoreProductUserRecordResult">
         <include refid="selectFsStoreProductUserRecordVo"/>
         where id = #{id}
@@ -75,7 +75,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where r.id = #{id}
           and r.is_del = 0
     </select>
-        
+
+    <select id="selectUserTempByProductId" parameterType="Long" resultType="com.fs.hisStore.domain.FsStoreProductUserTemp">
+        select
+            t.id,
+            t.name,
+            t.type,
+            t.sort,
+            t.status,
+            t.remark,
+            t.is_del,
+            t.create_time,
+            t.update_time
+        from fs_store_product_scrm p
+        inner join fs_store_product_user_temp t on t.id = p.user_temp_id
+        where p.product_id = #{productId}
+          and p.is_del = 0
+          and t.is_del = 0
+          and t.status = 1
+        limit 1
+    </select>
+
     <insert id="insertFsStoreProductUserRecord" parameterType="FsStoreProductUserRecord" useGeneratedKeys="true" keyProperty="id">
         insert into fs_store_product_user_record
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -117,9 +137,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteFsStoreProductUserRecordByIds" parameterType="String">
-        delete from fs_store_product_user_record where id in 
+        delete from fs_store_product_user_record where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 91 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreRedeemedRecordMapper.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.hisStore.mapper.FsStoreRedeemedRecordMapper">
+    
+    <resultMap type="FsStoreRedeemedRecord" id="FsStoreRedeemedRecordResult">
+        <result property="id"    column="id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="orderId"    column="order_id"    />
+        <result property="orderCode"    column="order_code"    />
+        <result property="redeemedTime"    column="redeemed_time"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="companyId"    column="company_id"    />
+        <result property="redeemedUserId"    column="redeemed_user_id"    />
+        <result property="status"    column="status"    />
+    </resultMap>
+
+    <sql id="selectFsStoreRedeemedRecordVo">
+        select id, user_id, order_id, order_code, redeemed_time, company_user_id, company_id, redeemed_user_id, status from fs_store_redeemed_record
+    </sql>
+
+    <select id="selectFsStoreRedeemedRecordList" parameterType="FsStoreRedeemedRecord" resultMap="FsStoreRedeemedRecordResult">
+        <include refid="selectFsStoreRedeemedRecordVo"/>
+        <where>  
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="orderId != null "> and order_id = #{orderId}</if>
+            <if test="orderCode != null  and orderCode != ''"> and order_code = #{orderCode}</if>
+            <if test="redeemedTime != null "> and redeemed_time = #{redeemedTime}</if>
+            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
+            <if test="companyId != null "> and company_id = #{companyId}</if>
+            <if test="redeemedUserId != null  and redeemedUserId != ''"> and redeemed_user_id = #{redeemedUserId}</if>
+            <if test="status != null "> and status = #{status}</if>
+        </where>
+    </select>
+    
+    <select id="selectFsStoreRedeemedRecordById" parameterType="Long" resultMap="FsStoreRedeemedRecordResult">
+        <include refid="selectFsStoreRedeemedRecordVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertFsStoreRedeemedRecord" parameterType="FsStoreRedeemedRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_store_redeemed_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">user_id,</if>
+            <if test="orderId != null">order_id,</if>
+            <if test="orderCode != null">order_code,</if>
+            <if test="redeemedTime != null">redeemed_time,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="companyId != null">company_id,</if>
+            <if test="redeemedUserId != null">redeemed_user_id,</if>
+            <if test="status != null">status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null">#{userId},</if>
+            <if test="orderId != null">#{orderId},</if>
+            <if test="orderCode != null">#{orderCode},</if>
+            <if test="redeemedTime != null">#{redeemedTime},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="companyId != null">#{companyId},</if>
+            <if test="redeemedUserId != null">#{redeemedUserId},</if>
+            <if test="status != null">#{status},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsStoreRedeemedRecord" parameterType="FsStoreRedeemedRecord">
+        update fs_store_redeemed_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="orderId != null">order_id = #{orderId},</if>
+            <if test="orderCode != null">order_code = #{orderCode},</if>
+            <if test="redeemedTime != null">redeemed_time = #{redeemedTime},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="redeemedUserId != null">redeemed_user_id = #{redeemedUserId},</if>
+            <if test="status != null">status = #{status},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsStoreRedeemedRecordById" parameterType="Long">
+        delete from fs_store_redeemed_record where id = #{id}
+    </delete>
+
+    <delete id="deleteFsStoreRedeemedRecordByIds" parameterType="String">
+        delete from fs_store_redeemed_record where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 69 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/FsPickupGoodsController.java

@@ -0,0 +1,69 @@
+package com.fs.app.controller.store;
+
+import com.fs.app.controller.AppBaseController;
+import com.fs.common.core.domain.R;
+import com.fs.hisStore.domain.FsStoreProductAttrValueScrm;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hisStore.param.FsPickupGoodsListParam;
+import com.fs.hisStore.service.IFsStoreProductAttrValueScrmService;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
+import com.fs.hisStore.vo.FsStoreProductListVO;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * 自提商品Controller
+ *
+ * @author caolq
+ * @date 2026-06-22
+ */
+@Slf4j
+@RestController
+@RequestMapping("/app/store/pickupGoods")
+public class FsPickupGoodsController extends AppBaseController {
+
+    @Autowired
+    private IFsStoreProductScrmService fsStoreProductService;
+
+    @Autowired
+    private IFsStoreProductAttrValueScrmService attrValueService;
+
+
+    /**
+     * 自提商品列表
+     */
+    @GetMapping("/list")
+    public R list(FsPickupGoodsListParam param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        FsStoreProductScrm fsStoreProduct = new FsStoreProductScrm();
+        BeanUtils.copyProperties(param, fsStoreProduct);
+
+        fsStoreProduct.setIsDel(0);
+        fsStoreProduct.setIsPickup(1);
+        List<FsStoreProductListVO> list = fsStoreProductService.selectFsStoreProductListVO(fsStoreProduct);
+        PageInfo<FsStoreProductListVO> listPageInfo= new PageInfo<>(list);
+        return R.ok().put("data",listPageInfo);
+    }
+
+    /**
+     * 获取自提商品详情
+     */
+    @GetMapping
+    public R getInfo(@RequestParam("productId") Long productId) {
+        FsStoreProductScrm product = fsStoreProductService.selectFsStoreProductById(productId);
+        FsStoreProductAttrValueScrm query = new FsStoreProductAttrValueScrm();
+        query.setProductId(productId);
+        List<FsStoreProductAttrValueScrm> values = attrValueService.selectFsStoreProductAttrValueList(query);
+        return R.ok().put("data", product).put("values", values);
+    }
+
+
+
+}

+ 70 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/FsStoreOrderPickController.java

@@ -0,0 +1,70 @@
+package com.fs.app.controller.store;
+
+import com.fs.app.annotation.Login;
+import com.fs.app.controller.AppBaseController;
+import com.fs.common.core.domain.R;
+import com.fs.hisStore.domain.FsStoreOrderPick;
+import com.fs.hisStore.param.FsStoreOrderPickAddParam;
+import com.fs.hisStore.param.FsStoreOrderPickListParam;
+import com.fs.hisStore.service.IFsStoreOrderPickService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 自提商品订单Controller
+ *
+ * @author caolq
+ * @date 2026-06-24
+ */
+@RestController
+@RequestMapping("/app/store/storeOrderPick")
+public class FsStoreOrderPickController extends AppBaseController
+{
+    @Autowired
+    private IFsStoreOrderPickService fsStoreOrderPickService;
+
+    /**
+     * 查询自提商品订单列表
+     */
+    @Login
+    @GetMapping("/list")
+    public R list(FsStoreOrderPickListParam param)
+    {
+        String userId = getUserId();
+        FsStoreOrderPick fsStoreOrderPick = new FsStoreOrderPick();
+        fsStoreOrderPick.setUserId(Long.valueOf(userId));
+        fsStoreOrderPick.setOrderCode(param.getOrderCode());
+        fsStoreOrderPick.setRedeemedStatus(param.getRedeemedStatus());
+        startPage();
+        List<FsStoreOrderPick> list = fsStoreOrderPickService.selectFsStoreOrderPickList(fsStoreOrderPick);
+        return R.ok().put("data", list);
+    }
+
+    /**
+     * 获取自提商品订单详细信息
+     */
+    @GetMapping
+    public R getInfo(@RequestParam("id") Long id)
+    {
+        FsStoreOrderPick fsStoreOrderPick = fsStoreOrderPickService.selectFsStoreOrderPickById(id);
+        return R.ok().put("data", fsStoreOrderPick);
+    }
+
+    /**
+     * 新增自提商品订单
+     */
+    @Login
+    @PostMapping
+    public R add(@RequestBody FsStoreOrderPickAddParam fsStoreOrderPick)
+    {
+        int rows = fsStoreOrderPickService.createFsStoreOrderPick(fsStoreOrderPick);
+        if (rows <= 0) {
+            return R.error("新增自提商品订单失败");
+        }
+        return R.ok();
+    }
+
+
+}

+ 71 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/FsStoreProductUserRecordController.java

@@ -0,0 +1,71 @@
+package com.fs.app.controller.store;
+
+import com.fs.app.annotation.Login;
+import com.fs.app.controller.AppBaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.hisStore.domain.FsStoreProductUserRecord;
+import com.fs.hisStore.param.FsStoreProductUserRecordAddParam;
+import com.fs.hisStore.service.IFsStoreProductUserRecordService;
+import com.fs.hisStore.vo.FsStoreProductUserTempDetailVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 商品信息采集记录Controller
+ *
+ * @author caolq
+ * @date 2026-06-18
+ */
+@RestController
+@RequestMapping("/app/store/productUserRecord")
+public class FsStoreProductUserRecordController extends AppBaseController
+{
+    @Autowired
+    private IFsStoreProductUserRecordService fsStoreProductUserRecordService;
+
+    /**
+     * 判断用户是否已填写信息采集表
+     */
+    @GetMapping("/hasFilled")
+    public R hasFilled(@RequestParam("userId") Long userId)
+    {
+        FsStoreProductUserRecord query = new FsStoreProductUserRecord();
+        query.setUserId(userId);
+        query.setIsDel(0);
+        boolean hasFilled = !fsStoreProductUserRecordService.selectFsStoreProductUserRecordList(query).isEmpty();
+        return R.ok().put("hasFilled", hasFilled);
+    }
+
+    /**
+     * 根据商品ID查询启用中的信息采集模板
+     */
+    @GetMapping("/template")
+    public R getTemplateByProductId(@RequestParam("productId") Long productId)
+    {
+        FsStoreProductUserTempDetailVO result = fsStoreProductUserRecordService.selectTemplateDetailByProductId(productId);
+        return R.ok().put("data", result);
+    }
+
+    /**
+     * 新增商品信息采集记录
+     */
+    @Login
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreProductUserRecordAddParam param)
+    {
+        return toAjax(fsStoreProductUserRecordService.insertFsStoreProductUserRecordWithValues(param));
+    }
+
+//    /**
+//     * 修改商品信息采集记录
+//     */
+//    @PreAuthorize("@ss.hasPermi('store:storeProductUserRecord:edit')")
+//    @Log(title = "商品信息采集记录", businessType = BusinessType.UPDATE)
+//    @PutMapping
+//    public AjaxResult edit(@RequestBody FsStoreProductUserRecord fsStoreProductUserRecord)
+//    {
+//        return toAjax(fsStoreProductUserRecordService.updateFsStoreProductUserRecord(fsStoreProductUserRecord));
+//    }
+
+}