Преглед на файлове

coding:对接580接口部分代码生成

zhangqin преди 1 месец
родител
ревизия
67583c19e9
променени са 25 файла, в които са добавени 1052 реда и са изтрити 0 реда
  1. 21 0
      fs-service/src/main/java/com/fs/hospital580/dto/CommonDto.java
  2. 25 0
      fs-service/src/main/java/com/fs/hospital580/dto/Medicine.java
  3. 14 0
      fs-service/src/main/java/com/fs/hospital580/dto/MedicineDto.java
  4. 38 0
      fs-service/src/main/java/com/fs/hospital580/dto/PreDemandDto.java
  5. 19 0
      fs-service/src/main/java/com/fs/hospital580/dto/Result580.java
  6. 60 0
      fs-service/src/main/java/com/fs/hospital580/entity/FsStoreHospital580AnswerScrmEntity.java
  7. 128 0
      fs-service/src/main/java/com/fs/hospital580/entity/FsStoreHospital580OrderScrmEntity.java
  8. 73 0
      fs-service/src/main/java/com/fs/hospital580/entity/FsStoreHospital580ScrmEntity.java
  9. 18 0
      fs-service/src/main/java/com/fs/hospital580/mapper/FsStoreHospital580AnswerScrmMapper.java
  10. 18 0
      fs-service/src/main/java/com/fs/hospital580/mapper/FsStoreHospital580OrderScrmMapper.java
  11. 18 0
      fs-service/src/main/java/com/fs/hospital580/mapper/FsStoreHospital580ScrmMapper.java
  12. 16 0
      fs-service/src/main/java/com/fs/hospital580/service/FsStoreHospital580AnswerScrmService.java
  13. 16 0
      fs-service/src/main/java/com/fs/hospital580/service/FsStoreHospital580OrderScrmService.java
  14. 20 0
      fs-service/src/main/java/com/fs/hospital580/service/FsStoreHospital580ScrmService.java
  15. 24 0
      fs-service/src/main/java/com/fs/hospital580/service/Hospital580Service.java
  16. 20 0
      fs-service/src/main/java/com/fs/hospital580/service/impl/FsStoreHospital580AnswerScrmServiceImpl.java
  17. 20 0
      fs-service/src/main/java/com/fs/hospital580/service/impl/FsStoreHospital580OrderScrmServiceImpl.java
  18. 30 0
      fs-service/src/main/java/com/fs/hospital580/service/impl/FsStoreHospital580ScrmServiceImpl.java
  19. 123 0
      fs-service/src/main/java/com/fs/hospital580/service/impl/Hospital580ServiceImpl.java
  20. 43 0
      fs-service/src/main/java/com/fs/hospital580/util/MD5Util.java
  21. 225 0
      fs-service/src/main/java/com/fs/hospital580/util/ObjectApiSignUtil.java
  22. 5 0
      fs-service/src/main/resources/application-dev.yml
  23. 20 0
      fs-service/src/main/resources/mapper/hospital580/FsStoreHospital580AnswerScrmMapper.xml
  24. 37 0
      fs-service/src/main/resources/mapper/hospital580/FsStoreHospital580OrderScrmMapper.xml
  25. 21 0
      fs-service/src/main/resources/mapper/hospital580/FsStoreHospital580ScrmMapper.xml

+ 21 - 0
fs-service/src/main/java/com/fs/hospital580/dto/CommonDto.java

@@ -0,0 +1,21 @@
+package com.fs.hospital580.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Setter
+@Getter
+public class CommonDto implements Serializable {
+    private String clientId;
+    private String timeStamp = new Date().getTime() + "";
+    private String sign;
+
+    public void setSignAndClientId(String sign, String clientId) {
+        this.sign = sign;
+        this.clientId = clientId;
+    }
+
+}

+ 25 - 0
fs-service/src/main/java/com/fs/hospital580/dto/Medicine.java

@@ -0,0 +1,25 @@
+package com.fs.hospital580.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class Medicine implements Serializable {
+    private Integer categoryId;         // 药品分类:0为西药,1为中成药,3为其他
+    private String commonName;          // 通用名
+    private String name;                // 商品名
+    private String dosage;              // 剂型
+    private String spec;                // 规格
+    private String packingSpec;         // 包装规格
+    private String manufacturer;        // 生产厂家
+    private String approvalNumber;      // 批准文号
+    private String unit;                // 最小售卖单位
+    private String medicineId;          // 第三方药品编码(唯一)
+    private String barCode;             // 商品条形码值
+    private Integer isPrescription;     // 是否处方药(0为是,1为否)
+    private Double price;               // 价格
+    private Integer stock;              // 库存
+    private String specialCommonName;   // 特殊通用名
+    private String specialSpec;         // 特殊规格
+}

+ 14 - 0
fs-service/src/main/java/com/fs/hospital580/dto/MedicineDto.java

@@ -0,0 +1,14 @@
+package com.fs.hospital580.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class MedicineDto extends CommonDto implements Serializable {
+    private List<Medicine> medicineList;
+    // 药品同步结果通知地址
+    private String callbackUrl;
+
+}

+ 38 - 0
fs-service/src/main/java/com/fs/hospital580/dto/PreDemandDto.java

@@ -0,0 +1,38 @@
+package com.fs.hospital580.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class PreDemandDto extends CommonDto implements Serializable {
+
+    private String memberId;                // 第三方系统问诊人唯一标识(一般为患者手机号)
+    private String openid;                  // 用户对应小程序或者公众号的openid
+    private String headimgurl;              // 第三方系统问诊人头像
+    private Integer storeId;                // 门店ID(由580提供,每个三方对应值不一样)
+    private Integer serviceType;            // 服务类型,0为图文,1为视频
+    private Integer isExamine;              // 是否需要审方(0为不需要,1为需要)
+    private Integer isPregnantWoman;        // 是否孕妇0为否,1为是
+    private Integer isLactation;            // 是否哺乳期0为否,1为是
+    private Integer souceFrom;              // 来源:0为微信小程序,1为APP,2为H5,3为支付宝小程序
+    private String userFamilyName;          // 用药人姓名
+    private String userFamilyIdCard;        // 身份证
+    private Integer userFamilyAge;          // 年龄
+    private Integer userFamilyGender;       // 性别:1-男,2-女
+    private String userFamilyPhone;         // 手机号码
+    private Integer relationship;           // 关系(1本人 2父母 3配偶 4子女 5其他)
+    private String bizOrderId;              // 第三方唯一订单号
+    private List<BeforeAiData> beforeAiDataList; // 问诊前面的题目,传固定的五道题
+    private String userFamilyAddr;          // 就诊人住址(最多30个字符)
+    private String imgList;                 // 图片附件(url形式,最多三个),多个以英文逗号,隔开
+    private String thirdReturnUrl;          // 结束问诊后跳回三方的地址
+}
+
+@Data
+class BeforeAiData implements Serializable {
+    private Integer subjectId;              // 题目ID
+    private String answer;                  // 题目答案
+    private String answerMedicine;          // 存问诊用药信息选择
+}

+ 19 - 0
fs-service/src/main/java/com/fs/hospital580/dto/Result580.java

@@ -0,0 +1,19 @@
+package com.fs.hospital580.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class Result580 implements Serializable {
+    // 1失败
+    private Integer err;
+    private String errmsg;
+    private String data;
+
+    public Result580(String errmsg) {
+        this.err = 1;
+        this.data = "";
+        this.errmsg = errmsg;
+    }
+}

+ 60 - 0
fs-service/src/main/java/com/fs/hospital580/entity/FsStoreHospital580AnswerScrmEntity.java

@@ -0,0 +1,60 @@
+package com.fs.hospital580.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 问诊问答明细表
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Getter
+@Setter
+@TableName("fs_store_hospital580_answer_scrm")
+@ApiModel(value = "FsStoreHospital580AnswerScrmEntity对象", description = "问诊问答明细表")
+public class FsStoreHospital580AnswerScrmEntity extends Model<FsStoreHospital580AnswerScrmEntity> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键ID")
+    @TableId(value = "answer_id", type = IdType.AUTO)
+    private Long answerId;
+
+    @ApiModelProperty("关联订单主表ID")
+    @TableField("order_id")
+    private Long orderId;
+
+    @ApiModelProperty("题目ID:1-症状,2-用药信息,3-是否使用过此类药物,4-药物过敏史,5-肝肾功能异常")
+    @TableField("subject_id")
+    private Byte subjectId;
+
+    @ApiModelProperty("题目答案")
+    @TableField("answer")
+    private String answer;
+
+    @ApiModelProperty("用药信息选择(JSON格式)")
+    @TableField("answer_medicine")
+    private String answerMedicine;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @Override
+    public Serializable pkVal() {
+        return this.answerId;
+    }
+}

+ 128 - 0
fs-service/src/main/java/com/fs/hospital580/entity/FsStoreHospital580OrderScrmEntity.java

@@ -0,0 +1,128 @@
+package com.fs.hospital580.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 问诊订单主表
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Getter
+@Setter
+@TableName("fs_store_hospital580_order_scrm")
+@ApiModel(value = "FsStoreHospital580OrderScrmEntity对象", description = "问诊订单主表")
+public class FsStoreHospital580OrderScrmEntity extends Model<FsStoreHospital580OrderScrmEntity> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键ID")
+    @TableId(value = "order_id", type = IdType.AUTO)
+    private Long orderId;
+
+    @ApiModelProperty("第三方系统问诊人唯一标识(患者手机号)")
+    @TableField("member_id")
+    private String memberId;
+
+    @ApiModelProperty("用户对应小程序或公众号的openid")
+    @TableField("openid")
+    private String openid;
+
+    @ApiModelProperty("第三方系统问诊人头像")
+    @TableField("headimgurl")
+    private String headimgurl;
+
+    @ApiModelProperty("用户id")
+    @TableField("user_id")
+    private Long userId;
+
+    @ApiModelProperty("门店ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty("服务类型:0-图文,1-视频")
+    @TableField("service_type")
+    private Byte serviceType;
+
+    @ApiModelProperty("是否需要审方:0-不需要,1-需要")
+    @TableField("is_examine")
+    private Byte isExamine;
+
+    @ApiModelProperty("是否孕妇:0-否,1-是")
+    @TableField("is_pregnant_woman")
+    private Byte isPregnantWoman;
+
+    @ApiModelProperty("是否哺乳期:0-否,1-是")
+    @TableField("is_lactation")
+    private Byte isLactation;
+
+    @ApiModelProperty("来源:0-微信小程序,1-APP,2-H5,3-支付宝小程序")
+    @TableField("souce_from")
+    private Byte souceFrom;
+
+    @ApiModelProperty("用药人姓名")
+    @TableField("user_family_name")
+    private String userFamilyName;
+
+    @ApiModelProperty("身份证")
+    @TableField("user_family_id_card")
+    private String userFamilyIdCard;
+
+    @ApiModelProperty("年龄")
+    @TableField("user_family_age")
+    private Integer userFamilyAge;
+
+    @ApiModelProperty("性别:1-男,2-女")
+    @TableField("user_family_gender")
+    private Byte userFamilyGender;
+
+    @ApiModelProperty("手机号码")
+    @TableField("user_family_phone")
+    private String userFamilyPhone;
+
+    @ApiModelProperty("关系:1-本人,2-父母,3-配偶,4-子女,5-其他")
+    @TableField("relationship")
+    private Byte relationship;
+
+    @ApiModelProperty("第三方唯一订单号")
+    @TableField("biz_order_id")
+    private String bizOrderId;
+
+    @ApiModelProperty("就诊人住址(最多30个字符)")
+    @TableField("user_family_addr")
+    private String userFamilyAddr;
+
+    @ApiModelProperty("图片附件URL,多个以英文逗号隔开")
+    @TableField("img_list")
+    private String imgList;
+
+    @ApiModelProperty("结束问诊后跳回三方的地址")
+    @TableField("third_return_url")
+    private String thirdReturnUrl;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @Override
+    public Serializable pkVal() {
+        return this.orderId;
+    }
+}

+ 73 - 0
fs-service/src/main/java/com/fs/hospital580/entity/FsStoreHospital580ScrmEntity.java

@@ -0,0 +1,73 @@
+package com.fs.hospital580.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 请求580医院记录表
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Getter
+@Setter
+@TableName("fs_store_hospital580_scrm")
+@ApiModel(value = "FsStoreHospital580ScrmEntity对象", description = "请求580医院记录表")
+@Builder
+public class FsStoreHospital580ScrmEntity extends Model<FsStoreHospital580ScrmEntity> {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("请求地址")
+    @TableField("request")
+    private String request;
+
+    @ApiModelProperty("请求参数")
+    @TableField("request_parm")
+    private String requestParm;
+
+    @ApiModelProperty("请求响应")
+    @TableField("response")
+    private String response;
+
+    @ApiModelProperty("请求成功状态1是0否")
+    @TableField("request_status")
+    private Boolean requestStatus;
+
+/*    @ApiModelProperty("操作人id")
+    @TableField("user_id")
+    private Long userId;*/
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+/*    @ApiModelProperty("同步唯一id集合逗号分隔(product_id)")
+    @TableField("unique_id")
+    private String uniqueId;*/
+
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+}

+ 18 - 0
fs-service/src/main/java/com/fs/hospital580/mapper/FsStoreHospital580AnswerScrmMapper.java

@@ -0,0 +1,18 @@
+package com.fs.hospital580.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hospital580.entity.FsStoreHospital580AnswerScrmEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 问诊问答明细表 Mapper 接口
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Mapper
+public interface FsStoreHospital580AnswerScrmMapper extends BaseMapper<FsStoreHospital580AnswerScrmEntity> {
+
+}

+ 18 - 0
fs-service/src/main/java/com/fs/hospital580/mapper/FsStoreHospital580OrderScrmMapper.java

@@ -0,0 +1,18 @@
+package com.fs.hospital580.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hospital580.entity.FsStoreHospital580OrderScrmEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 问诊订单主表 Mapper 接口
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Mapper
+public interface FsStoreHospital580OrderScrmMapper extends BaseMapper<FsStoreHospital580OrderScrmEntity> {
+
+}

+ 18 - 0
fs-service/src/main/java/com/fs/hospital580/mapper/FsStoreHospital580ScrmMapper.java

@@ -0,0 +1,18 @@
+package com.fs.hospital580.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hospital580.entity.FsStoreHospital580ScrmEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 请求580医院记录表 Mapper 接口
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Mapper
+public interface FsStoreHospital580ScrmMapper extends BaseMapper<FsStoreHospital580ScrmEntity> {
+
+}

+ 16 - 0
fs-service/src/main/java/com/fs/hospital580/service/FsStoreHospital580AnswerScrmService.java

@@ -0,0 +1,16 @@
+package com.fs.hospital580.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hospital580.entity.FsStoreHospital580AnswerScrmEntity;
+
+/**
+ * <p>
+ * 问诊问答明细表 服务类
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+public interface FsStoreHospital580AnswerScrmService extends IService<FsStoreHospital580AnswerScrmEntity> {
+
+}

+ 16 - 0
fs-service/src/main/java/com/fs/hospital580/service/FsStoreHospital580OrderScrmService.java

@@ -0,0 +1,16 @@
+package com.fs.hospital580.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hospital580.entity.FsStoreHospital580OrderScrmEntity;
+
+/**
+ * <p>
+ * 问诊订单主表 服务类
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+public interface FsStoreHospital580OrderScrmService extends IService<FsStoreHospital580OrderScrmEntity> {
+
+}

+ 20 - 0
fs-service/src/main/java/com/fs/hospital580/service/FsStoreHospital580ScrmService.java

@@ -0,0 +1,20 @@
+package com.fs.hospital580.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hospital580.entity.FsStoreHospital580ScrmEntity;
+
+/**
+ * <p>
+ * 请求580医院记录表 服务类
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+public interface FsStoreHospital580ScrmService extends IService<FsStoreHospital580ScrmEntity> {
+    /**
+     * 同步药品信息到580医院
+     */
+    void SynDrugToHospital580(FsStoreProductScrm productScrm);
+}

+ 24 - 0
fs-service/src/main/java/com/fs/hospital580/service/Hospital580Service.java

@@ -0,0 +1,24 @@
+package com.fs.hospital580.service;
+
+
+import com.fs.hospital580.dto.MedicineDto;
+import com.fs.hospital580.dto.PreDemandDto;
+import com.fs.hospital580.dto.Result580;
+
+public interface Hospital580Service {
+    /**
+     * 4.7 同步药品信息接口-580提供
+     *
+     * @param dto
+     */
+    Result580 medicine(MedicineDto dto);
+
+    /**
+     * 4.2新 新增问诊单接口-580提供
+     *
+     * @param dto
+     */
+
+    Result580 initPreDemand(PreDemandDto dto);
+
+}

+ 20 - 0
fs-service/src/main/java/com/fs/hospital580/service/impl/FsStoreHospital580AnswerScrmServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fs.hospital580.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.hospital580.entity.FsStoreHospital580AnswerScrmEntity;
+import com.fs.hospital580.mapper.FsStoreHospital580AnswerScrmMapper;
+import com.fs.hospital580.service.FsStoreHospital580AnswerScrmService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 问诊问答明细表 服务实现类
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Service
+public class FsStoreHospital580AnswerScrmServiceImpl extends ServiceImpl<FsStoreHospital580AnswerScrmMapper, FsStoreHospital580AnswerScrmEntity> implements FsStoreHospital580AnswerScrmService {
+
+}

+ 20 - 0
fs-service/src/main/java/com/fs/hospital580/service/impl/FsStoreHospital580OrderScrmServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fs.hospital580.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.hospital580.entity.FsStoreHospital580OrderScrmEntity;
+import com.fs.hospital580.mapper.FsStoreHospital580OrderScrmMapper;
+import com.fs.hospital580.service.FsStoreHospital580OrderScrmService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 问诊订单主表 服务实现类
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Service
+public class FsStoreHospital580OrderScrmServiceImpl extends ServiceImpl<FsStoreHospital580OrderScrmMapper, FsStoreHospital580OrderScrmEntity> implements FsStoreHospital580OrderScrmService {
+
+}

+ 30 - 0
fs-service/src/main/java/com/fs/hospital580/service/impl/FsStoreHospital580ScrmServiceImpl.java

@@ -0,0 +1,30 @@
+package com.fs.hospital580.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hospital580.entity.FsStoreHospital580ScrmEntity;
+import com.fs.hospital580.mapper.FsStoreHospital580ScrmMapper;
+import com.fs.hospital580.service.FsStoreHospital580ScrmService;
+import com.fs.hospital580.service.Hospital580Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 请求580医院记录表 服务实现类
+ * </p>
+ *
+ * @author zhangqin
+ * @since 2025-09-25
+ */
+@Service
+public class FsStoreHospital580ScrmServiceImpl extends ServiceImpl<FsStoreHospital580ScrmMapper, FsStoreHospital580ScrmEntity> implements FsStoreHospital580ScrmService {
+
+    @Autowired
+    private Hospital580Service hospital580Service;
+
+    @Override
+    public void SynDrugToHospital580(FsStoreProductScrm productScrm) {
+        //hospital580Service.medicine();
+    }
+}

+ 123 - 0
fs-service/src/main/java/com/fs/hospital580/service/impl/Hospital580ServiceImpl.java

@@ -0,0 +1,123 @@
+package com.fs.hospital580.service.impl;
+
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.fs.hospital580.dto.CommonDto;
+import com.fs.hospital580.dto.MedicineDto;
+import com.fs.hospital580.dto.PreDemandDto;
+import com.fs.hospital580.dto.Result580;
+import com.fs.hospital580.entity.FsStoreHospital580ScrmEntity;
+import com.fs.hospital580.service.Hospital580Service;
+import com.fs.hospital580.util.ObjectApiSignUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class Hospital580ServiceImpl implements Hospital580Service {
+    @Value("${hospital580.url:''}")
+    private String HOSPITAL_580_URL;
+    @Value("${hospital580.clientId:''}")
+    private String CLIENTID;
+    @Value("${hospital580.secretKey:''}")
+    private String SECRETKEY;
+    /**
+     * 4.7 同步药品信息接口-580提供
+     */
+    private static final String MEDICINE_PATH = "/v1_0/ehospital/openapi/kz/medicine/sync";
+    /**
+     * 4.2新 新增问诊单接口-580提供
+     */
+    private static final String PREDEMAND_PATH = "/v1_0/ehospital/openapi/kz/web/predemand/initPreDemand";
+
+    @Override
+    public Result580 medicine(MedicineDto dto) {
+        return requestResult580(dto, MEDICINE_PATH);
+
+    }
+
+
+    @Override
+    public Result580 initPreDemand(PreDemandDto dto) {
+        return requestResult580(dto, PREDEMAND_PATH);
+    }
+
+    private <T extends CommonDto> Result580 requestResult580(T t, String path) {
+        t.setSignAndClientId(ObjectApiSignUtil.getSign(t, SECRETKEY), CLIENTID);
+        String url = HOSPITAL_580_URL + path;
+        String body = JSONUtil.toJsonStr(t);
+        String result = "";
+        Result580 result580;
+        Boolean requestStatus;
+        try {
+            log.info("请求580接口:{}", body);
+            result = HttpRequest.post(url)
+                    .body(body)//表单内容
+                    .timeout(10000)//超时,毫秒
+                    .execute().body();
+            log.info("请求580接口返回:{}", result);
+            result580 = JSONUtil.toBean(result, Result580.class);
+            requestStatus = true;
+        } catch (Exception e) {
+            log.info("请求580接口异常:", e);
+            result580 = new Result580(e.getMessage());
+            requestStatus = false;
+        }
+        /**
+         * 保存调用记录
+         */
+        FsStoreHospital580ScrmEntity.builder()
+                .request(url)
+                .requestParm(body)
+                .response(result)
+                .requestStatus(requestStatus)
+                .build()
+                .insert();
+        return result580;
+    }
+
+    /*public static void main(String[] args) {
+        // 创建测试实例
+        Hospital580ServiceImpl service = new Hospital580ServiceImpl();
+
+        // 创建测试数据
+        MedicineDto dto = new MedicineDto();
+        //dto.setCallbackUrl("http://localhost:8080/callback");
+
+        List<Medicine> medicineList = new ArrayList<>();
+
+        // 添加测试药品数据
+        Medicine medicine = new Medicine();
+        medicine.setCategoryId(0); // 西药
+        medicine.setCommonName("阿司匹林肠溶片");
+        medicine.setName("拜阿司匹灵");
+        medicine.setDosage("片剂");
+        medicine.setSpec("0.25g*12粒");
+        medicine.setPackingSpec("30片/盒");
+        medicine.setManufacturer("拜耳医药保健有限公司");
+        medicine.setApprovalNumber("国药准字H10980126");
+        medicine.setUnit("盒");
+        medicine.setMedicineId("MED123456");
+        medicine.setBarCode("6920228888888");
+        medicine.setIsPrescription(0);
+        medicine.setPrice(25.80);
+        medicine.setStock(1000);
+        medicine.setSpecialCommonName("");
+        medicine.setSpecialSpec("");
+
+        medicineList.add(medicine);
+
+
+        dto.setMedicineList(medicineList);
+
+        // 调用测试方法
+        System.out.println("开始测试 medicine 接口...");
+        dto.setSign(ObjectApiSignUtil.getSign(dto, SECRETKEY));
+        System.out.println("签名:" + JSONUtil.toJsonStr(dto));
+        service.medicine(dto);
+        System.out.println("测试完成");
+    }*/
+
+}

+ 43 - 0
fs-service/src/main/java/com/fs/hospital580/util/MD5Util.java

@@ -0,0 +1,43 @@
+package com.fs.hospital580.util;
+
+import java.security.MessageDigest;
+
+public class MD5Util {
+
+    private static String byteArrayToHexString(byte b[]) {
+        StringBuffer resultSb = new StringBuffer();
+        for (int i = 0; i < b.length; i++)
+            resultSb.append(byteToHexString(b[i]));
+
+        return resultSb.toString();
+    }
+
+    private static String byteToHexString(byte b) {
+        int n = b;
+        if (n < 0)
+            n += 256;
+        int d1 = n / 16;
+        int d2 = n % 16;
+        return hexDigits[d1] + hexDigits[d2];
+    }
+
+    public static String MD5Encode(String origin, String charsetname) {
+        String resultString = null;
+        try {
+            resultString = new String(origin);
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            if (charsetname == null || "".equals(charsetname))
+                resultString = byteArrayToHexString(md.digest(resultString
+                        .getBytes()));
+            else
+                resultString = byteArrayToHexString(md.digest(resultString
+                        .getBytes(charsetname)));
+        } catch (Exception exception) {
+        }
+        return resultString;
+    }
+
+    private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
+            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
+
+}

+ 225 - 0
fs-service/src/main/java/com/fs/hospital580/util/ObjectApiSignUtil.java

@@ -0,0 +1,225 @@
+package com.fs.hospital580.util;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * ClassName: ObjectApiSignUtil<br/>
+ * Function: 签名<br/>
+ * Date: 2019-08-21 14:20<br/>
+ *
+ * @author km
+ */
+@Slf4j
+public class ObjectApiSignUtil {
+
+    /**
+     * 根据对应请求参数与对应serverCode获取secretKey进行签名并返回。
+     * 对signature参数不做签名
+     *
+     * @param paramMaps 参数
+     * @param secretKey clientId的secret
+     * @return 加密结果
+     */
+    public static String getSign(Map<String, Object> paramMaps, String secretKey) {
+        //按照自然排序
+        SortedMap<String, Object> sortedMap = new TreeMap<>(paramMaps);
+        String signString = ObjectApiSignUtil.getUrlSortParamsByMap(sortedMap);
+        signString += secretKey;
+        log.info("签名字符串为:{}", signString);
+        return MD5Util.MD5Encode(signString, "UTF-8").toUpperCase();
+    }
+
+    /**
+     * 根据对应请求参数与对应serverCode获取secretKey进行签名并返回。
+     * 对signature参数不做签名
+     *
+     * @param object    参数
+     * @param secretKey clientId的secretKey
+     * @return 加密结果
+     */
+    public static String getSign(Object object, String secretKey) {
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String, Object> map = mapper.convertValue(object, new TypeReference<Map<String, Object>>() {
+        });
+
+        // 按照自然排序
+        SortedMap<String, Object> sortedMap = new TreeMap<>(map);
+        String signString = ObjectApiSignUtil.getUrlSortParamsByMap(sortedMap);
+        signString += secretKey;
+        log.info("签名字符串为:{}", signString);
+        return MD5Util.MD5Encode(signString, "UTF-8").toUpperCase();
+    }
+
+    /**
+     * 对map排序(key-value格式)
+     *
+     * @param map 入参
+     * @return 排序后的结果
+     */
+    public static String getUrlSortParamsByMap(Map<String, Object> map) {
+        if (map == null) {
+            return "";
+        }
+
+        // 定义拼接对象
+        StringBuilder stringBuffer = new StringBuilder();
+        SortedMap<String, Object> sortedMap = new TreeMap<>(map); // 对Map做排序处理
+
+        // 遍历Map对象
+        for (Map.Entry<String, Object> entry : sortedMap.entrySet()) {
+            // 获取key
+            String key = entry.getKey();
+
+            // sign字段不参与签名
+            if ("sign".equals(key)) {
+                continue;
+            }
+
+            // 获取加密对象
+            Object value = entry.getValue();
+
+            // 如果加密对象是空,或者空字符串,则不作加密
+            if (null == value || "".equals(value)) {
+                continue;
+            }
+
+            // 如果加密对象是数组,则调用数组排序方法
+            if (value instanceof Object[]) {
+                Object[] objects = (Object[]) value;
+                stringBuffer.append(key).append("=")
+                        .append(ObjectApiSignUtil.getSignStringByList(Arrays.asList(objects))).append("&");
+            } else if (value instanceof List) {
+                // 如果加密对象是列表,则调用列表排序方法
+                stringBuffer.append(key).append("=")
+                        .append(ObjectApiSignUtil.getSignStringByList((List) value)).append("&");
+            } else if (value instanceof Map) {
+                // 如果加密对象是Map,则递归当前方法
+                stringBuffer.append(key).append("=")
+                        .append(ObjectApiSignUtil.getSignStringByMap((Map) value)).append("&");
+            } else {
+                // 否则直接拼接对象转字符串值
+                stringBuffer.append(key).append("=").append(value.toString()).append("&");
+            }
+        }
+
+        stringBuffer.append("key=");
+        return stringBuffer.toString();
+    }
+
+    /**
+     * 对map排序
+     *
+     * @param map 入参
+     * @return 排序后的结果
+     */
+    public static String getSignStringByMap(Map<String, Object> map) {
+        if (map == null) {
+            return null;
+        }
+
+        // 定义拼接对象
+        StringBuilder stringBuffer = new StringBuilder();
+        stringBuffer.append("{");
+        SortedMap<String, Object> sortedMap = new TreeMap<>(map); // 对Map做排序处理
+
+        // 遍历Map对象
+        for (Map.Entry<String, Object> entry : sortedMap.entrySet()) {
+            // 获取key
+            String key = entry.getKey();
+
+            // 获取加密对象
+            Object value = entry.getValue();
+
+            // 如果加密对象是空,或者空字符串,则不作加密
+            if (null == value || "".equals(value)) {
+                continue;
+            }
+
+            // 如果加密对象是数组,则调用数组排序方法
+            if (value instanceof Object[]) {
+                Object[] objects = (Object[]) value;
+                stringBuffer.append(key).append(":")
+                        .append(ObjectApiSignUtil.getSignStringByList(Arrays.asList(objects))).append(",");
+            } else if (value instanceof List) {
+                // 如果加密对象是列表,则调用列表排序方法
+                stringBuffer.append(key).append(":")
+                        .append(ObjectApiSignUtil.getSignStringByList((List) value)).append(",");
+            } else if (value instanceof Map) {
+                // 如果加密对象是Map,则递归当前方法
+                stringBuffer.append(key).append(":")
+                        .append(ObjectApiSignUtil.getSignStringByMap((Map) value)).append(",");
+            } else {
+                // 否则直接拼接对象转字符串值
+                stringBuffer.append(key).append(":").append(value.toString()).append(",");
+            }
+        }
+
+        // 移除最后一个逗号
+        if (stringBuffer.length() > 1) {
+            stringBuffer.deleteCharAt(stringBuffer.length() - 1);
+        }
+        stringBuffer.append("}");
+
+        return stringBuffer.toString();
+    }
+
+    /**
+     * 对list排序
+     *
+     * @param list 列表
+     * @return 排序后的结果
+     */
+    public static String getSignStringByList(List list) {
+        // 如果列表为空,则直接返回
+        if (null == list) {
+            return null;
+        } else if (list.isEmpty()) {
+            // 如果列表长度为0,则返回空长度字符串
+            return "[]";
+        }
+
+        // 定义拼接对象
+        StringBuilder stringBuffer = new StringBuilder();
+        stringBuffer.append("[");
+
+        // 遍历处理列表
+        for (Object object : list) {
+            // 如果对象是空,或者空字符串,则跳过
+            if (null == object || "".equals(object)) {
+                continue;
+            }
+
+            // 如果加密对象是数组,则调用数组排序方法
+            if (object instanceof Object[]) {
+                Object[] objects = (Object[]) object;
+                stringBuffer.append(ObjectApiSignUtil.getSignStringByList(Arrays.asList(objects))).append(",");
+            } else if (object instanceof List) {
+                // 如果加密对象是列表,则递归当前方法
+                stringBuffer.append(ObjectApiSignUtil.getSignStringByList((List) object)).append(",");
+            } else if (object instanceof Map) {
+                // 如果加密对象是Map,则调用Map排序方法
+                stringBuffer.append(ObjectApiSignUtil.getSignStringByMap((Map) object)).append(",");
+            } else {
+                // 否则直接拼接对象转字符串值
+                stringBuffer.append(object.toString()).append(",");
+            }
+        }
+
+        // 移除最后一个逗号
+        if (stringBuffer.length() > 1) {
+            stringBuffer.deleteCharAt(stringBuffer.length() - 1);
+        }
+        stringBuffer.append("]");
+
+        return stringBuffer.toString();
+    }
+
+}

+ 5 - 0
fs-service/src/main/resources/application-dev.yml

@@ -164,3 +164,8 @@ openIM:
     userID: imAdmin
 #是否为新商户,新商户不走mpOpenId
 isNewWxMerchant: true
+hospital580:
+    url: https://ehospital-openapi-test.sq580.com
+    clientId: yjbz_15700159162_test
+    secretKey: ESzFwwum4Jz95f4ubg4rP7lQG4LZsWFv
+

+ 20 - 0
fs-service/src/main/resources/mapper/hospital580/FsStoreHospital580AnswerScrmMapper.xml

@@ -0,0 +1,20 @@
+<?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.hospital580.mapper.FsStoreHospital580AnswerScrmMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.fs.hospital580.entity.FsStoreHospital580AnswerScrmEntity">
+        <id column="answer_id" property="answerId" />
+        <result column="order_id" property="orderId" />
+        <result column="subject_id" property="subjectId" />
+        <result column="answer" property="answer" />
+        <result column="answer_medicine" property="answerMedicine" />
+        <result column="create_time" property="createTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        answer_id, order_id, subject_id, answer, answer_medicine, create_time
+    </sql>
+
+</mapper>

+ 37 - 0
fs-service/src/main/resources/mapper/hospital580/FsStoreHospital580OrderScrmMapper.xml

@@ -0,0 +1,37 @@
+<?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.hospital580.mapper.FsStoreHospital580OrderScrmMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.fs.hospital580.entity.FsStoreHospital580OrderScrmEntity">
+        <id column="order_id" property="orderId" />
+        <result column="member_id" property="memberId" />
+        <result column="openid" property="openid" />
+        <result column="headimgurl" property="headimgurl" />
+        <result column="user_id" property="userId" />
+        <result column="store_id" property="storeId" />
+        <result column="service_type" property="serviceType" />
+        <result column="is_examine" property="isExamine" />
+        <result column="is_pregnant_woman" property="isPregnantWoman" />
+        <result column="is_lactation" property="isLactation" />
+        <result column="souce_from" property="souceFrom" />
+        <result column="user_family_name" property="userFamilyName" />
+        <result column="user_family_id_card" property="userFamilyIdCard" />
+        <result column="user_family_age" property="userFamilyAge" />
+        <result column="user_family_gender" property="userFamilyGender" />
+        <result column="user_family_phone" property="userFamilyPhone" />
+        <result column="relationship" property="relationship" />
+        <result column="biz_order_id" property="bizOrderId" />
+        <result column="user_family_addr" property="userFamilyAddr" />
+        <result column="img_list" property="imgList" />
+        <result column="third_return_url" property="thirdReturnUrl" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        order_id, member_id, openid, headimgurl, user_id, store_id, service_type, is_examine, is_pregnant_woman, is_lactation, souce_from, user_family_name, user_family_id_card, user_family_age, user_family_gender, user_family_phone, relationship, biz_order_id, user_family_addr, img_list, third_return_url, create_time, update_time
+    </sql>
+
+</mapper>

+ 21 - 0
fs-service/src/main/resources/mapper/hospital580/FsStoreHospital580ScrmMapper.xml

@@ -0,0 +1,21 @@
+<?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.hospital580.mapper.FsStoreHospital580ScrmMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.fs.hospital580.entity.FsStoreHospital580ScrmEntity">
+        <id column="id" property="id" />
+        <result column="request" property="request" />
+        <result column="request_parm" property="requestParm" />
+        <result column="response" property="response" />
+        <result column="request_status" property="requestStatus" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, request, request_parm, response, request_status, create_time, update_time
+    </sql>
+
+</mapper>