Explorar el Código

商城处方任务表+商城处方药品记录表

cgp hace 14 horas
padre
commit
23b9a445ed

+ 3 - 0
fs-company/src/main/java/com/fs/company/controller/handwrite/HandwriteCollectionController.java

@@ -43,6 +43,9 @@ public class HandwriteCollectionController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(HandwriteCollection handwriteCollection)
     {
+        //获取当前登录用户
+        Long currentUserId = SecurityUtils.getLoginUser().getUser().getUserId();
+        handwriteCollection.setCompanyUserId(currentUserId);
         startPage();
         List<HandwriteCollection> list = handwriteCollectionService.selectHandwriteCollectionList(handwriteCollection);
         for (HandwriteCollection item : list) {

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

@@ -0,0 +1,95 @@
+package com.fs.his.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 商城处方药品表实体类
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+@Data
+@ApiModel(description = "商城处方药品表")
+public class FsPrescribeDataScrmDrug implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @ApiModelProperty(value = "ID")
+    private Long drugId;
+
+    /** 处方ID */
+    @ApiModelProperty(value = "处方ID")
+    private Long prescribeId;
+
+    /** 药品名称 */
+    @ApiModelProperty(value = "药品名称")
+    private String drugName;
+
+    /** 规格 */
+    @ApiModelProperty(value = "规格")
+    private String drugSpec;
+
+    /** 使用方法 */
+    @ApiModelProperty(value = "使用方法")
+    private String usageMethod;
+
+    /** 药品频次 */
+    @ApiModelProperty(value = "药品频次")
+    private String usageFrequencyUnit;
+
+    /** 每次用药数量 */
+    @ApiModelProperty(value = "每次用药数量")
+    private String usagePerUseCount;
+
+    /** 每次用药单位 */
+    @ApiModelProperty(value = "每次用药单位")
+    private String usagePerUseUnit;
+
+    /** 天数 */
+    @ApiModelProperty(value = "天数")
+    private String usageDays;
+
+    /** 药品价格 */
+    @ApiModelProperty(value = "药品价格")
+    private BigDecimal drugPrice;
+
+    /** 药品数量 */
+    @ApiModelProperty(value = "药品数量")
+    private Integer drugNum;
+
+    /** 药品数量单位 */
+    @ApiModelProperty(value = "药品数量单位")
+    private String drugUnit;
+
+    /** 药品说明书 */
+    @ApiModelProperty(value = "药品说明书")
+    private String instructions;
+
+    /** 产品ID */
+    @ApiModelProperty(value = "产品ID")
+    private Long productId;
+
+    /** 药品图片 */
+    @ApiModelProperty(value = "药品图片")
+    private String drugImgUrl;
+
+    /** 规格ID */
+    @ApiModelProperty(value = "规格ID")
+    private Long productAttrValueId;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    /** 药品类型:1西药 2中药 */
+    @ApiModelProperty(value = "药品类型:1西药 2中药")
+    private Integer drugType;
+
+    /** 是否药品(1:是,0:不是) */
+    @ApiModelProperty(value = "是否药品(1:是,0:不是)")
+    private Integer isDrug;
+}

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

@@ -0,0 +1,77 @@
+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 PrescribeScrmTaskRecord implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ApiModelProperty(value = "主键ID")
+    private Long id;
+
+    /** 处方id */
+    @ApiModelProperty(value = "处方id")
+    private Long prescribeId;
+
+    /** 处方URL */
+    @ApiModelProperty(value = "处方URL")
+    private String prescribeUrl;
+
+    /** 当前重试次数 */
+    @ApiModelProperty(value = "当前重试次数")
+    private Integer retryCount;
+
+    /** 执行状态:0-待执行,1-执行中,2-成功,3-失败 */
+    @ApiModelProperty(value = "执行状态:0-待执行,1-执行中,2-成功,3-失败")
+    private Integer executeStatus;
+
+    /** 失败消息 */
+    @ApiModelProperty(value = "失败消息")
+    private String errorMessage;
+
+    /** 创建时间 */
+    @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;
+
+    /** 首次执行时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "首次执行时间")
+    private Date firstExecuteTime;
+
+    /** 最后执行时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "最后执行时间")
+    private Date lastExecuteTime;
+
+    /** 成功时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "成功时间")
+    private Date successTime;
+
+    /** 备注信息 */
+    @ApiModelProperty(value = "备注信息")
+    private String remark;
+
+    /** 签名标志:1-医生签名,2-医生签名+药师签名 */
+    @ApiModelProperty(value = "签名标志:1-医生签名,2-医生签名+药师签名")
+    private Integer signFlag;
+}

+ 4 - 1
fs-service/src/main/java/com/fs/his/dto/FsPrescribeDataDoctorUpdateDto.java

@@ -7,7 +7,7 @@ public class FsPrescribeDataDoctorUpdateDto {
     /** 处方id */
     private Long prescribeId;
 
-    //处方状态 0待医生开方 1确认开方 -1医生拒方 */
+    /** 处方状态 0待医生开方 1确认开方 -1医生拒方 */
     private Integer doctorConfirm;
 
     /** 处方类型 1西药 2中药 */
@@ -16,6 +16,9 @@ public class FsPrescribeDataDoctorUpdateDto {
     /** 诊断 */
     private String diagnose;
 
+    /** 拒方原因 */
+    private String auditReason;
+
     private String remark;
 
     /** 医生id*/

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

@@ -0,0 +1,61 @@
+package com.fs.his.mapper;
+
+import com.fs.his.domain.FsPrescribeDataScrmDrug;
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
+/**
+ * 处方药品表Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2026-06-12
+ */
+public interface FsPrescribeDataScrmDrugMapper {
+    /**
+     * 查询处方药品表
+     * 
+     * @param drugId 药品ID
+     * @return 处方药品表
+     */
+    public FsPrescribeDataScrmDrug selectFsPrescribeDataScrmDrugById(Long drugId);
+
+    /**
+     * 查询处方药品表列表
+     * 
+     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @return 处方药品表集合
+     */
+    public List<FsPrescribeDataScrmDrug> selectFsPrescribeDataScrmDrugList(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
+
+    /**
+     * 新增处方药品表
+     * 
+     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @return 结果
+     */
+    public int insertFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
+
+    /**
+     * 修改处方药品表
+     * 
+     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @return 结果
+     */
+    public int updateFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug);
+
+    /**
+     * 删除处方药品表
+     * 
+     * @param drugId 药品ID
+     * @return 结果
+     */
+    public int deleteFsPrescribeDataScrmDrugById(Long drugId);
+
+    /**
+     * 批量删除处方药品表
+     * 
+     * @param drugIds 需要删除的药品ID数组
+     * @return 结果
+     */
+    public int deleteFsPrescribeDataScrmDrugByIds(Long[] drugIds);
+}

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

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

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

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

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/IFsPrescribeDataScrmService.java

@@ -78,6 +78,11 @@ public interface IFsPrescribeDataScrmService
      * */
     int doctorExecuteScrmPrescribe(FsPrescribeDataDoctorUpdateDto updateDto);
 
+    /**
+     * 生成商城处方图片
+     */
+    String prescribeScrmImgYsyTask(Long prescribeId,Integer signFlag);
+
     /**
      * 药师---查询待审核处方列表
      * @param queryDto

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

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

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

@@ -0,0 +1,86 @@
+package com.fs.his.service.impl;
+
+import com.fs.his.domain.FsPrescribeDataScrmDrug;
+import com.fs.his.mapper.FsPrescribeDataScrmDrugMapper;
+import com.fs.his.service.IFsPrescribeDataScrmDrugService;
+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 FsPrescribeDataScrmDrugServiceImpl implements IFsPrescribeDataScrmDrugService {
+    @Autowired
+    private FsPrescribeDataScrmDrugMapper fsPrescribeDataScrmDrugMapper;
+
+    /**
+     * 查询处方药品表
+     * 
+     * @param drugId 药品ID
+     * @return 处方药品表
+     */
+    @Override
+    public FsPrescribeDataScrmDrug selectFsPrescribeDataScrmDrugById(Long drugId) {
+        return fsPrescribeDataScrmDrugMapper.selectFsPrescribeDataScrmDrugById(drugId);
+    }
+
+    /**
+     * 查询处方药品表列表
+     * 
+     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @return 处方药品表
+     */
+    @Override
+    public List<FsPrescribeDataScrmDrug> selectFsPrescribeDataScrmDrugList(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug) {
+        return fsPrescribeDataScrmDrugMapper.selectFsPrescribeDataScrmDrugList(fsPrescribeDataScrmDrug);
+    }
+
+    /**
+     * 新增处方药品表
+     * 
+     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @return 结果
+     */
+    @Override
+    public int insertFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug) {
+        return fsPrescribeDataScrmDrugMapper.insertFsPrescribeDataScrmDrug(fsPrescribeDataScrmDrug);
+    }
+
+    /**
+     * 修改处方药品表
+     * 
+     * @param fsPrescribeDataScrmDrug 处方药品表
+     * @return 结果
+     */
+    @Override
+    public int updateFsPrescribeDataScrmDrug(FsPrescribeDataScrmDrug fsPrescribeDataScrmDrug) {
+        return fsPrescribeDataScrmDrugMapper.updateFsPrescribeDataScrmDrug(fsPrescribeDataScrmDrug);
+    }
+
+    /**
+     * 批量删除处方药品表
+     * 
+     * @param drugIds 需要删除的处方药品表主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsPrescribeDataScrmDrugByIds(Long[] drugIds) {
+        return fsPrescribeDataScrmDrugMapper.deleteFsPrescribeDataScrmDrugByIds(drugIds);
+    }
+
+    /**
+     * 删除处方药品表信息
+     * 
+     * @param drugId 药品ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsPrescribeDataScrmDrugById(Long drugId) {
+        return fsPrescribeDataScrmDrugMapper.deleteFsPrescribeDataScrmDrugById(drugId);
+    }
+}

+ 133 - 2
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeDataScrmServiceImpl.java

@@ -1,17 +1,27 @@
 package com.fs.his.service.impl;
 
 import com.fs.common.BeanCopyUtils;
+import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
-import com.fs.his.domain.FsPrescribeDataScrm;
+import com.fs.his.domain.*;
 import com.fs.his.dto.FsPrescribeDataDoctorQueryDto;
 import com.fs.his.dto.FsPrescribeDataDoctorUpdateDto;
 import com.fs.his.dto.FsPrescribeDataDrugDoctorQueryDto;
 import com.fs.his.dto.FsPrescribeDataDrugDoctorUpdateDto;
+import com.fs.his.mapper.FsPrescribeDataScrmDrugMapper;
 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.qw.mapper.FsCompanyCustomerMapper;
 import com.fs.qw.vo.FsPrescribeDataScrmVO;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.util.Asserts;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -24,12 +34,28 @@ import java.util.List;
  * @author ruoyi
  * @date 2026-06-11
  */
+@Slf4j
 @Service
 public class FsPrescribeDataScrmServiceImpl implements IFsPrescribeDataScrmService
 {
     @Autowired
     private FsPrescribeDataScrmMapper fsPrescribeDataScrmMapper;
 
+    @Autowired
+    private PrescribeScrmTaskRecordMapper scrmTaskRecordMapper;
+
+    @Autowired
+    private FsCompanyCustomerMapper companyCustomerMapper;
+
+    @Autowired
+    private FsPrescribeDataScrmDrugMapper dataScrmDrugMapper;
+
+    @Autowired
+    private ApplicationContext applicationContext;
+    private IFsPrescribeDataScrmService self() {
+        return applicationContext.getBean(IFsPrescribeDataScrmService.class);
+    }
+
     /**
      * 查询处方表(SCRM)
      *
@@ -117,10 +143,115 @@ public class FsPrescribeDataScrmServiceImpl implements IFsPrescribeDataScrmServi
     public int doctorExecuteScrmPrescribe(FsPrescribeDataDoctorUpdateDto updateDto) {
         FsPrescribeDataScrm updatePrescribe=new FsPrescribeDataScrm();
         BeanCopyUtils.copy(updateDto,updatePrescribe);
-        //TODO 删除只有医生签名的处方图片
+        //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())){
+                throw new CustomException("拒方原因不能为空");
+            }
+            //修改客户信息表状态为医生拒方
+            FsCompanyCustomer fsCompanyCustomer=new FsCompanyCustomer();
+            fsCompanyCustomer.setPrescribeId(updateDto.getPrescribeId());
+            fsCompanyCustomer.setProcessStatus(5);//医生拒方
+            companyCustomerMapper.updateFsCompanyCustomer(fsCompanyCustomer);
+        }
         return fsPrescribeDataScrmMapper.updateFsPrescribeDataScrm(updatePrescribe);
     }
 
+
+    //生成带有医生签名的处方图片
+    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);
+        }
+    }
+
+    @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;
+    }
+
     @Override
     public List<FsPrescribeDataScrmVO> pendingStorePrescribeList(FsPrescribeDataDrugDoctorQueryDto queryDto) {
         List<FsPrescribeDataScrmVO> list=fsPrescribeDataScrmMapper.pendingStorePrescribeList(queryDto);

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

@@ -0,0 +1,86 @@
+package com.fs.his.service.impl;
+
+import com.fs.his.domain.PrescribeScrmTaskRecord;
+import com.fs.his.mapper.PrescribeScrmTaskRecordMapper;
+import com.fs.his.service.IPrescribeScrmTaskRecordService;
+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 PrescribeScrmTaskRecordServiceImpl implements IPrescribeScrmTaskRecordService {
+    @Autowired
+    private PrescribeScrmTaskRecordMapper prescribeScrmTaskRecordMapper;
+
+    /**
+     * 查询处方单生成定时任务中间表
+     * 
+     * @param id 主键ID
+     * @return 处方单生成定时任务中间表
+     */
+    @Override
+    public PrescribeScrmTaskRecord selectPrescribeScrmTaskRecordById(Long id) {
+        return prescribeScrmTaskRecordMapper.selectPrescribeScrmTaskRecordById(id);
+    }
+
+    /**
+     * 查询处方单生成定时任务中间表列表
+     * 
+     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @return 处方单生成定时任务中间表
+     */
+    @Override
+    public List<PrescribeScrmTaskRecord> selectPrescribeScrmTaskRecordList(PrescribeScrmTaskRecord prescribeScrmTaskRecord) {
+        return prescribeScrmTaskRecordMapper.selectPrescribeScrmTaskRecordList(prescribeScrmTaskRecord);
+    }
+
+    /**
+     * 新增处方单生成定时任务中间表
+     * 
+     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @return 结果
+     */
+    @Override
+    public int insertPrescribeScrmTaskRecord(PrescribeScrmTaskRecord prescribeScrmTaskRecord) {
+        return prescribeScrmTaskRecordMapper.insertPrescribeScrmTaskRecord(prescribeScrmTaskRecord);
+    }
+
+    /**
+     * 修改处方单生成定时任务中间表
+     * 
+     * @param prescribeScrmTaskRecord 处方单生成定时任务中间表
+     * @return 结果
+     */
+    @Override
+    public int updatePrescribeScrmTaskRecord(PrescribeScrmTaskRecord prescribeScrmTaskRecord) {
+        return prescribeScrmTaskRecordMapper.updatePrescribeScrmTaskRecord(prescribeScrmTaskRecord);
+    }
+
+    /**
+     * 批量删除处方单生成定时任务中间表
+     * 
+     * @param ids 需要删除的处方单生成定时任务中间表主键
+     * @return 结果
+     */
+    @Override
+    public int deletePrescribeScrmTaskRecordByIds(Long[] ids) {
+        return prescribeScrmTaskRecordMapper.deletePrescribeScrmTaskRecordByIds(ids);
+    }
+
+    /**
+     * 删除处方单生成定时任务中间表信息
+     * 
+     * @param id 主键ID
+     * @return 结果
+     */
+    @Override
+    public int deletePrescribeScrmTaskRecordById(Long id) {
+        return prescribeScrmTaskRecordMapper.deletePrescribeScrmTaskRecordById(id);
+    }
+}

+ 1 - 0
fs-service/src/main/resources/mapper/handwrite/HandwriteCollectionMapper.xml

@@ -34,6 +34,7 @@
             <if test="companyUserName != null and companyUserName != ''"> and cu.nick_name like concat('%', #{companyUserName}, '%')</if>
             <if test="orderCode != null and orderCode != ''"> and hc.order_code = #{orderCode}</if>
             <if test="billImgUrl != null and billImgUrl != ''"> and hc.bill_img_url = #{billImgUrl}</if>
+            <if test="companyUserId != null"> and hc.company_user_id = #{companyUserId}</if>
             <!-- 创建时间范围过滤 -->
             <if test="startDate != null">
                 and hc.create_time &gt;= #{startDate}

+ 179 - 0
fs-service/src/main/resources/mapper/his/FsPrescribeDataScrmDrugMapper.xml

@@ -0,0 +1,179 @@
+<?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.FsPrescribeDataScrmDrugMapper">
+
+    <resultMap type="com.fs.his.domain.FsPrescribeDataScrmDrug" id="FsPrescribeDataScrmDrugResult">
+        <result property="drugId"               column="drug_id"                />
+        <result property="prescribeId"          column="prescribe_id"           />
+        <result property="drugName"             column="drug_name"              />
+        <result property="drugSpec"             column="drug_spec"              />
+        <result property="usageMethod"          column="usage_method"           />
+        <result property="usageFrequencyUnit"   column="usage_frequency_unit"   />
+        <result property="usagePerUseCount"     column="usage_per_use_count"    />
+        <result property="usagePerUseUnit"      column="usage_per_use_unit"     />
+        <result property="usageDays"            column="usage_days"             />
+        <result property="drugPrice"            column="drug_price"             />
+        <result property="drugNum"              column="drug_num"               />
+        <result property="drugUnit"             column="drug_unit"              />
+        <result property="instructions"         column="instructions"           />
+        <result property="productId"            column="product_id"             />
+        <result property="drugImgUrl"           column="drug_img_url"           />
+        <result property="productAttrValueId"   column="product_attr_value_id"  />
+        <result property="remark"               column="remark"                 />
+        <result property="drugType"             column="drug_type"              />
+        <result property="isDrug"               column="is_drug"                />
+    </resultMap>
+
+    <sql id="selectFsPrescribeDataScrmDrugVo">
+        select drug_id, prescribe_id, drug_name, drug_spec, usage_method, usage_frequency_unit,
+               usage_per_use_count, usage_per_use_unit, usage_days, drug_price, drug_num,
+               drug_unit, instructions, product_id, drug_img_url, product_attr_value_id,
+               remark, drug_type, is_drug
+        from fs_prescribe_data_scrm_drug
+    </sql>
+
+    <select id="selectFsPrescribeDataScrmDrugList" parameterType="FsPrescribeDataScrmDrug" resultMap="FsPrescribeDataScrmDrugResult">
+        <include refid="selectFsPrescribeDataScrmDrugVo"/>
+        <where>
+            <if test="prescribeId != null">
+                and prescribe_id = #{prescribeId}
+            </if>
+            <if test="drugName != null and drugName != ''">
+                and drug_name like concat('%', #{drugName}, '%')
+            </if>
+            <if test="drugSpec != null and drugSpec != ''">
+                and drug_spec like concat('%', #{drugSpec}, '%')
+            </if>
+            <if test="usageMethod != null and usageMethod != ''">
+                and usage_method like concat('%', #{usageMethod}, '%')
+            </if>
+            <if test="usageFrequencyUnit != null and usageFrequencyUnit != ''">
+                and usage_frequency_unit = #{usageFrequencyUnit}
+            </if>
+            <if test="usagePerUseCount != null and usagePerUseCount != ''">
+                and usage_per_use_count = #{usagePerUseCount}
+            </if>
+            <if test="usagePerUseUnit != null and usagePerUseUnit != ''">
+                and usage_per_use_unit = #{usagePerUseUnit}
+            </if>
+            <if test="usageDays != null and usageDays != ''">
+                and usage_days = #{usageDays}
+            </if>
+            <if test="drugPrice != null">
+                and drug_price = #{drugPrice}
+            </if>
+            <if test="drugNum != null">
+                and drug_num = #{drugNum}
+            </if>
+            <if test="drugUnit != null and drugUnit != ''">
+                and drug_unit = #{drugUnit}
+            </if>
+            <if test="instructions != null and instructions != ''">
+                and instructions like concat('%', #{instructions}, '%')
+            </if>
+            <if test="productId != null">
+                and product_id = #{productId}
+            </if>
+            <if test="productAttrValueId != null">
+                and product_attr_value_id = #{productAttrValueId}
+            </if>
+            <if test="remark != null and remark != ''">
+                and remark like concat('%', #{remark}, '%')
+            </if>
+            <if test="drugType != null">
+                and drug_type = #{drugType}
+            </if>
+            <if test="isDrug != null">
+                and is_drug = #{isDrug}
+            </if>
+        </where>
+        order by drug_id desc
+    </select>
+
+    <select id="selectFsPrescribeDataScrmDrugById" parameterType="Long" resultMap="FsPrescribeDataScrmDrugResult">
+        <include refid="selectFsPrescribeDataScrmDrugVo"/>
+        where drug_id = #{drugId}
+    </select>
+
+    <insert id="insertFsPrescribeDataScrmDrug" parameterType="FsPrescribeDataScrmDrug" useGeneratedKeys="true" keyProperty="drugId">
+        insert into fs_prescribe_data_scrm_drug
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="prescribeId != null">prescribe_id,</if>
+            <if test="drugName != null">drug_name,</if>
+            <if test="drugSpec != null">drug_spec,</if>
+            <if test="usageMethod != null">usage_method,</if>
+            <if test="usageFrequencyUnit != null">usage_frequency_unit,</if>
+            <if test="usagePerUseCount != null">usage_per_use_count,</if>
+            <if test="usagePerUseUnit != null">usage_per_use_unit,</if>
+            <if test="usageDays != null">usage_days,</if>
+            <if test="drugPrice != null">drug_price,</if>
+            <if test="drugNum != null">drug_num,</if>
+            <if test="drugUnit != null">drug_unit,</if>
+            <if test="instructions != null">instructions,</if>
+            <if test="productId != null">product_id,</if>
+            <if test="drugImgUrl != null">drug_img_url,</if>
+            <if test="productAttrValueId != null">product_attr_value_id,</if>
+            <if test="remark != null">remark,</if>
+            <if test="drugType != null">drug_type,</if>
+            <if test="isDrug != null">is_drug,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="prescribeId != null">#{prescribeId},</if>
+            <if test="drugName != null">#{drugName},</if>
+            <if test="drugSpec != null">#{drugSpec},</if>
+            <if test="usageMethod != null">#{usageMethod},</if>
+            <if test="usageFrequencyUnit != null">#{usageFrequencyUnit},</if>
+            <if test="usagePerUseCount != null">#{usagePerUseCount},</if>
+            <if test="usagePerUseUnit != null">#{usagePerUseUnit},</if>
+            <if test="usageDays != null">#{usageDays},</if>
+            <if test="drugPrice != null">#{drugPrice},</if>
+            <if test="drugNum != null">#{drugNum},</if>
+            <if test="drugUnit != null">#{drugUnit},</if>
+            <if test="instructions != null">#{instructions},</if>
+            <if test="productId != null">#{productId},</if>
+            <if test="drugImgUrl != null">#{drugImgUrl},</if>
+            <if test="productAttrValueId != null">#{productAttrValueId},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="drugType != null">#{drugType},</if>
+            <if test="isDrug != null">#{isDrug},</if>
+        </trim>
+    </insert>
+
+    <update id="updateFsPrescribeDataScrmDrug" parameterType="FsPrescribeDataScrmDrug">
+        update fs_prescribe_data_scrm_drug
+        <set>
+            <if test="prescribeId != null">prescribe_id = #{prescribeId},</if>
+            <if test="drugName != null">drug_name = #{drugName},</if>
+            <if test="drugSpec != null">drug_spec = #{drugSpec},</if>
+            <if test="usageMethod != null">usage_method = #{usageMethod},</if>
+            <if test="usageFrequencyUnit != null">usage_frequency_unit = #{usageFrequencyUnit},</if>
+            <if test="usagePerUseCount != null">usage_per_use_count = #{usagePerUseCount},</if>
+            <if test="usagePerUseUnit != null">usage_per_use_unit = #{usagePerUseUnit},</if>
+            <if test="usageDays != null">usage_days = #{usageDays},</if>
+            <if test="drugPrice != null">drug_price = #{drugPrice},</if>
+            <if test="drugNum != null">drug_num = #{drugNum},</if>
+            <if test="drugUnit != null">drug_unit = #{drugUnit},</if>
+            <if test="instructions != null">instructions = #{instructions},</if>
+            <if test="productId != null">product_id = #{productId},</if>
+            <if test="drugImgUrl != null">drug_img_url = #{drugImgUrl},</if>
+            <if test="productAttrValueId != null">product_attr_value_id = #{productAttrValueId},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="drugType != null">drug_type = #{drugType},</if>
+            <if test="isDrug != null">is_drug = #{isDrug},</if>
+        </set>
+        where drug_id = #{drugId}
+    </update>
+
+    <delete id="deleteFsPrescribeDataScrmDrugById" parameterType="Long">
+        delete from fs_prescribe_data_scrm_drug where drug_id = #{drugId}
+    </delete>
+
+    <delete id="deleteFsPrescribeDataScrmDrugByIds" parameterType="Long">
+        delete from fs_prescribe_data_scrm_drug where drug_id in
+        <foreach collection="array" item="drugId" open="(" separator="," close=")">
+            #{drugId}
+        </foreach>
+    </delete>
+</mapper>

+ 126 - 0
fs-service/src/main/resources/mapper/his/PrescribeScrmTaskRecordMapper.xml

@@ -0,0 +1,126 @@
+<?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.PrescribeScrmTaskRecordMapper">
+
+    <resultMap type="com.fs.his.domain.PrescribeScrmTaskRecord" id="PrescribeScrmTaskRecordResult">
+        <result property="id"                column="id"                />
+        <result property="prescribeId"       column="prescribe_id"      />
+        <result property="prescribeUrl"      column="prescribe_url"     />
+        <result property="retryCount"        column="retry_count"       />
+        <result property="executeStatus"     column="execute_status"    />
+        <result property="errorMessage"      column="error_message"     />
+        <result property="createTime"        column="create_time"       />
+        <result property="updateTime"        column="update_time"       />
+        <result property="firstExecuteTime"  column="first_execute_time"/>
+        <result property="lastExecuteTime"   column="last_execute_time" />
+        <result property="successTime"       column="success_time"      />
+        <result property="remark"            column="remark"            />
+        <result property="signFlag"          column="sign_flag"         />
+    </resultMap>
+
+    <sql id="selectPrescribeScrmTaskRecordVo">
+        select id, prescribe_id, prescribe_url, retry_count, execute_status, error_message,
+               create_time, update_time, first_execute_time, last_execute_time, success_time,
+               remark, sign_flag
+        from prescrib_scrm_task_record
+    </sql>
+
+    <select id="selectPrescribeScrmTaskRecordList" parameterType="PrescribeScrmTaskRecord" resultMap="PrescribeScrmTaskRecordResult">
+        <include refid="selectPrescribeScrmTaskRecordVo"/>
+        <where>
+            <if test="prescribeId != null and prescribeId != ''">
+                and prescribe_id = #{prescribeId}
+            </if>
+            <if test="prescribeUrl != null and prescribeUrl != ''">
+                and prescribe_url like concat('%', #{prescribeUrl}, '%')
+            </if>
+            <if test="retryCount != null">
+                and retry_count = #{retryCount}
+            </if>
+            <if test="executeStatus != null">
+                and execute_status = #{executeStatus}
+            </if>
+            <if test="errorMessage != null and errorMessage != ''">
+                and error_message like concat('%', #{errorMessage}, '%')
+            </if>
+            <if test="remark != null and remark != ''">
+                and remark like concat('%', #{remark}, '%')
+            </if>
+            <if test="signFlag != null">
+                and sign_flag = #{signFlag}
+            </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="selectPrescribeScrmTaskRecordById" parameterType="Long" resultMap="PrescribeScrmTaskRecordResult">
+        <include refid="selectPrescribeScrmTaskRecordVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertPrescribeScrmTaskRecord" parameterType="PrescribeScrmTaskRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into prescrib_scrm_task_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="prescribeId != null and prescribeId != ''">prescribe_id,</if>
+            <if test="prescribeUrl != null">prescribe_url,</if>
+            <if test="retryCount != null">retry_count,</if>
+            <if test="executeStatus != null">execute_status,</if>
+            <if test="errorMessage != null">error_message,</if>
+            <if test="firstExecuteTime != null">first_execute_time,</if>
+            <if test="lastExecuteTime != null">last_execute_time,</if>
+            <if test="successTime != null">success_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="signFlag != null">sign_flag,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="prescribeId != null and prescribeId != ''">#{prescribeId},</if>
+            <if test="prescribeUrl != null">#{prescribeUrl},</if>
+            <if test="retryCount != null">#{retryCount},</if>
+            <if test="executeStatus != null">#{executeStatus},</if>
+            <if test="errorMessage != null">#{errorMessage},</if>
+            <if test="firstExecuteTime != null">#{firstExecuteTime},</if>
+            <if test="lastExecuteTime != null">#{lastExecuteTime},</if>
+            <if test="successTime != null">#{successTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="signFlag != null">#{signFlag},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updatePrescribeScrmTaskRecord" parameterType="PrescribeScrmTaskRecord">
+        update prescrib_scrm_task_record
+        <set>
+            <if test="prescribeId != null and prescribeId != ''">prescribe_id = #{prescribeId},</if>
+            <if test="prescribeUrl != null">prescribe_url = #{prescribeUrl},</if>
+            <if test="retryCount != null">retry_count = #{retryCount},</if>
+            <if test="executeStatus != null">execute_status = #{executeStatus},</if>
+            <if test="errorMessage != null">error_message = #{errorMessage},</if>
+            <if test="firstExecuteTime != null">first_execute_time = #{firstExecuteTime},</if>
+            <if test="lastExecuteTime != null">last_execute_time = #{lastExecuteTime},</if>
+            <if test="successTime != null">success_time = #{successTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="signFlag != null">sign_flag = #{signFlag},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <delete id="deletePrescribeScrmTaskRecordById" parameterType="Long">
+        delete from prescrib_scrm_task_record where id = #{id}
+    </delete>
+
+    <delete id="deletePrescribeScrmTaskRecordByIds" parameterType="Long">
+        delete from prescrib_scrm_task_record where id in
+        <foreach collection="array" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>