Explorar o código

商城处方记录表

cgp hai 2 días
pai
achega
e82ba25ad7
Modificáronse 24 ficheiros con 971 adicións e 260 borrados
  1. 79 0
      fs-doctor-app/src/main/java/com/fs/app/controller/FsPrescibeRecordDataScrmController.java
  2. 70 0
      fs-service/src/main/java/com/fs/his/domain/FsPrescibeRecordDataScrm.java
  3. 3 3
      fs-service/src/main/java/com/fs/his/domain/FsPrescribeDataScrm.java
  4. 1 1
      fs-service/src/main/java/com/fs/his/domain/FsPrescribeDataScrmDrug.java
  5. 2 2
      fs-service/src/main/java/com/fs/his/domain/PrescribeScrmTaskRecord.java
  6. 60 0
      fs-service/src/main/java/com/fs/his/mapper/FsPrescibeRecordDataScrmMapper.java
  7. 12 12
      fs-service/src/main/java/com/fs/his/mapper/FsPrescribeDataScrmDrugMapper.java
  8. 11 0
      fs-service/src/main/java/com/fs/his/mapper/FsPrescribeDataScrmMapper.java
  9. 12 12
      fs-service/src/main/java/com/fs/his/mapper/PrescribeScrmTaskRecordMapper.java
  10. 60 0
      fs-service/src/main/java/com/fs/his/service/IFsPrescibeRecordDataScrmService.java
  11. 12 12
      fs-service/src/main/java/com/fs/his/service/IFsPrescribeDataScrmDrugService.java
  12. 14 2
      fs-service/src/main/java/com/fs/his/service/IFsPrescribeDataScrmService.java
  13. 13 13
      fs-service/src/main/java/com/fs/his/service/IPrescribeScrmTaskRecordService.java
  14. 86 0
      fs-service/src/main/java/com/fs/his/service/impl/FsPrescibeRecordDataScrmServiceImpl.java
  15. 13 13
      fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeDataScrmDrugServiceImpl.java
  16. 318 176
      fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeDataScrmServiceImpl.java
  17. 13 13
      fs-service/src/main/java/com/fs/his/service/impl/PrescribeScrmTaskRecordServiceImpl.java
  18. 30 0
      fs-service/src/main/java/com/fs/his/vo/FsPrescribeDataScrmImgVO.java
  19. 2 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java
  20. 5 0
      fs-service/src/main/java/com/fs/qw/mapper/FsCompanyCustomerMapper.java
  21. 128 0
      fs-service/src/main/resources/mapper/his/FsPrescibeRecordDataScrmMapper.xml
  22. 21 0
      fs-service/src/main/resources/mapper/his/FsPrescribeDataScrmMapper.xml
  23. 0 1
      fs-service/src/main/resources/mapper/hisStore/FsStoreProductScrmMapper.xml
  24. 6 0
      fs-service/src/main/resources/mapper/qw/FsCompanyCustomerMapper.xml

+ 79 - 0
fs-doctor-app/src/main/java/com/fs/app/controller/FsPrescibeRecordDataScrmController.java

@@ -0,0 +1,79 @@
+package com.fs.app.controller;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.his.domain.FsPrescibeRecordDataScrm;
+import com.fs.his.service.IFsPrescibeRecordDataScrmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 商城处方记录表Controller
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+@RestController
+@RequestMapping("/his/prescibeRecordDataScrm")
+public class FsPrescibeRecordDataScrmController extends BaseController {
+    @Autowired
+    private IFsPrescibeRecordDataScrmService fsPrescibeRecordDataScrmService;
+
+    /**
+     * 查询商城处方记录表列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) {
+        startPage();
+        List<FsPrescibeRecordDataScrm> list = fsPrescibeRecordDataScrmService.selectFsPrescibeRecordDataScrmList(fsPrescibeRecordDataScrm);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商城处方记录表列表
+     */
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) throws IOException {
+        List<FsPrescibeRecordDataScrm> list = fsPrescibeRecordDataScrmService.selectFsPrescibeRecordDataScrmList(fsPrescibeRecordDataScrm);
+        ExcelUtil<FsPrescibeRecordDataScrm> util = new ExcelUtil<>(FsPrescibeRecordDataScrm.class);
+        util.exportExcel(response, list, "商城处方记录表数据");
+    }
+
+    /**
+     * 获取商城处方记录表详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(fsPrescibeRecordDataScrmService.selectFsPrescibeRecordDataScrmById(id));
+    }
+
+    /**
+     * 新增商城处方记录表
+     */
+    @PostMapping
+    public AjaxResult add(@RequestBody FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) {
+        return toAjax(fsPrescibeRecordDataScrmService.insertFsPrescibeRecordDataScrm(fsPrescibeRecordDataScrm));
+    }
+
+    /**
+     * 修改商城处方记录表
+     */
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) {
+        return toAjax(fsPrescibeRecordDataScrmService.updateFsPrescibeRecordDataScrm(fsPrescibeRecordDataScrm));
+    }
+
+    /**
+     * 删除商城处方记录表
+     */
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(fsPrescibeRecordDataScrmService.deleteFsPrescibeRecordDataScrmByIds(ids));
+    }
+}

+ 70 - 0
fs-service/src/main/java/com/fs/his/domain/FsPrescibeRecordDataScrm.java

@@ -0,0 +1,70 @@
+package com.fs.his.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 商城处方记录表实体类
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+@Data
+@ApiModel(description = "商城处方记录表")
+public class FsPrescibeRecordDataScrm implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ApiModelProperty(value = "主键ID")
+    private Long id;
+
+    /** 中药处方图片地址 */
+    @ApiModelProperty(value = "中药处方图片地址")
+    private String prescribeImgUrl;
+
+    /** 西药处方图片地址 */
+    @ApiModelProperty(value = "西药处方图片地址")
+    private String prescribeImgStoreUrl;
+
+    /** 医生id */
+    @ApiModelProperty(value = "医生id")
+    private Long doctorId;
+
+    /** 药师id */
+    @ApiModelProperty(value = "药师id")
+    private Long drugDoctorId;
+
+    /** 医生名称 */
+    @ApiModelProperty(value = "医生名称")
+    private String doctorName;
+
+    /** 药师名称 */
+    @ApiModelProperty(value = "药师名称")
+    private String drugDoctorName;
+
+    /** 状态 1通过 2拒绝 */
+    @ApiModelProperty(value = "状态 1通过 2拒绝")
+    private Integer status;
+
+    /** 拒绝原因 */
+    @ApiModelProperty(value = "拒绝原因")
+    private String auditReason;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    /** 处方id */
+    @ApiModelProperty(value = "处方id")
+    private Long prescribeId;
+}

+ 3 - 3
fs-service/src/main/java/com/fs/his/domain/FsPrescribeDataScrm.java

@@ -21,7 +21,7 @@ public class FsPrescribeDataScrm extends BaseEntity
     /** id */
     private Long prescribeId;
 
-    /** 处方类型 1西药 2中药 */
+    /** 处方类型 1西药 2中药 3中药+西药(意味着有两种处方) */
     private Integer prescribeType;
 
     /** 订单ID */
@@ -84,10 +84,10 @@ public class FsPrescribeDataScrm extends BaseEntity
     /** 复诊凭证 */
     private String recordPic;
 
-    /** 处方图片地址 */
+    /** 中药处方图片地址 */
     private String prescribeImgUrl;
 
-    /** 处方图片存储地址 */
+    /** 西药处方图片地址 */
     private String prescribeImgStoreUrl;
 
     /** 拒绝原因 */

+ 1 - 1
fs-service/src/main/java/com/fs/his/domain/FsPrescribeDataScrmDrug.java

@@ -59,7 +59,7 @@ public class FsPrescribeDataScrmDrug implements Serializable {
 
     /** 药品数量 */
     @ApiModelProperty(value = "药品数量")
-    private Integer drugNum;
+    private Long drugNum;
 
     /** 药品数量单位 */
     @ApiModelProperty(value = "药品数量单位")

+ 2 - 2
fs-service/src/main/java/com/fs/his/domain/PrescribeScrmTaskRecord.java

@@ -8,13 +8,13 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- * 处方单生成定时任务中间表实体类
+ * 商城处方单生成定时任务中间表实体类
  * 
  * @author ruoyi
  * @date 2026-06-12
  */
 @Data
-@ApiModel(description = "商城处方单生成定时任务中间表")
+@ApiModel(description = "商城商城处方单生成定时任务中间表")
 public class PrescribeScrmTaskRecord implements Serializable {
     private static final long serialVersionUID = 1L;
 

+ 60 - 0
fs-service/src/main/java/com/fs/his/mapper/FsPrescibeRecordDataScrmMapper.java

@@ -0,0 +1,60 @@
+package com.fs.his.mapper;
+
+import com.fs.his.domain.FsPrescibeRecordDataScrm;
+import java.util.List;
+
+/**
+ * 商城处方记录表Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+public interface FsPrescibeRecordDataScrmMapper {
+    /**
+     * 查询商城处方记录表
+     * 
+     * @param id 主键ID
+     * @return 商城处方记录表
+     */
+    public FsPrescibeRecordDataScrm selectFsPrescibeRecordDataScrmById(Long id);
+
+    /**
+     * 查询商城处方记录表列表
+     * 
+     * @param fsPrescibeRecordDataScrm 商城处方记录表
+     * @return 商城处方记录表集合
+     */
+    public List<FsPrescibeRecordDataScrm> selectFsPrescibeRecordDataScrmList(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm);
+
+    /**
+     * 新增商城处方记录表
+     * 
+     * @param fsPrescibeRecordDataScrm 商城处方记录表
+     * @return 结果
+     */
+    public int insertFsPrescibeRecordDataScrm(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm);
+
+    /**
+     * 修改商城处方记录表
+     * 
+     * @param fsPrescibeRecordDataScrm 商城处方记录表
+     * @return 结果
+     */
+    public int updateFsPrescibeRecordDataScrm(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm);
+
+    /**
+     * 删除商城处方记录表
+     * 
+     * @param id 主键ID
+     * @return 结果
+     */
+    public int deleteFsPrescibeRecordDataScrmById(Long id);
+
+    /**
+     * 批量删除商城处方记录表
+     * 
+     * @param ids 需要删除的主键ID数组
+     * @return 结果
+     */
+    public int deleteFsPrescibeRecordDataScrmByIds(Long[] ids);
+}

+ 12 - 12
fs-service/src/main/java/com/fs/his/mapper/FsPrescribeDataScrmDrugMapper.java

@@ -5,46 +5,46 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 /**
- * 处方药品表Mapper接口
+ * 商城处方药品表Mapper接口
  * 
  * @author ruoyi
  * @date 2026-06-12
  */
 public interface FsPrescribeDataScrmDrugMapper {
     /**
-     * 查询处方药品表
+     * 查询商城处方药品表
      * 
      * @param drugId 药品ID
-     * @return 处方药品表
+     * @return 商城处方药品表
      */
     public FsPrescribeDataScrmDrug selectFsPrescribeDataScrmDrugById(Long drugId);
 
     /**
-     * 查询处方药品表列表
+     * 查询商城处方药品表列表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
-     * @return 处方药品表集合
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
+     * @return 商城处方药品表集合
      */
     public List<FsPrescribeDataScrmDrug> selectFsPrescribeDataScrmDrugList(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
 
     /**
-     * 新增处方药品表
+     * 新增商城处方药品表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
      * @return 结果
      */
     public int insertFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
 
     /**
-     * 修改处方药品表
+     * 修改商城处方药品表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
      * @return 结果
      */
     public int updateFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
 
     /**
-     * 删除处方药品表
+     * 删除商城处方药品表
      * 
      * @param drugId 药品ID
      * @return 结果
@@ -52,7 +52,7 @@ public interface FsPrescribeDataScrmDrugMapper {
     public int deleteFsPrescribeDataScrmDrugById(Long drugId);
 
     /**
-     * 批量删除处方药品表
+     * 批量删除商城处方药品表
      * 
      * @param drugIds 需要删除的药品ID数组
      * @return 结果

+ 11 - 0
fs-service/src/main/java/com/fs/his/mapper/FsPrescribeDataScrmMapper.java

@@ -3,6 +3,7 @@ package com.fs.his.mapper;
 import com.fs.his.domain.FsPrescribeDataScrm;
 import com.fs.his.dto.FsPrescribeDataDoctorQueryDto;
 import com.fs.his.dto.FsPrescribeDataDrugDoctorQueryDto;
+import com.fs.his.vo.FsPrescribeDataScrmImgVO;
 import com.fs.qw.vo.FsPrescribeDataScrmVO;
 
 import java.util.List;
@@ -72,4 +73,14 @@ public interface FsPrescribeDataScrmMapper
      * 药师---查询待审核商城处方列表
      * */
     List<FsPrescribeDataScrmVO> pendingStorePrescribeList(FsPrescribeDataDrugDoctorQueryDto queryDto);
+
+    /**
+     * ---查询商城处方签名图片相关
+     * */
+    FsPrescribeDataScrmImgVO selectFsPrescribeDataScrmImgVOByPrescribeId(Long prescribeId);
+
+    /**
+     * 清除商城处方图片(根据处方id设置处方图片为null)
+     * */
+    void clearPrescribeUrl(Long prescribeId);
 }

+ 12 - 12
fs-service/src/main/java/com/fs/his/mapper/PrescribeScrmTaskRecordMapper.java

@@ -5,46 +5,46 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 /**
- * 处方单生成定时任务中间表Mapper接口
+ * 商城处方单生成定时任务中间表Mapper接口
  * 
  * @author ruoyi
  * @date 2026-06-12
  */
 public interface PrescribeScrmTaskRecordMapper {
     /**
-     * 查询处方单生成定时任务中间表
+     * 查询商城处方单生成定时任务中间表
      * 
      * @param id 主键ID
-     * @return 处方单生成定时任务中间表
+     * @return 商城处方单生成定时任务中间表
      */
     public PrescribeScrmTaskRecord selectPrescribeScrmTaskRecordById(Long id);
 
     /**
-     * 查询处方单生成定时任务中间表列表
+     * 查询商城处方单生成定时任务中间表列表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
-     * @return 处方单生成定时任务中间表集合
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
+     * @return 商城处方单生成定时任务中间表集合
      */
     public List<PrescribeScrmTaskRecord> selectPrescribeScrmTaskRecordList(PrescribeScrmTaskRecord prescribeScrmTaskRecord);
 
     /**
-     * 新增处方单生成定时任务中间表
+     * 新增商城处方单生成定时任务中间表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
      * @return 结果
      */
     public int insertPrescribeScrmTaskRecord(PrescribeScrmTaskRecord prescribeScrmTaskRecord);
 
     /**
-     * 修改处方单生成定时任务中间表
+     * 修改商城处方单生成定时任务中间表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
      * @return 结果
      */
     public int updatePrescribeScrmTaskRecord(PrescribeScrmTaskRecord prescribeScrmTaskRecord);
 
     /**
-     * 删除处方单生成定时任务中间表
+     * 删除商城处方单生成定时任务中间表
      * 
      * @param id 主键ID
      * @return 结果
@@ -52,7 +52,7 @@ public interface PrescribeScrmTaskRecordMapper {
     public int deletePrescribeScrmTaskRecordById(Long id);
 
     /**
-     * 批量删除处方单生成定时任务中间表
+     * 批量删除商城处方单生成定时任务中间表
      * 
      * @param ids 需要删除的数据ID数组
      * @return 结果

+ 60 - 0
fs-service/src/main/java/com/fs/his/service/IFsPrescibeRecordDataScrmService.java

@@ -0,0 +1,60 @@
+package com.fs.his.service;
+
+import com.fs.his.domain.FsPrescibeRecordDataScrm;
+import java.util.List;
+
+/**
+ * 处方记录表Service接口
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+public interface IFsPrescibeRecordDataScrmService {
+    /**
+     * 查询处方记录表
+     * 
+     * @param id 主键ID
+     * @return 处方记录表
+     */
+    public FsPrescibeRecordDataScrm selectFsPrescibeRecordDataScrmById(Long id);
+
+    /**
+     * 查询处方记录表列表
+     * 
+     * @param fsPrescibeRecordDataScrm 处方记录表
+     * @return 处方记录表集合
+     */
+    public List<FsPrescibeRecordDataScrm> selectFsPrescibeRecordDataScrmList(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm);
+
+    /**
+     * 新增处方记录表
+     * 
+     * @param fsPrescibeRecordDataScrm 处方记录表
+     * @return 结果
+     */
+    public int insertFsPrescibeRecordDataScrm(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm);
+
+    /**
+     * 修改处方记录表
+     * 
+     * @param fsPrescibeRecordDataScrm 处方记录表
+     * @return 结果
+     */
+    public int updateFsPrescibeRecordDataScrm(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm);
+
+    /**
+     * 批量删除处方记录表
+     * 
+     * @param ids 需要删除的主键ID数组
+     * @return 结果
+     */
+    public int deleteFsPrescibeRecordDataScrmByIds(Long[] ids);
+
+    /**
+     * 删除处方记录表信息
+     * 
+     * @param id 主键ID
+     * @return 结果
+     */
+    public int deleteFsPrescibeRecordDataScrmById(Long id);
+}

+ 12 - 12
fs-service/src/main/java/com/fs/his/service/IFsPrescribeDataScrmDrugService.java

@@ -4,46 +4,46 @@ import com.fs.his.domain.FsPrescribeDataScrmDrug;
 import java.util.List;
 
 /**
- * 处方药品表Service接口
+ * 商城处方药品表Service接口
  * 
  * @author ruoyi
  * @date 2026-06-12
  */
 public interface IFsPrescribeDataScrmDrugService {
     /**
-     * 查询处方药品表
+     * 查询商城处方药品表
      * 
      * @param drugId 药品ID
-     * @return 处方药品表
+     * @return 商城处方药品表
      */
     public FsPrescribeDataScrmDrug selectFsPrescribeDataScrmDrugById(Long drugId);
 
     /**
-     * 查询处方药品表列表
+     * 查询商城处方药品表列表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
-     * @return 处方药品表集合
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
+     * @return 商城处方药品表集合
      */
     public List<FsPrescribeDataScrmDrug> selectFsPrescribeDataScrmDrugList(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
 
     /**
-     * 新增处方药品表
+     * 新增商城处方药品表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
      * @return 结果
      */
     public int insertFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
 
     /**
-     * 修改处方药品表
+     * 修改商城处方药品表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
      * @return 结果
      */
     public int updateFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
 
     /**
-     * 批量删除处方药品表
+     * 批量删除商城处方药品表
      * 
      * @param drugIds 需要删除的药品ID数组
      * @return 结果
@@ -51,7 +51,7 @@ public interface IFsPrescribeDataScrmDrugService {
     public int deleteFsPrescribeDataScrmDrugByIds(Long[] drugIds);
 
     /**
-     * 删除处方药品表信息
+     * 删除商城处方药品表信息
      * 
      * @param drugId 药品ID
      * @return 结果

+ 14 - 2
fs-service/src/main/java/com/fs/his/service/IFsPrescribeDataScrmService.java

@@ -8,6 +8,7 @@ import com.fs.his.dto.FsPrescribeDataDrugDoctorUpdateDto;
 import com.fs.qw.vo.FsPrescribeDataScrmVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 处方表(SCRM)Service接口
@@ -79,9 +80,20 @@ public interface IFsPrescribeDataScrmService
     int doctorExecuteScrmPrescribe(FsPrescribeDataDoctorUpdateDto updateDto);
 
     /**
-     * 生成商城处方图片
+     * 生成商城处方图片(异步任务调用)
+     * @param prescribeId 处方ID
+     * @param signFlag 签名标识:1-仅医生签名,2-医生+药师签名
+     * @return Map 包含两个 key:
+     *         "prescribeImgUrl"      - 中药处方图片地址
+     *         "prescribeImgStoreUrl" - 西药处方图片地址
+     *         未生成对应的图片时 value 为 null
      */
-    String prescribeScrmImgYsyTask(Long prescribeId,Integer signFlag);
+    Map<String, String> prescribeScrmImgYsyTask(Long prescribeId, Integer signFlag);
+
+    /**
+     * 清理处方图片(设置业务表字段为null)
+     */
+    void clearPrescribeUrl(Long prescribeId);
 
     /**
      * 药师---查询待审核处方列表

+ 13 - 13
fs-service/src/main/java/com/fs/his/service/IPrescribeScrmTaskRecordService.java

@@ -4,54 +4,54 @@ import com.fs.his.domain.PrescribeScrmTaskRecord;
 import java.util.List;
 
 /**
- * 处方单生成定时任务中间表Service接口
+ * 商城处方单生成定时任务中间表Service接口
  * 
  * @author ruoyi
  * @date 2026-06-12
  */
 public interface IPrescribeScrmTaskRecordService {
     /**
-     * 查询处方单生成定时任务中间表
+     * 查询商城处方单生成定时任务中间表
      * 
      * @param id 主键ID
-     * @return 处方单生成定时任务中间表
+     * @return 商城处方单生成定时任务中间表
      */
     public PrescribeScrmTaskRecord selectPrescribeScrmTaskRecordById(Long id);
 
     /**
-     * 查询处方单生成定时任务中间表列表
+     * 查询商城处方单生成定时任务中间表列表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
-     * @return 处方单生成定时任务中间表集合
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
+     * @return 商城处方单生成定时任务中间表集合
      */
     public List<PrescribeScrmTaskRecord> selectPrescribeScrmTaskRecordList(PrescribeScrmTaskRecord prescribeScrmTaskRecord);
 
     /**
-     * 新增处方单生成定时任务中间表
+     * 新增商城处方单生成定时任务中间表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
      * @return 结果
      */
     public int insertPrescribeScrmTaskRecord(PrescribeScrmTaskRecord prescribeScrmTaskRecord);
 
     /**
-     * 修改处方单生成定时任务中间表
+     * 修改商城处方单生成定时任务中间表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
      * @return 结果
      */
     public int updatePrescribeScrmTaskRecord(PrescribeScrmTaskRecord prescribeScrmTaskRecord);
 
     /**
-     * 批量删除处方单生成定时任务中间表
+     * 批量删除商城处方单生成定时任务中间表
      * 
-     * @param ids 需要删除的处方单生成定时任务中间表主键数组
+     * @param ids 需要删除的商城处方单生成定时任务中间表主键数组
      * @return 结果
      */
     public int deletePrescribeScrmTaskRecordByIds(Long[] ids);
 
     /**
-     * 删除处方单生成定时任务中间表信息
+     * 删除商城处方单生成定时任务中间表信息
      * 
      * @param id 主键ID
      * @return 结果

+ 86 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsPrescibeRecordDataScrmServiceImpl.java

@@ -0,0 +1,86 @@
+package com.fs.his.service.impl;
+
+import com.fs.his.domain.FsPrescibeRecordDataScrm;
+import com.fs.his.mapper.FsPrescibeRecordDataScrmMapper;
+import com.fs.his.service.IFsPrescibeRecordDataScrmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.List;
+
+/**
+ * 商城处方记录表Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+@Service
+public class FsPrescibeRecordDataScrmServiceImpl implements IFsPrescibeRecordDataScrmService {
+    @Autowired
+    private FsPrescibeRecordDataScrmMapper fsPrescibeRecordDataScrmMapper;
+
+    /**
+     * 查询商城处方记录表
+     * 
+     * @param id 主键ID
+     * @return 商城处方记录表
+     */
+    @Override
+    public FsPrescibeRecordDataScrm selectFsPrescibeRecordDataScrmById(Long id) {
+        return fsPrescibeRecordDataScrmMapper.selectFsPrescibeRecordDataScrmById(id);
+    }
+
+    /**
+     * 查询商城处方记录表列表
+     * 
+     * @param fsPrescibeRecordDataScrm 商城处方记录表
+     * @return 商城处方记录表
+     */
+    @Override
+    public List<FsPrescibeRecordDataScrm> selectFsPrescibeRecordDataScrmList(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) {
+        return fsPrescibeRecordDataScrmMapper.selectFsPrescibeRecordDataScrmList(fsPrescibeRecordDataScrm);
+    }
+
+    /**
+     * 新增商城处方记录表
+     * 
+     * @param fsPrescibeRecordDataScrm 商城处方记录表
+     * @return 结果
+     */
+    @Override
+    public int insertFsPrescibeRecordDataScrm(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) {
+        return fsPrescibeRecordDataScrmMapper.insertFsPrescibeRecordDataScrm(fsPrescibeRecordDataScrm);
+    }
+
+    /**
+     * 修改商城处方记录表
+     * 
+     * @param fsPrescibeRecordDataScrm 商城处方记录表
+     * @return 结果
+     */
+    @Override
+    public int updateFsPrescibeRecordDataScrm(FsPrescibeRecordDataScrm fsPrescibeRecordDataScrm) {
+        return fsPrescibeRecordDataScrmMapper.updateFsPrescibeRecordDataScrm(fsPrescibeRecordDataScrm);
+    }
+
+    /**
+     * 批量删除商城处方记录表
+     * 
+     * @param ids 需要删除的商城处方记录表主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsPrescibeRecordDataScrmByIds(Long[] ids) {
+        return fsPrescibeRecordDataScrmMapper.deleteFsPrescibeRecordDataScrmByIds(ids);
+    }
+
+    /**
+     * 删除商城处方记录表信息
+     * 
+     * @param id 主键ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsPrescibeRecordDataScrmById(Long id) {
+        return fsPrescibeRecordDataScrmMapper.deleteFsPrescibeRecordDataScrmById(id);
+    }
+}

+ 13 - 13
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeDataScrmDrugServiceImpl.java

@@ -8,7 +8,7 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 
 /**
- * 处方药品表Service业务层处理
+ * 商城处方药品表Service业务层处理
  * 
  * @author ruoyi
  * @date 2026-06-12
@@ -19,10 +19,10 @@ public class FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmD
     private FsPrescribeDataScrmDrugMapper fsPrescribeDataScrmDrugMapper;
 
     /**
-     * 查询处方药品表
+     * 查询商城处方药品表
      * 
      * @param drugId 药品ID
-     * @return 处方药品表
+     * @return 商城处方药品表
      */
     @Override
     public FsPrescribeDataScrmDrug selectFsPrescribeDataScrmDrugById(Long drugId) {
@@ -30,10 +30,10 @@ public class FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmD
     }
 
     /**
-     * 查询处方药品表列表
+     * 查询商城处方药品表列表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
-     * @return 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
+     * @return 商城处方药品表
      */
     @Override
     public List<FsPrescribeDataScrmDrug> selectFsPrescribeDataScrmDrugList(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug) {
@@ -41,9 +41,9 @@ public class FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmD
     }
 
     /**
-     * 新增处方药品表
+     * 新增商城处方药品表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
      * @return 结果
      */
     @Override
@@ -52,9 +52,9 @@ public class FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmD
     }
 
     /**
-     * 修改处方药品表
+     * 修改商城处方药品表
      * 
-     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @param fsPrescribeDataScrmDrug 商城处方药品表
      * @return 结果
      */
     @Override
@@ -63,9 +63,9 @@ public class FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmD
     }
 
     /**
-     * 批量删除处方药品表
+     * 批量删除商城处方药品表
      * 
-     * @param drugIds 需要删除的处方药品表主键
+     * @param drugIds 需要删除的商城处方药品表主键
      * @return 结果
      */
     @Override
@@ -74,7 +74,7 @@ public class FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmD
     }
 
     /**
-     * 删除处方药品表信息
+     * 删除商城处方药品表信息
      * 
      * @param drugId 药品ID
      * @return 结果

+ 318 - 176
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeDataScrmServiceImpl.java

@@ -13,7 +13,10 @@ import com.fs.his.mapper.FsPrescribeDataScrmMapper;
 import com.fs.his.mapper.PrescribeScrmTaskRecordMapper;
 import com.fs.his.param.PrescribeXyImgParam;
 import com.fs.his.service.IFsPrescribeDataScrmService;
-import com.fs.qw.domain.FsCompanyCustomer;
+import com.fs.his.service.PrescriptionImageService;
+import com.fs.his.vo.FsPrescribeDataScrmImgVO;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hisStore.mapper.FsStoreProductScrmMapper;
 import com.fs.qw.mapper.FsCompanyCustomerMapper;
 import com.fs.qw.vo.FsPrescribeDataScrmVO;
 import lombok.extern.slf4j.Slf4j;
@@ -25,252 +28,391 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
- * 处方表(SCRM)Service业务层处理
+ * 商城处方表(SCRM)Service业务层处理
  *
  * @author ruoyi
  * @date 2026-06-11
  */
 @Slf4j
 @Service
-public class FsPrescribeDataScrmServiceImpl implements IFsPrescribeDataScrmService
-{
+public class FsPrescribeDataScrmServiceImpl implements IFsPrescribeDataScrmService {
+
     @Autowired
     private FsPrescribeDataScrmMapper fsPrescribeDataScrmMapper;
-
     @Autowired
     private PrescribeScrmTaskRecordMapper scrmTaskRecordMapper;
-
     @Autowired
     private FsCompanyCustomerMapper companyCustomerMapper;
-
     @Autowired
     private FsPrescribeDataScrmDrugMapper dataScrmDrugMapper;
-
+    @Autowired
+    private PrescriptionImageService prescriptionImageService;
+    @Autowired
+    private FsStoreProductScrmMapper fsStoreProductScrmMapper;
     @Autowired
     private ApplicationContext applicationContext;
+
     private IFsPrescribeDataScrmService self() {
         return applicationContext.getBean(IFsPrescribeDataScrmService.class);
     }
 
-    /**
-     * 查询处方表(SCRM)
-     *
-     * @param prescribeId 处方表(SCRM)主键
-     * @return 处方表(SCRM)
-     */
+    /*
+    * 开方中
+    * */
+    private static final Integer IS_PRESCRIBING = 2;
+
+    /*
+    * 待审核
+    * */
+    private static final Integer WAIT_AUDIT = 3;
+
+    /*
+    * 已开方
+    * */
+    private static final Integer OPEN_PRESCRIBE = 4;
+
+    /*
+    * 已拒方
+    * */
+    private static final Integer REJECT_PRESCRIBE = 5;
+
+
+    // ==================== 基础 CRUD ====================
     @Override
-    public FsPrescribeDataScrm selectFsPrescribeDataScrmByPrescribeId(Long prescribeId)
-    {
+    public FsPrescribeDataScrm selectFsPrescribeDataScrmByPrescribeId(Long prescribeId) {
         return fsPrescribeDataScrmMapper.selectFsPrescribeDataScrmByPrescribeId(prescribeId);
     }
 
-    /**
-     * 查询处方表(SCRM)列表
-     *
-     * @param fsPrescribeDataScrm 处方表(SCRM)
-     * @return 处方表(SCRM)
-     */
     @Override
-    public List<FsPrescribeDataScrm> selectFsPrescribeDataScrmList(FsPrescribeDataScrm fsPrescribeDataScrm)
-    {
+    public List<FsPrescribeDataScrm> selectFsPrescribeDataScrmList(FsPrescribeDataScrm fsPrescribeDataScrm) {
         return fsPrescribeDataScrmMapper.selectFsPrescribeDataScrmList(fsPrescribeDataScrm);
     }
 
-    /**
-     * 新增处方表(SCRM)
-     *
-     * @param fsPrescribeDataScrm 处方表(SCRM)
-     * @return 结果
-     */
     @Override
-    public int insertFsPrescribeDataScrm(FsPrescribeDataScrm fsPrescribeDataScrm)
-    {
+    public int insertFsPrescribeDataScrm(FsPrescribeDataScrm fsPrescribeDataScrm) {
         fsPrescribeDataScrm.setCreateTime(DateUtils.getNowDate());
         return fsPrescribeDataScrmMapper.insertFsPrescribeDataScrm(fsPrescribeDataScrm);
     }
 
-    /**
-     * 修改处方表(SCRM)
-     *
-     * @param fsPrescribeDataScrm 处方表(SCRM)
-     * @return 结果
-     */
     @Override
-    public int updateFsPrescribeDataScrm(FsPrescribeDataScrm fsPrescribeDataScrm)
-    {
+    public int updateFsPrescribeDataScrm(FsPrescribeDataScrm fsPrescribeDataScrm) {
         return fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(fsPrescribeDataScrm);
     }
 
-    /**
-     * 批量删除处方表(SCRM)
-     *
-     * @param prescribeIds 需要删除的处方表(SCRM)主键
-     * @return 结果
-     */
     @Override
-    public int deleteFsPrescribeDataScrmByPrescribeIds(Long[] prescribeIds)
-    {
+    public int deleteFsPrescribeDataScrmByPrescribeIds(Long[] prescribeIds) {
         return fsPrescribeDataScrmMapper.deleteFsPrescribeDataScrmByPrescribeIds(prescribeIds);
     }
 
-    /**
-     * 删除处方表(SCRM)信息
-     *
-     * @param prescribeId 处方表(SCRM)主键
-     * @return 结果
-     */
     @Override
-    public int deleteFsPrescribeDataScrmByPrescribeId(Long prescribeId)
-    {
+    public int deleteFsPrescribeDataScrmByPrescribeId(Long prescribeId) {
         return fsPrescribeDataScrmMapper.deleteFsPrescribeDataScrmByPrescribeId(prescribeId);
     }
 
+    // ==================== 查询列表 ====================
     @Override
     public List<FsPrescribeDataScrmVO> waitOpenPrescribeList(FsPrescribeDataDoctorQueryDto queryDto) {
-        List<FsPrescribeDataScrmVO> list=fsPrescribeDataScrmMapper.waitOpenPrescribeList(queryDto);
-        if (CollectionUtils.isEmpty(list)){
-            return Collections.emptyList();
-        }
-        return list;
+        List<FsPrescribeDataScrmVO> list = fsPrescribeDataScrmMapper.waitOpenPrescribeList(queryDto);
+        return CollectionUtils.isEmpty(list) ? Collections.emptyList() : list;
     }
 
+    @Override
+    public List<FsPrescribeDataScrmVO> pendingStorePrescribeList(FsPrescribeDataDrugDoctorQueryDto queryDto) {
+        List<FsPrescribeDataScrmVO> list = fsPrescribeDataScrmMapper.pendingStorePrescribeList(queryDto);
+        return CollectionUtils.isEmpty(list) ? Collections.emptyList() : list;
+    }
+
+    // ==================== 医生操作 ====================
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int doctorExecuteScrmPrescribe(FsPrescribeDataDoctorUpdateDto updateDto) {
-        FsPrescribeDataScrm updatePrescribe=new FsPrescribeDataScrm();
-        BeanCopyUtils.copy(updateDto,updatePrescribe);
-        //TODO 删除只有医生签名的处方图片(处方生成时就用定时任务生成了基础处方图片[无药品、无医生、药师签名])
-        if (updateDto.getDoctorConfirm()==1){
-            //医生确认开方-生成处方单定时任务
-            PrescribeScrmTaskRecord record = new PrescribeScrmTaskRecord();
-            record.setPrescribeId(updateDto.getPrescribeId());
-            record.setCreateTime(DateUtils.getNowDate());
-            record.setExecuteStatus(0);
-            record.setRetryCount(0);
-            //只有医生签名的处方图片标识
-            record.setSignFlag(1);
-            scrmTaskRecordMapper.insertPrescribeScrmTaskRecord(record);
-        }else if (updateDto.getDoctorConfirm()==-1){
-            //拒方
-            if (StringUtils.isBlank(updateDto.getAuditReason())){
+        // 1. 清除原有基础处方图片
+        clearPrescriptionImage(updateDto.getPrescribeId());
+
+        // 2. 更新处方主记录
+        FsPrescribeDataScrm updatePrescribe = new FsPrescribeDataScrm();
+        BeanCopyUtils.copy(updateDto, updatePrescribe);
+        int updateCount = fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(updatePrescribe);
+
+        // 3. 根据医生确认结果进行后续处理
+        if (updateDto.getDoctorConfirm() == 1) {
+            // 确认开方 → 异步生成医生签名处方图片
+            submitPrescribeImageTask(updateDto.getPrescribeId(), 1);
+            // 更新用户状态为待审核
+            updateCustomerStatus(updateDto.getPrescribeId(), WAIT_AUDIT);
+        } else if (updateDto.getDoctorConfirm() == -1) {
+            // 拒方
+            if (StringUtils.isBlank(updateDto.getAuditReason())) {
                 throw new CustomException("拒方原因不能为空");
             }
-            //修改客户信息表状态为医生拒方
-            FsCompanyCustomer fsCompanyCustomer=new FsCompanyCustomer();
-            fsCompanyCustomer.setPrescribeId(updateDto.getPrescribeId());
-            fsCompanyCustomer.setProcessStatus(5);//医生拒方
-            companyCustomerMapper.updateFsCompanyCustomer(fsCompanyCustomer);
+            // 更新用户状态为已拒方
+            updateCustomerStatus(updateDto.getPrescribeId(), REJECT_PRESCRIBE);
+        }
+        return updateCount;
+    }
+
+    // ==================== 药师操作 ====================
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int drugDoctorExecuteScrmPrescribe(FsPrescribeDataDrugDoctorUpdateDto updateDto) {
+        if (updateDto.getStatus() == 1) {
+            // 审核通过 → 异步生成医生+药师签名处方图片
+            submitPrescribeImageTask(updateDto.getPrescribeId(), 2);
+            updateCustomerStatus(updateDto.getPrescribeId(), OPEN_PRESCRIBE);
+        } else if (updateDto.getStatus() == 2) {
+            // 审核不通过 → 清除处方图片,退回状态
+            clearPrescriptionImage(updateDto.getPrescribeId());
+            updateCustomerStatus(updateDto.getPrescribeId(), IS_PRESCRIBING);
         }
+
+        // 更新处方主记录
+        FsPrescribeDataScrm updatePrescribe = new FsPrescribeDataScrm();
+        BeanCopyUtils.copy(updateDto, updatePrescribe);
         return fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(updatePrescribe);
     }
 
+    // ==================== 处方图片生成 ====================
+    /**
+     * 生成处方图片(异步任务调用)
+     * @param prescribeId 处方ID
+     * @param signFlag 签名标识:1-仅医生签名,2-医生+药师签名
+     * @return Map 包含两个 key:
+     *         "prescribeImgUrl"      - 中药处方图片地址
+     *         "prescribeImgStoreUrl" - 西药处方图片地址
+     *         未生成对应的图片时 value 为 null
+     */
+    @Override
+    public Map<String, String> prescribeScrmImgYsyTask(Long prescribeId, Integer signFlag) {
+        FsPrescribeDataScrmImgVO imgVO = fsPrescribeDataScrmMapper.selectFsPrescribeDataScrmImgVOByPrescribeId(prescribeId);
+        Asserts.notNull(imgVO, String.format("处方 %d 未找到!", prescribeId));
+        Asserts.notNull(imgVO.getDoctorId(), String.format("医生 %s 未找到!", imgVO.getDoctorId()));
+        Asserts.notNull(imgVO.getDrugDoctorId(), String.format("药师 %s 未找到!", imgVO.getDrugDoctorId()));
+
+        // 1. 获取并过滤药品
+        FsPrescribeDataScrmDrug query = new FsPrescribeDataScrmDrug();
+        query.setPrescribeId(prescribeId);
+        List<FsPrescribeDataScrmDrug> drugList = dataScrmDrugMapper.selectFsPrescribeDataScrmDrugList(query);
+        if (CollectionUtils.isEmpty(drugList)) {
+            throw new CustomException(String.format("处方单 %d 对应药品为空!", prescribeId));
+        }
+
+        List<FsPrescribeDataScrmDrug> effectiveDrugs = filterNonDrugScrmPrescribe(drugList);
+
+        // 2. 按药品类型分组
+        Map<Integer, List<FsPrescribeDataScrmDrug>> drugTypeMap = effectiveDrugs.stream()
+                .collect(Collectors.groupingBy(FsPrescribeDataScrmDrug::getDrugType));
+        List<FsPrescribeDataScrmDrug> westernDrugs = drugTypeMap.getOrDefault(1, Collections.emptyList()); // 西药
+        List<FsPrescribeDataScrmDrug> chineseDrugs = drugTypeMap.getOrDefault(2, Collections.emptyList()); // 中药
+
+        // 3. 根据处方类型决定要生成的图片
+        Integer prescribeType = imgVO.getPrescribeType();
+        boolean needWestern = (prescribeType == 1 || prescribeType == 3) && !westernDrugs.isEmpty();
+        boolean needChinese = (prescribeType == 2 || prescribeType == 3) && !chineseDrugs.isEmpty();
+
+        // 4. 分别生成图片并更新数据库
+        FsPrescribeDataScrm updateData = new FsPrescribeDataScrm();
+        updateData.setPrescribeId(prescribeId);
+        boolean hasUpdate = false;
+
+        // 生成西药图片 → prescribeImgStoreUrl
+        if (needWestern) {
+            if (StringUtils.isBlank(imgVO.getPrescribeImgStoreUrl())) {
+                String url = generatePrescriptionImageForType(imgVO, signFlag, westernDrugs);
+                updateData.setPrescribeImgStoreUrl(url);
+                hasUpdate = true;
+            } else {
+                log.info("处方 {} 西药图片已存在,跳过生成", prescribeId);
+            }
+        }
+
+        // 生成中药图片 → prescribeImgUrl
+        if (needChinese) {
+            if (StringUtils.isBlank(imgVO.getPrescribeImgUrl())) {
+                String url = generatePrescriptionImageForType(imgVO, signFlag, chineseDrugs);
+                updateData.setPrescribeImgUrl(url);
+                hasUpdate = true;
+            } else {
+                log.info("处方 {} 中药图片已存在,跳过生成", prescribeId);
+            }
+        }
+
+        if (hasUpdate) {
+            fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(updateData);
+        }
+
+        // 5. 构建返回结果(重新查询一次确保拿到最新值)
+        FsPrescribeDataScrmImgVO latest = fsPrescribeDataScrmMapper.selectFsPrescribeDataScrmImgVOByPrescribeId(prescribeId);
+        Map<String, String> result = new HashMap<>();
+        result.put("prescribeImgUrl", latest != null ? latest.getPrescribeImgUrl() : null);
+        result.put("prescribeImgStoreUrl", latest != null ? latest.getPrescribeImgStoreUrl() : null);
+        return result;
+    }
+
+    /**
+     * 生成处方图片(按药品类型)
+     */
+    private String generatePrescriptionImageForType(FsPrescribeDataScrmImgVO imgVO,
+                                                    Integer signFlag,
+                                                    List<FsPrescribeDataScrmDrug> drugList) {
+        PrescribeXyImgParam imgParam = new PrescribeXyImgParam();
+        imgParam.setTime(imgVO.getCreateTime());
+        imgParam.setPrescribeId(imgVO.getPrescribeCode());
+        imgParam.setPatientName(imgVO.getPatientName());
+        imgParam.setPatientGender(String.valueOf(imgVO.getPatientGender()));
+        imgParam.setPatientAge(imgVO.getPatientAge());
+        imgParam.setOutpatientId(imgVO.getPrescribeCode());
+
+        if (com.fs.common.utils.StringUtils.isNotBlank(imgVO.getRemark())) {
+            imgParam.setRemark(imgVO.getRemark());
+        } else {
+            log.error("PrescribeImgYsyTask 处方id:{},缺失医嘱内容", imgVO.getPrescribeId());
+            imgParam.setRemark("请按照用药说明书服用药品,如有不适,请及时就医!");
+        }
+
+        imgParam.setHistoryAllergic(imgVO.getHistoryAllergic());
+        imgParam.setDiagnose(imgVO.getDiagnose());
+        imgParam.setPrescribeDrug(convertToPrescribeDrugList(drugList));
 
-    //生成带有医生签名的处方图片
-    public void createDoctorSignImg(FsPrescribeDataScrm prescribeDataScrm) {
-        if(prescribeDataScrm != null&& prescribeDataScrm.getPrescribeId() != null) {
-            String prescribeImgUrl = self().prescribeScrmImgYsyTask(prescribeDataScrm.getPrescribeId(),1);//1:生成只有医生签名的处方图片
-            prescribeDataScrm.setPrescribeImgUrl(prescribeImgUrl);
-            fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(prescribeDataScrm);
+        // 签名设置(保底默认全部签名)
+        imgParam.setUrl(imgVO.getDoctorSign());
+        if (signFlag == null || signFlag == 2) {
+            imgParam.setDrugDoctorUrl(imgVO.getDrugDoctorSignUrl());
         }
+
+        imgParam.setDoctorName(imgVO.getDoctorName());
+        imgParam.setAuditDoctor(imgVO.getDrugDoctorName());
+        imgParam.setTelPhone(imgVO.getPatientTel());
+        imgParam.setJobLicenseNumber(imgVO.getPractiseCode());
+        imgParam.setDoctorNo(imgVO.getDoctorCertificate());
+        imgParam.setDoctorTitle(imgVO.getDoctorPosition());
+
+        return prescriptionImageService.generatePrescriptionImage(imgParam);
     }
 
     @Override
-    public String prescribeScrmImgYsyTask(Long prescribeId,Integer signFlag) {
-//        FsPrescribeDataScrm f = fsPrescribeDataScrmMapper.selectFsPrescribeDataScrmByPrescribeId(prescribeId);
-//        Asserts.notNull(f,String.format("处方 %d 未找到!",prescribeId));
-//
-//        if (com.fs.common.utils.StringUtils.isBlank(f.getPrescribeImgUrl())) {
-//            FsPrescribeDrug d = new FsPrescribeDrug();
-//            d.setPrescribeId(f.getPrescribeId());
-//            List<FsPrescribeDrug> list = fsPrescribeDrugMapper.selectFsPrescribeDrugList(d);
-//
-//            if (org.springframework.util.CollectionUtils.isEmpty(list)) {
-//                throw new IllegalArgumentException(String.format("处方单 %d 对应药品为空!",prescribeId));
-//            }
-//            PrescribeXyImgParam o = new PrescribeXyImgParam();
-//            o.setTime(f.getCreateTime());
-//            o.setPrescribeId(f.getPrescribeCode());
-//            o.setPatientName(f.getPatientName());
-//            o.setPatientGender(f.getPatientGender());
-//            o.setPatientAge(f.getPatientAge());
-//            o.setOutpatientId(f.getPrescribeCode());
-//            if (com.fs.common.utils.StringUtils.isNotBlank(f.getRemark())){
-//                o.setRemark(f.getRemark());
-//            } else {
-//                log.error("PrescribeImgYsyTask 处方id:{},缺失医嘱内容", f.getPrescribeId());
-//                o.setRemark("请按照用药说明书服用药品,如有不适,请及时就医!");
-//            }
-//            o.setHistoryAllergic(f.getHistoryAllergic());
-//            o.setDiagnose(f.getDiagnose());
-//            // 在这里添加处方药品列表的值
-//            List<FsPrescribeDrug> PrescribeDrugList=filterNonDrugPrescribe(list);
-//            o.setPrescribeDrug(PrescribeDrugList);
-//            if (signFlag!=null&&signFlag==1){
-//                //医生签名
-//                o.setUrl(f.getUrl());
-//            }else if (signFlag!=null&&signFlag==2){
-//                //医生签名+药师签名
-//                o.setUrl(f.getUrl());
-//                //药师签名
-//                o.setDrugDoctorUrl(f.getDrugDoctorSignUrl());
-//            } else if (signFlag==null){//保底策略 默认
-//                //医生签名
-//                o.setUrl(f.getUrl());
-//                //药师签名
-//                o.setDrugDoctorUrl(f.getDrugDoctorSignUrl());
-//            }
-//            //医生名称
-//            o.setDoctorName(f.getDoctorName());
-//            //审核药师
-//            o.setAuditDoctor(f.getDoctorDrugName());
-//            o.setDispatcher("");
-//            o.setCheckDoctor("");
-//            o.setTelPhone(f.getPatientTel());
-//            FsDoctor fsDoctor = doctorMapper.selectFsDoctorByDoctorId(f.getDoctorId());
-//            Asserts.notNull(fsDoctor,String.format("医生 %s 未找到!",f.getDoctorId()));
-//            //执业证号
-//            o.setJobLicenseNumber(fsDoctor.getPractiseCode());
-//            //医生证号
-//            o.setDoctorNo(fsDoctor.getCertificateCode());
-//            o.setDoctorTitle(fsDoctor.getPosition());
-//
-//            String url = prescriptionImageService.generatePrescriptionImage(o);
-//            FsPrescribe fsPrescribe = new FsPrescribe();
-//            fsPrescribe.setPrescribeImgUrl(url);
-//            fsPrescribe.setPrescribeId(f.getPrescribeId());
-//            fsPrescribeMapper.updateFsPrescribe(fsPrescribe);
-//            f.setPrescribeImgUrl(url);
-//
-//        } else {
-//            log.info("处方 {} 对应处方单已经被生成!",prescribeId);
-//        }
-//        return f.getPrescribeImgUrl();
-        return null;
+    public void clearPrescribeUrl(Long prescribeId) {
+        fsPrescribeDataScrmMapper.clearPrescribeUrl(prescribeId);
     }
 
-    @Override
-    public List<FsPrescribeDataScrmVO> pendingStorePrescribeList(FsPrescribeDataDrugDoctorQueryDto queryDto) {
-        List<FsPrescribeDataScrmVO> list=fsPrescribeDataScrmMapper.pendingStorePrescribeList(queryDto);
-        if (CollectionUtils.isEmpty(list)){
+    // ==================== 私有辅助方法 ====================
+
+    /**
+     * 统一更新客户信息表流程状态
+     */
+    private void updateCustomerStatus(Long prescribeId, Integer status) {
+        companyCustomerMapper.updateProcessStatusByPrescribeId(prescribeId, status);
+    }
+
+    /**
+     * 提交异步处方图片生成任务
+     */
+    private void submitPrescribeImageTask(Long prescribeId, Integer signFlag) {
+        PrescribeScrmTaskRecord record = new PrescribeScrmTaskRecord();
+        record.setPrescribeId(prescribeId);
+        record.setCreateTime(DateUtils.getNowDate());
+        record.setExecuteStatus(0);
+        record.setRetryCount(0);
+        record.setSignFlag(signFlag);
+        scrmTaskRecordMapper.insertPrescribeScrmTaskRecord(record);
+    }
+
+    /**
+     * 清除处方图片
+     */
+    private void clearPrescriptionImage(Long prescribeId) {
+        self().clearPrescribeUrl(prescribeId);
+    }
+
+    // ==================== 药品过滤与转换 ====================
+    /**
+     * 根据产品最新状态过滤处方单药品列表。
+     * <p>
+     * 该方法的过滤规则如下:
+     * - 对于 productId 非空的处方药,使用其对应产品表(FsStoreProduct)中的 isDrug 状态进行判断,只保留 isDrug=1 的项。
+     * - 对于 productId 为空的处方药,直接使用其自身的 isDrug 状态进行判断,只保留 isDrug=1 的项。
+     * </p>
+     *
+     * @param prescribeDrugs 待过滤的处方单药品列表。如果为 null 或空,则直接返回空列表。
+     * @return 一个符合上述规则的新列表。
+     */
+    public List<FsPrescribeDataScrmDrug> filterNonDrugScrmPrescribe(List<FsPrescribeDataScrmDrug> prescribeDrugs) {
+        if (CollectionUtils.isEmpty(prescribeDrugs)) {
             return Collections.emptyList();
         }
-        return list;
+
+        Set<Long> productIds = prescribeDrugs.stream()
+                .map(FsPrescribeDataScrmDrug::getProductId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        List<FsStoreProductScrm> storeProductIns = Collections.emptyList();
+        if (!productIds.isEmpty()) {
+            storeProductIns = fsStoreProductScrmMapper.getStoreProductInProductIds(new ArrayList<>(productIds));
+            if (storeProductIns.isEmpty()) {
+                log.error("查询产品id列表:{}查询产品信息为空!", productIds);
+            }
+        }
+
+        Map<Long, FsStoreProductScrm> storeProductMap = storeProductIns.stream()
+                .collect(Collectors.toMap(FsStoreProductScrm::getProductId, Function.identity()));
+
+        List<FsPrescribeDataScrmDrug> filteredDrugs = new ArrayList<>();
+        for (FsPrescribeDataScrmDrug drug : prescribeDrugs) {
+            boolean shouldKeep = false;
+            if (drug.getProductId() != null) {
+                FsStoreProductScrm product = storeProductMap.get(drug.getProductId());
+                if (product != null) {
+                    shouldKeep = Integer.valueOf(1).equals(product.getIsDrug());
+                } else {
+                    log.warn("药品 '{}' (ID: {}) 在产品表中未找到对应记录,将被过滤。", drug.getDrugName(), drug.getProductId());
+                }
+            } else {
+                shouldKeep = Integer.valueOf(1).equals(drug.getIsDrug());
+            }
+
+            if (shouldKeep) {
+                filteredDrugs.add(drug);
+            }
+        }
+        return filteredDrugs;
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int drugDoctorExecuteScrmPrescribe(FsPrescribeDataDrugDoctorUpdateDto updateDto) {
-        FsPrescribeDataScrm updatePrescribe=new FsPrescribeDataScrm();
-        BeanCopyUtils.copy(updateDto,updatePrescribe);
-        if (updateDto.getStatus()==1){
-            //TODO 生成具有医生、药师签名的处方图片
-        }else if (updateDto.getStatus()==2){
-            //TODO 删除只有医生签名的处方图片
+    /**
+     * 转换处方单药品列表
+     * */
+    private List<FsPrescribeDrug> convertToPrescribeDrugList(List<FsPrescribeDataScrmDrug> sourceList) {
+        if (sourceList == null || sourceList.isEmpty()) {
+            return new ArrayList<>();
         }
-        return fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(updatePrescribe);
+        return sourceList.stream()
+                .map(source -> {
+                    FsPrescribeDrug target = new FsPrescribeDrug();
+                    target.setDrugId(source.getDrugId());
+                    target.setPrescribeId(source.getPrescribeId());
+                    target.setDrugName(source.getDrugName());
+                    target.setDrugSpec(source.getDrugSpec());
+                    target.setUsageMethod(source.getUsageMethod());
+                    target.setUsageFrequencyUnit(source.getUsageFrequencyUnit());
+                    target.setUsagePerUseCount(source.getUsagePerUseCount());
+                    target.setUsagePerUseUnit(source.getUsagePerUseUnit());
+                    target.setUsageDays(source.getUsageDays());
+                    target.setDrugPrice(source.getDrugPrice());
+                    target.setDrugUnit(source.getDrugUnit());
+                    target.setInstructions(source.getInstructions());
+                    target.setProductId(source.getProductId());
+                    target.setDrugImgUrl(source.getDrugImgUrl());
+                    target.setProductAttrValueId(source.getProductAttrValueId());
+                    target.setRemark(source.getRemark());
+                    target.setDrugType(source.getDrugType());
+                    target.setIsDrug(source.getIsDrug());
+                    target.setDrugNum(source.getDrugNum());
+                    return target;
+                })
+                .collect(Collectors.toList());
     }
 }

+ 13 - 13
fs-service/src/main/java/com/fs/his/service/impl/PrescribeScrmTaskRecordServiceImpl.java

@@ -8,7 +8,7 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 
 /**
- * 处方单生成定时任务中间表Service业务层处理
+ * 商城处方单生成定时任务中间表Service业务层处理
  * 
  * @author ruoyi
  * @date 2026-06-12
@@ -19,10 +19,10 @@ public class PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRec
     private PrescribeScrmTaskRecordMapper prescribeScrmTaskRecordMapper;
 
     /**
-     * 查询处方单生成定时任务中间表
+     * 查询商城处方单生成定时任务中间表
      * 
      * @param id 主键ID
-     * @return 处方单生成定时任务中间表
+     * @return 商城处方单生成定时任务中间表
      */
     @Override
     public PrescribeScrmTaskRecord selectPrescribeScrmTaskRecordById(Long id) {
@@ -30,10 +30,10 @@ public class PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRec
     }
 
     /**
-     * 查询处方单生成定时任务中间表列表
+     * 查询商城处方单生成定时任务中间表列表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
-     * @return 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
+     * @return 商城处方单生成定时任务中间表
      */
     @Override
     public List<PrescribeScrmTaskRecord> selectPrescribeScrmTaskRecordList(PrescribeScrmTaskRecord prescribeScrmTaskRecord) {
@@ -41,9 +41,9 @@ public class PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRec
     }
 
     /**
-     * 新增处方单生成定时任务中间表
+     * 新增商城处方单生成定时任务中间表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
      * @return 结果
      */
     @Override
@@ -52,9 +52,9 @@ public class PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRec
     }
 
     /**
-     * 修改处方单生成定时任务中间表
+     * 修改商城处方单生成定时任务中间表
      * 
-     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @param prescribeScrmTaskRecord 商城处方单生成定时任务中间表
      * @return 结果
      */
     @Override
@@ -63,9 +63,9 @@ public class PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRec
     }
 
     /**
-     * 批量删除处方单生成定时任务中间表
+     * 批量删除商城处方单生成定时任务中间表
      * 
-     * @param ids 需要删除的处方单生成定时任务中间表主键
+     * @param ids 需要删除的商城处方单生成定时任务中间表主键
      * @return 结果
      */
     @Override
@@ -74,7 +74,7 @@ public class PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRec
     }
 
     /**
-     * 删除处方单生成定时任务中间表信息
+     * 删除商城处方单生成定时任务中间表信息
      * 
      * @param id 主键ID
      * @return 结果

+ 30 - 0
fs-service/src/main/java/com/fs/his/vo/FsPrescribeDataScrmImgVO.java

@@ -0,0 +1,30 @@
+package com.fs.his.vo;
+
+import com.fs.his.domain.FsPrescribeDataScrm;
+import lombok.Data;
+
+
+@Data
+public class FsPrescribeDataScrmImgVO extends FsPrescribeDataScrm {
+    /** 医生姓名 */
+    private String doctorName;
+
+    /** 医生签名 */
+    private String doctorSign;
+
+    /** 医生执业编号 */
+    private String practiseCode;
+
+    /** 医生职称 */
+    private String doctorPosition;
+
+    /** 医生证号 */
+    private String doctorCertificate;
+
+    /** 药师姓名 */
+    private String drugDoctorName;
+
+    /** 药师签名 */
+    private String drugDoctorSign;
+
+}

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java

@@ -1,7 +1,9 @@
 package com.fs.hisStore.mapper;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import com.fs.his.domain.FsStoreProduct;
 import com.fs.his.param.FsStoreProductListSParam;
 import com.fs.his.vo.FsStoreProductListSVO;
 import com.fs.his.vo.OptionsVO;

+ 5 - 0
fs-service/src/main/java/com/fs/qw/mapper/FsCompanyCustomerMapper.java

@@ -76,4 +76,9 @@ public interface FsCompanyCustomerMapper {
      *  查询客户信息并加锁
      * */
     FsCompanyCustomer selectByIdForUpdate(Long id);
+
+    /**
+     * 根据关联处方id更新客户信息表的处方进度状态
+     * */
+    int updateProcessStatusByPrescribeId(Long prescribeId, Integer processStatus);
 }

+ 128 - 0
fs-service/src/main/resources/mapper/his/FsPrescibeRecordDataScrmMapper.xml

@@ -0,0 +1,128 @@
+<?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.his.mapper.FsPrescibeRecordDataScrmMapper">
+
+    <resultMap type="com.fs.his.domain.FsPrescibeRecordDataScrm" id="FsPrescibeRecordDataScrmResult">
+        <result property="id"                    column="id"                     />
+        <result property="prescribeImgUrl"       column="prescribe_img_url"      />
+        <result property="prescribeImgStoreUrl"  column="prescribe_img_store_url"/>
+        <result property="doctorId"              column="doctor_id"              />
+        <result property="drugDoctorId"          column="drug_doctor_id"         />
+        <result property="doctorName"            column="doctor_name"            />
+        <result property="drugDoctorName"        column="drug_doctor_name"       />
+        <result property="status"                column="status"                 />
+        <result property="auditReason"           column="audit_reason"           />
+        <result property="createTime"            column="create_time"            />
+        <result property="updateTime"            column="update_time"            />
+        <result property="prescribeId"           column="prescribe_id"           />
+    </resultMap>
+
+    <sql id="selectFsPrescibeRecordDataScrmVo">
+        select id, prescribe_img_url, prescribe_img_store_url, doctor_id, drug_doctor_id,
+               doctor_name, drug_doctor_name, status, audit_reason, create_time, update_time, prescribe_id
+        from fs_prescibe_record_data_scrm
+    </sql>
+
+    <select id="selectFsPrescibeRecordDataScrmList" parameterType="FsPrescibeRecordDataScrm" resultMap="FsPrescibeRecordDataScrmResult">
+        <include refid="selectFsPrescibeRecordDataScrmVo"/>
+        <where>
+            <if test="prescribeImgUrl != null and prescribeImgUrl != ''">
+                and prescribe_img_url like concat('%', #{prescribeImgUrl}, '%')
+            </if>
+            <if test="prescribeImgStoreUrl != null and prescribeImgStoreUrl != ''">
+                and prescribe_img_store_url like concat('%', #{prescribeImgStoreUrl}, '%')
+            </if>
+            <if test="doctorId != null">
+                and doctor_id = #{doctorId}
+            </if>
+            <if test="drugDoctorId != null">
+                and drug_doctor_id = #{drugDoctorId}
+            </if>
+            <if test="doctorName != null and doctorName != ''">
+                and doctor_name like concat('%', #{doctorName}, '%')
+            </if>
+            <if test="drugDoctorName != null and drugDoctorName != ''">
+                and drug_doctor_name like concat('%', #{drugDoctorName}, '%')
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="auditReason != null and auditReason != ''">
+                and audit_reason like concat('%', #{auditReason}, '%')
+            </if>
+            <if test="prescribeId != null">
+                and prescribe_id = #{prescribeId}
+            </if>
+            <if test="createTime != null">
+                and date_format(create_time,'%Y%m%d') = date_format(#{createTime},'%Y%m%d')
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+
+    <select id="selectFsPrescibeRecordDataScrmById" parameterType="Long" resultMap="FsPrescibeRecordDataScrmResult">
+        <include refid="selectFsPrescibeRecordDataScrmVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertFsPrescibeRecordDataScrm" parameterType="FsPrescibeRecordDataScrm" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_prescibe_record_data_scrm
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="prescribeImgUrl != null">prescribe_img_url,</if>
+            <if test="prescribeImgStoreUrl != null">prescribe_img_store_url,</if>
+            <if test="doctorId != null">doctor_id,</if>
+            <if test="drugDoctorId != null">drug_doctor_id,</if>
+            <if test="doctorName != null">doctor_name,</if>
+            <if test="drugDoctorName != null">drug_doctor_name,</if>
+            <if test="status != null">status,</if>
+            <if test="auditReason != null">audit_reason,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="prescribeId != null">prescribe_id,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="prescribeImgUrl != null">#{prescribeImgUrl},</if>
+            <if test="prescribeImgStoreUrl != null">#{prescribeImgStoreUrl},</if>
+            <if test="doctorId != null">#{doctorId},</if>
+            <if test="drugDoctorId != null">#{drugDoctorId},</if>
+            <if test="doctorName != null">#{doctorName},</if>
+            <if test="drugDoctorName != null">#{drugDoctorName},</if>
+            <if test="status != null">#{status},</if>
+            <if test="auditReason != null">#{auditReason},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="prescribeId != null">#{prescribeId},</if>
+        </trim>
+    </insert>
+
+    <update id="updateFsPrescibeRecordDataScrm" parameterType="FsPrescibeRecordDataScrm">
+        update fs_prescibe_record_data_scrm
+        <set>
+            <if test="prescribeImgUrl != null">prescribe_img_url = #{prescribeImgUrl},</if>
+            <if test="prescribeImgStoreUrl != null">prescribe_img_store_url = #{prescribeImgStoreUrl},</if>
+            <if test="doctorId != null">doctor_id = #{doctorId},</if>
+            <if test="drugDoctorId != null">drug_doctor_id = #{drugDoctorId},</if>
+            <if test="doctorName != null">doctor_name = #{doctorName},</if>
+            <if test="drugDoctorName != null">drug_doctor_name = #{drugDoctorName},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="auditReason != null">audit_reason = #{auditReason},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="prescribeId != null">prescribe_id = #{prescribeId},</if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsPrescibeRecordDataScrmById" parameterType="Long">
+        delete from fs_prescibe_record_data_scrm where id = #{id}
+    </delete>
+
+    <delete id="deleteFsPrescibeRecordDataScrmByIds" parameterType="Long">
+        delete from fs_prescibe_record_data_scrm where id in
+        <foreach collection="array" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 21 - 0
fs-service/src/main/resources/mapper/his/FsPrescribeDataScrmMapper.xml

@@ -143,6 +143,21 @@
         </where>
         order by create_time desc
     </select>
+    <select id="selectFsPrescribeDataScrmImgVOByPrescribeId"
+            resultType="com.fs.his.vo.FsPrescribeDataScrmImgVO">
+        select fpds.*,
+               doctor.doctor_name      as doctorName,
+               doctor.sign_url         as doctorSign,
+               doctor.practise_code    as practiseCode,
+               doctor.position         as doctorPosition,
+               doctor.certificate_code as certificateCode,
+               drug_fd.doctor_name     as drugDoctorName,
+               drug_fd.sign_url        as drugDoctorSign
+        from fs_prescribe_data_scrm fpds
+                 left join fs_doctor doctor on fpds.doctor_id = doctor.doctor_id
+                 left join fs_doctor drug_fd on fpds.drug_doctor_id = drug_fd.doctor_id
+                 left join fs_patient fp on fpds.patient_id = fp.patient_id
+    </select>
 
     <insert id="insertFsPrescribeDataScrm" parameterType="FsPrescribeDataScrm" useGeneratedKeys="true" keyProperty="prescribeId">
         insert into fs_prescribe_data_scrm
@@ -322,4 +337,10 @@
             #{prescribeId}
         </foreach>
     </delete>
+
+    <update id="clearPrescribeUrl">
+        UPDATE fs_prescribe_data_scrm
+        SET prescribe_img_url = NULL, prescribe_img_store_url = NULL
+        WHERE prescribe_id = 1;
+    </update>
 </mapper>

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

@@ -94,7 +94,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                p.unit_price,p.batch_number,p.mah,p.mah_address,p.manufacturer,p.manufacturer_address,p.indications,p.dosage,
                p.adverse_reactions,p.contraindications,p.precautions,p.is_audit,p.store_id,p.erp_type,p.is_gift
         from fs_store_product_scrm p
-        select product_id, video, image, slider_image, product_name, product_info, keyword, bar_code, cate_id, price, vip_price, ot_price, agent_price, postage, unit_name, sort, sales, stock, is_show, is_hot, is_benefit, is_best, is_new, description, create_time, update_time, is_postage, is_del, give_integral, cost, is_good, browse, code_path, temp_id, spec_type, is_integral, integral, product_type, prescribe_code, prescribe_spec, prescribe_factory, prescribe_name, is_display, tui_cate_id, company_ids, store_id, 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 from fs_store_product_scrm
     </sql>
 
     <select id="selectFsStoreProductByProductId" parameterType="Long" resultMap="FsStoreProductResult">

+ 6 - 0
fs-service/src/main/resources/mapper/qw/FsCompanyCustomerMapper.xml

@@ -378,4 +378,10 @@
         </foreach>
     </update>
 
+    <update id="updateProcessStatusByPrescribeId">
+        update fs_company_customer
+        set process_status = #{processStatus}
+        where prescribe_id = #{prescribeId}
+    </update>
+
 </mapper>