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

Merge remote-tracking branch 'origin/master'

zyy преди 6 дни
родител
ревизия
2b08b63ae7
променени са 58 файла, в които са добавени 1202 реда и са изтрити 29 реда
  1. 18 1
      fs-common/src/main/java/com/fs/common/config/FSSysConfig.java
  2. 14 0
      fs-common/src/main/java/com/fs/common/utils/PhoneUtils.java
  3. 2 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyAiWorkflowExecMapper.java
  4. 3 2
      fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java
  5. 57 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyWorkflowEngineImpl.java
  6. 4 0
      fs-service/src/main/java/com/fs/his/mapper/FsAdvMapper.java
  7. 5 0
      fs-service/src/main/java/com/fs/his/mapper/FsArticleCateMapper.java
  8. 22 0
      fs-service/src/main/java/com/fs/his/mapper/FsArticleMapper.java
  9. 2 0
      fs-service/src/main/java/com/fs/his/mapper/FsCityMapper.java
  10. 5 0
      fs-service/src/main/java/com/fs/his/mapper/FsPrescribeMapper.java
  11. 7 0
      fs-service/src/main/java/com/fs/his/mapper/FsStoreProductMapper.java
  12. 6 0
      fs-service/src/main/java/com/fs/his/mapper/FsUserAddressMapper.java
  13. 6 0
      fs-service/src/main/java/com/fs/his/param/FsPrescribeParam.java
  14. 3 0
      fs-service/src/main/java/com/fs/his/service/IFsAdvService.java
  15. 2 0
      fs-service/src/main/java/com/fs/his/service/IFsArticleCateService.java
  16. 5 0
      fs-service/src/main/java/com/fs/his/service/IFsArticleService.java
  17. 1 0
      fs-service/src/main/java/com/fs/his/service/IFsCityService.java
  18. 3 0
      fs-service/src/main/java/com/fs/his/service/IFsStoreProductService.java
  19. 3 0
      fs-service/src/main/java/com/fs/his/service/IFsUserAddressService.java
  20. 8 0
      fs-service/src/main/java/com/fs/his/service/impl/FsAdvServiceImpl.java
  21. 7 0
      fs-service/src/main/java/com/fs/his/service/impl/FsArticleCateServiceImpl.java
  22. 17 0
      fs-service/src/main/java/com/fs/his/service/impl/FsArticleServiceImpl.java
  23. 11 0
      fs-service/src/main/java/com/fs/his/service/impl/FsCityServiceImpl.java
  24. 23 4
      fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeServiceImpl.java
  25. 7 1
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreProductServiceImpl.java
  26. 13 0
      fs-service/src/main/java/com/fs/his/service/impl/FsUserAddressServiceImpl.java
  27. 7 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java
  28. 15 8
      fs-service/src/main/java/com/fs/hisStore/mapper/FsWechatTemplateScrmMapper.java
  29. 3 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java
  30. 2 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductScrmService.java
  31. 26 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  32. 10 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  33. 21 0
      fs-service/src/main/java/com/fs/store/bean/Drug.java
  34. 23 0
      fs-service/src/main/java/com/fs/store/bean/DrugV2.java
  35. 44 0
      fs-service/src/main/java/com/fs/store/bean/Prescribe.java
  36. 46 0
      fs-service/src/main/java/com/fs/store/bean/PrescribeV2.java
  37. 13 0
      fs-service/src/main/java/com/fs/store/param/FsArticleQueryParam.java
  38. 58 0
      fs-service/src/main/java/com/fs/store/param/FsUserAddressAddEditParam.java
  39. 20 0
      fs-service/src/main/java/com/fs/store/param/PrescribeV2Param.java
  40. 36 0
      fs-service/src/main/java/com/fs/store/vo/FsArticleListQueryVO.java
  41. 59 0
      fs-service/src/main/java/com/fs/store/vo/FsStoreProductActivityListVO.java
  42. 27 0
      fs-service/src/main/java/com/fs/system/config/SnowflakeUtils.java
  43. 2 2
      fs-service/src/main/java/com/fs/wxwork/service/WxIpadService.java
  44. 1 1
      fs-service/src/main/resources/application-druid-sxjz.yml
  45. 1 1
      fs-service/src/main/resources/application-druid-sxtb.yml
  46. 9 1
      fs-service/src/main/resources/mapper/company/CompanyAiWorkflowExecMapper.xml
  47. 1 0
      fs-service/src/main/resources/mapper/company/CompanyWxClientMapper.xml
  48. 15 7
      fs-service/src/main/resources/mapper/hisStore/FsWechatTemplateScrmMapper.xml
  49. 14 0
      fs-user-app/src/main/java/com/fs/app/controller/AdvController.java
  50. 73 0
      fs-user-app/src/main/java/com/fs/app/controller/CommonController.java
  51. 130 0
      fs-user-app/src/main/java/com/fs/app/controller/CouponStoreController.java
  52. 52 0
      fs-user-app/src/main/java/com/fs/app/controller/IndexController.java
  53. 16 0
      fs-user-app/src/main/java/com/fs/app/controller/StoreActivityController.java
  54. 3 1
      fs-user-app/src/main/java/com/fs/app/controller/StoreOrderController.java
  55. 184 0
      fs-user-app/src/main/java/com/fs/app/controller/app/AddressController.java
  56. 1 0
      fs-user-app/src/main/java/com/fs/app/controller/store/StoreActivityScrmController.java
  57. 1 0
      fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java
  58. 35 0
      fs-user-app/src/main/java/com/fs/app/vo/IndexStroeVO.java

+ 18 - 1
fs-common/src/main/java/com/fs/common/config/FSSysConfig.java

@@ -49,9 +49,26 @@ public class FSSysConfig
 //    private String cwarehouseCode;
 //    private String cwarehouseName;
 
+    String commonApi;
 
+    String accessKeyID;
+    String accessKeySecret;
 
-    String commonApi;
+    public String getAccessKeyID() {
+        return accessKeyID;
+    }
+
+    public void setAccessKeyID(String accessKeyID) {
+        this.accessKeyID = accessKeyID;
+    }
+
+    public String getAccessKeySecret() {
+        return accessKeySecret;
+    }
+
+    public void setAccessKeySecret(String accessKeySecret) {
+        this.accessKeySecret = accessKeySecret;
+    }
 
     public String getKdnId() {
         return kdnId;

+ 14 - 0
fs-common/src/main/java/com/fs/common/utils/PhoneUtils.java

@@ -0,0 +1,14 @@
+package com.fs.common.utils;
+
+import cn.hutool.core.util.StrUtil;
+
+public class PhoneUtils {
+    public static String getLastFourNum(String phone) {
+
+            String lastFourNumber = phone;
+            if (lastFourNumber.length() == 11) {
+                lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+            }
+            return lastFourNumber;
+    }
+}

+ 2 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyAiWorkflowExecMapper.java

@@ -114,4 +114,6 @@ public interface CompanyAiWorkflowExecMapper extends BaseMapper<CompanyAiWorkflo
     );
 
     WxContact selectWxContectByWorkflowInstanceId(@Param("workflowInstanceId") String workflowInstanceId);
+
+    Long selectWxClientIdByWorkflowInstanceId(@Param("workflowInstanceId") String workflowInstanceId);
 }

+ 3 - 2
fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java

@@ -225,6 +225,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
             client.setRoboticId(companyVoiceRobotic.getId());
             client.setCustomerId(Long.parseLong(e));
             client.setIsWeCom(isWeCom);
+            client.setCreateTime(new Date());
             return client;
         }).collect(Collectors.toList());
         companyWxClientServiceImpl.saveBatch(clients);
@@ -894,7 +895,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
 //        redisCache2.deleteObject(EASYCALL_INTENT_RETRY_KEY + result.getUuid());
 
         // dialogue(对话内容)由对方异步写入,回调时可能尚未赋值,进入延迟重试队列等待
-        if (isDialogueEmpty(callPhoneRes.getDialogue())) {
+        if (isDialogueEmpty(callPhoneRes.getDialogue()) && !"未接通".equals(callPhoneRes.getIntent())) {
             String retryKey = EASYCALL_DIALOGUE_RETRY_KEY + result.getUuid();
             Integer retryCount = redisCache2.getCacheObject(retryKey);
             if (retryCount == null) {
@@ -936,7 +937,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
             log.error("easyCall dialogue重试时仍未查询到外呼结果, uuid={}", result.getUuid());
             return;
         }
-        if (isDialogueEmpty(callPhoneRes.getDialogue())) {
+        if (isDialogueEmpty(callPhoneRes.getDialogue()) && !"未接通".equals(callPhoneRes.getIntent())) {
             // dialogue 仍为空,继续判断是否还有剩余重试次数
             String retryKey = EASYCALL_DIALOGUE_RETRY_KEY + result.getUuid();
             Integer retryCount = redisCache2.getCacheObject(retryKey);

+ 57 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyWorkflowEngineImpl.java

@@ -71,6 +71,9 @@ public class CompanyWorkflowEngineImpl implements CompanyWorkflowEngine {
     @Autowired
     CompanyWxAccountMapper companyWxAccountMapper;
 
+    @Autowired
+    CompanyWxClientMapper companyWxClientMapper;
+
     /**
      * 初始化工作流
      * 创建工作流实例并保存初始状态
@@ -632,6 +635,60 @@ public class CompanyWorkflowEngineImpl implements CompanyWorkflowEngine {
             companyWxAccount.setRemark( remark);
             companyWxAccountMapper.updateCompanyWxAccount(companyWxAccount);
         }
+
+        // 加载当前执行记录
+        CompanyAiWorkflowExec currentExec = currentExecutionMapper.selectByWorkflowInstanceId(workflowInstanceId);
+
+        if (currentExec == null) {
+            throw new CustomException("工作流实例不存在: " + workflowInstanceId);
+        }
+        //更新加微结果到wxClient表
+        updateWxClientSuccessByWorkflowInstanceId(workflowInstanceId);
+        // 验证当前节点是否匹配
+        if (!nodeKey.equals(currentExec.getCurrentNodeKey())) {
+            log.error("节点不匹配 - 期望: {}, 实际: {}", nodeKey, currentExec.getCurrentNodeKey());
+            return;
+        }
+
+        // 检查当前工作流是否处于暂停状态
+        if (!Integer.valueOf(ExecutionStatusEnum.PAUSED.getValue()).equals(currentExec.getStatus()) &&
+                !Integer.valueOf(ExecutionStatusEnum.WAITING.getValue()).equals(currentExec.getStatus())) {
+            log.error("工作流未处于暂停状态,无法唤醒::{} " , workflowInstanceId);
+        }
+
+        // 反序列化执行上下文并合并新的输入数据
+        ExecutionContext context = deserializeContext(currentExec);
+
+        // 加载工作流定义
+        CompanyWorkflow definition = loadCompanyWorkflow(currentExec.getWorkflowId());
+
+        // 创建节点实例
+        IWorkflowNode node = createNode(definition, nodeKey);
+        if (node == null) {
+            throw new CustomException("节点不存在: " + nodeKey);
+        }
+
+        // 继续执行节点逻辑
+        ExecutionResult result = node.continueExecute(context);
+
+    }
+
+    /**
+     * 更新加微结果到wxClient表
+     * @param workflowInstanceId
+     */
+    public void updateWxClientSuccessByWorkflowInstanceId(String workflowInstanceId){
+        Long id = currentExecutionMapper.selectWxClientIdByWorkflowInstanceId(workflowInstanceId);
+        CompanyWxClient client = companyWxClientMapper.selectCompanyWxClientById(id);
+        if(null != client && !Integer.valueOf(1).equals(client.getIsAdd())){
+            //更新wxClient表
+            CompanyWxClient companyWxClient = new CompanyWxClient();
+            companyWxClient.setId(id);
+            companyWxClient.setIsAdd(1);
+            companyWxClient.setSuccessAddTime(LocalDateTime.now());
+            companyWxClientMapper.updateCompanyWxClient(companyWxClient);
+        }
+
     }
 
 }

+ 4 - 0
fs-service/src/main/java/com/fs/his/mapper/FsAdvMapper.java

@@ -3,6 +3,7 @@ package com.fs.his.mapper;
 import java.util.List;
 import com.fs.his.domain.FsAdv;
 import com.fs.his.param.FsAdvUParam;
+import com.fs.hisStore.vo.FsAdvListQueryVO;
 import org.apache.ibatis.annotations.Select;
 
 /**
@@ -76,4 +77,7 @@ public interface FsAdvMapper
             "    order by status desc,sort,adv_id desc "+
             "</script>"})
     List<FsAdv> selectFsAdvListUVO(FsAdvUParam map);
+
+    @Select("select * from fs_adv where adv_type=#{advType} and status=1 order by sort desc")
+    List<FsAdvListQueryVO> selectFsAdvListQuery(Integer advType);
 }

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

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.fs.his.domain.FsArticleCate;
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.vo.FsArticleCateListQueryVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -68,4 +69,8 @@ public interface FsArticleCateMapper
     List<OptionsVO> selectFsArticleCateAllList();
 
     List<FsArticleCate> selectFsArticleCateAllListVO(@Param("params") Map<String, Object> params);
+
+    @Select("select * from fs_article_cate where status=1 and is_del=0 order by sort asc " )
+    List<FsArticleCateListQueryVO> selectFsArticleCateListQuery();
+
 }

+ 22 - 0
fs-service/src/main/java/com/fs/his/mapper/FsArticleMapper.java

@@ -6,6 +6,8 @@ import com.fs.his.param.FsArticleListUParam;
 import com.fs.his.vo.FsArticleListUVO;
 import com.fs.his.vo.FsArticleListVO;
 import com.fs.his.vo.FsArticleVO;
+import com.fs.store.param.FsArticleQueryParam;
+import com.fs.store.vo.FsArticleListQueryVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -90,4 +92,24 @@ public interface FsArticleMapper
             "</script>"})
 
     List<FsArticleListVO> selectFsArticleListVO(FsArticle fsArticle);
+
+
+    @Select({"<script> " +
+            "select a.* from fs_article a  " +
+            "where 1=1 " +
+            "<if test = 'maps.isTui != null    '> " +
+            "and a.is_tui =#{maps.isTui} " +
+            "</if>" +
+            "<if test = 'maps.cateId != null and maps.cateId != 0    '> " +
+            "and a.cate_id =#{maps.cateId} " +
+            "</if>" +
+            "<if test = 'maps.keyword != null and maps.keyword != \"\"    '> " +
+            "and a.title like concat('%', #{maps.keyword}, '%') " +
+            "</if>" +
+            " order by a.sort desc "+
+            "<if test = 'maps.limit != null    '> " +
+            "limit #{maps.limit} " +
+            "</if>" +
+            "</script>"})
+    List<FsArticleListQueryVO> selectFsArticleListQuery(@Param("maps") FsArticleQueryParam param);
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/mapper/FsCityMapper.java

@@ -73,4 +73,6 @@ public interface FsCityMapper
     @Select("SELECT city_id,city_name FROM fs_city where parent_id=0 ")
     List<CitysAreaVO> getCitysArea();
 
+    @Select("select * from fs_city where is_show=1")
+    List<FsCity> selectFsCitys();
 }

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

@@ -243,8 +243,13 @@ public interface FsPrescribeMapper
             "OR drug_doctor_sign_url LIKE '%htj-1258038825.cos.ap-beijing.myqcloud.com%' \n" +
             "order by  prescribe_id desc ")
     List<FsPrescribe> selectFsPrescribeByPrescribeByimg();
+
     @Select("select prescribe_code from fs_prescribe where store_order_id=#{orderId}")
     String selectFsPrescribeCodeByOrderId(String  orderId);
+
+    @Select("select * from fs_prescribe where store_order_id=#{orderId} order by prescribe_id desc  limit 1 ")
+    FsPrescribe selectFsPrescribeByOrderId(Long orderId);
+
     @Select("select prescribe_code from fs_prescribe where store_order_id=(select order_id from fs_store_order where order_code=#{businessCode} )")
     String selectFsPrescribeCodeByOrderCode(String businessCode);
     @Select({"<script> " +

+ 7 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStoreProductMapper.java

@@ -6,6 +6,7 @@ import com.fs.his.domain.FsStoreProductRule;
 import com.fs.his.param.FsProductAttrValueParam;
 import com.fs.his.param.FsStoreProductListSParam;
 import com.fs.his.vo.*;
+import com.fs.store.vo.FsStoreProductActivityListVO;
 import com.fs.hisStore.vo.FsStoreProductListVO;
 import com.fs.live.domain.LiveGoods;
 import org.apache.ibatis.annotations.Param;
@@ -283,4 +284,10 @@ public interface FsStoreProductMapper {
     List<FsStoreProductListVO> liveList(@Param("maps") LiveGoods maps);
 
     FsStoreProduct selectFsStoreProductByBarCode(@Param("barCode") String barCode);
+
+    @Select({"<script> " +
+            "select * from fs_store_product where find_in_set(product_id,#{ids})  " +
+            "</script>"})
+    List<FsStoreProductActivityListVO> selectFsStoreProductByIds(@Param("ids")String productIds);
+
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserAddressMapper.java

@@ -91,4 +91,10 @@ public interface FsUserAddressMapper
             "            <if test=\"isDefault != null \"> and is_default = #{isDefault}</if>" +
             "</script>"})
     Long selectFsUserAddressListCount(FsUserAddress fsUserAddress);
+
+    @Select("select city_id from fs_city where name=#{city} and level = 1 limit 1 ")
+    Long selectFsUserAddressByCityName(String city);
+
+    @Update(" update fs_user_address set is_del=1 where user_id = #{userId}")
+    Integer delAllAddress(Long userId);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/param/FsPrescribeParam.java

@@ -11,6 +11,9 @@ public class FsPrescribeParam {
     /** id */
     private Long prescribeId;
 
+    private Long orderId;
+
+
     /** 处方类型 1问诊 2订单 */
     @Excel(name = "处方类型 1西药 2中药")
     private Integer prescribeType;
@@ -50,6 +53,9 @@ public class FsPrescribeParam {
     @Excel(name = "是否有过敏史", readConverterExp = "传=值:是/否")
     private String isHistoryAllergic;
 
+    private String nowIllness;//现病史
+    private String historyIllness;//既往史
+
     /** 过敏史 */
     @Excel(name = "过敏史")
     private String historyAllergic;

+ 3 - 0
fs-service/src/main/java/com/fs/his/service/IFsAdvService.java

@@ -4,6 +4,7 @@ import java.util.List;
 import com.fs.his.domain.FsAdv;
 import com.fs.his.param.FsAdvUParam;
 import com.fs.his.vo.FsAdvUVO;
+import com.fs.hisStore.vo.FsAdvListQueryVO;
 
 /**
  * 广告Service接口
@@ -65,4 +66,6 @@ public interface IFsAdvService
 
     List<FsAdv> selectFsAdvListUVO(FsAdvUParam map);
 
+    List<FsAdvListQueryVO> selectFsAdvListQuery(Integer advType);
+
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/service/IFsArticleCateService.java

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.fs.his.domain.FsArticleCate;
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.vo.FsArticleCateListQueryVO;
 
 /**
  * 文章分类Service接口
@@ -66,4 +67,5 @@ public interface IFsArticleCateService
 
     List<FsArticleCate> selectFsArticleCateAllListVO(Map<String, Object> params);
 
+    List<FsArticleCateListQueryVO> selectFsArticleCateListQuery();
 }

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

@@ -6,6 +6,8 @@ import com.fs.his.param.FsArticleListUParam;
 import com.fs.his.vo.FsArticleListUVO;
 import com.fs.his.vo.FsArticleListVO;
 import com.fs.his.vo.FsArticleVO;
+import com.fs.store.param.FsArticleQueryParam;
+import com.fs.store.vo.FsArticleListQueryVO;
 
 /**
  * 文章Service接口
@@ -68,4 +70,7 @@ public interface IFsArticleService
     int updateFsArticleViews(Long articleId);
 
     List<FsArticleListVO> selectFsArticleListVO(FsArticle fsArticle);
+
+
+    List<FsArticleListQueryVO> selectFsArticleListQuery(FsArticleQueryParam param);
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/service/IFsCityService.java

@@ -67,4 +67,5 @@ public interface IFsCityService
 
     List<CitysAreaVO> getCitysArea();
 
+    List<FsCity> selectFsCitys();
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/service/IFsStoreProductService.java

@@ -12,6 +12,7 @@ import com.fs.his.param.FsStoreProductListSParam;
 import com.fs.his.vo.*;
 import com.fs.hisStore.vo.FsStoreProductListVO;
 import com.fs.live.domain.LiveGoods;
+import com.fs.store.vo.FsStoreProductActivityListVO;
 
 /**
  * 商品Service接口
@@ -108,4 +109,6 @@ public interface IFsStoreProductService
     List<FsStoreProduct> getStoreProductInProductIds(List<Long> productIds);
 
     List<FsStoreProductListVO> liveList(LiveGoods liveId);
+
+    List<FsStoreProductActivityListVO> selectFsStoreProductByIds(String productIds);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserAddressService.java

@@ -71,4 +71,7 @@ public interface IFsUserAddressService
 
     Long selectFsUserAddressListCount(FsUserAddress fsUserAddress);
 
+    Long selectFsUserAddressByCityName(String city);
+
+    Integer delAllAddress(Long userId);
 }

+ 8 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsAdvServiceImpl.java

@@ -4,6 +4,7 @@ import java.util.Collections;
 import java.util.List;
 import com.fs.common.utils.DateUtils;
 import com.fs.his.param.FsAdvUParam;
+import com.fs.hisStore.vo.FsAdvListQueryVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsAdvMapper;
@@ -106,4 +107,11 @@ public class FsAdvServiceImpl implements IFsAdvService
     public List<FsAdv> selectFsAdvListUVO(FsAdvUParam map) {
         return fsAdvMapper.selectFsAdvListUVO(map);
     }
+
+    @Override
+    public List<FsAdvListQueryVO> selectFsAdvListQuery(Integer advType) {
+        return fsAdvMapper.selectFsAdvListQuery(advType);
+    }
+
+
 }

+ 7 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsArticleCateServiceImpl.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.vo.FsArticleCateListQueryVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsArticleCateMapper;
@@ -104,4 +105,10 @@ public class FsArticleCateServiceImpl implements IFsArticleCateService
 
        return fsArticleCateMapper.selectFsArticleCateAllListVO(params);
     }
+
+
+    @Override
+    public List<FsArticleCateListQueryVO> selectFsArticleCateListQuery() {
+        return fsArticleCateMapper.selectFsArticleCateListQuery();
+    }
 }

+ 17 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsArticleServiceImpl.java

@@ -6,6 +6,10 @@ import com.fs.his.param.FsArticleListUParam;
 import com.fs.his.vo.FsArticleListUVO;
 import com.fs.his.vo.FsArticleListVO;
 import com.fs.his.vo.FsArticleVO;
+import com.fs.hisStore.mapper.FsArticleViewsScrmMapper;
+import com.fs.hisStore.vo.FsArticleViewListQueryVO;
+import com.fs.store.param.FsArticleQueryParam;
+import com.fs.store.vo.FsArticleListQueryVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsArticleMapper;
@@ -24,6 +28,9 @@ public class FsArticleServiceImpl implements IFsArticleService
     @Autowired
     private FsArticleMapper fsArticleMapper;
 
+    @Autowired
+    private FsArticleViewsScrmMapper viewsMapper;
+
     /**
      * 查询文章
      *
@@ -112,4 +119,14 @@ public class FsArticleServiceImpl implements IFsArticleService
     public List<FsArticleListVO> selectFsArticleListVO(FsArticle fsArticle) {
         return fsArticleMapper.selectFsArticleListVO(fsArticle);
     }
+
+    @Override
+    public List<FsArticleListQueryVO> selectFsArticleListQuery(FsArticleQueryParam param) {
+        List<FsArticleListQueryVO> list=fsArticleMapper.selectFsArticleListQuery(param);
+        for(FsArticleListQueryVO vo:list){
+            List<FsArticleViewListQueryVO> viewsList=viewsMapper.selectFsArticleViewsTopByArticleId(vo.getArticleId());
+            vo.setViewsList(viewsList);
+        }
+        return list;
+    }
 }

+ 11 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsCityServiceImpl.java

@@ -118,5 +118,16 @@ public class FsCityServiceImpl implements IFsCityService
         return list;
     }
 
+    @Override
+    public List<FsCity> selectFsCitys() {
+        List<FsCity> redisList = redisCache.getCacheObject("city");
+        if(redisList != null){
+            return redisList;
+        }
+        List<FsCity> list = fsCityMapper.selectFsCitys();
+        redisCache.setCacheObject("city", list);
+        return list;
+    }
+
 
 }

+ 23 - 4
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeServiceImpl.java

@@ -3,12 +3,14 @@ package com.fs.his.service.impl;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.fs.common.config.FSSysConfig;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.util.OrderUtils;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.*;
 import com.fs.his.dto.FsPackagePatientDTO;
@@ -16,10 +18,7 @@ import com.fs.his.dto.FsPackagePruductDTO;
 import com.fs.his.dto.FsPrescribeUsageDTO;
 import com.fs.his.mapper.*;
 import com.fs.his.param.*;
-import com.fs.his.service.IFsDoctorService;
-import com.fs.his.service.IFsPrescribeDrugService;
-import com.fs.his.service.IFsPrescribeService;
-import com.fs.his.service.IFsStoreOrderService;
+import com.fs.his.service.*;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.utils.IdCardUtil;
 import com.fs.his.utils.PhoneUtil;
@@ -30,6 +29,9 @@ import com.fs.im.dto.MsgDTO;
 import com.fs.im.dto.MsgDataDTO;
 import com.fs.im.dto.MsgDataFormatDTO;
 import com.fs.im.service.IImService;
+import com.fs.store.bean.DrugV2;
+import com.fs.store.bean.PrescribeV2;
+import com.fs.store.param.PrescribeV2Param;
 import com.fs.system.oss.CloudStorageService;
 import com.fs.system.oss.OSSFactory;
 import com.google.zxing.WriterException;
@@ -82,6 +84,22 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
     ConfigUtil configUtil;
     @Autowired
     FsExportTaskMapper fsExportTaskMapper;
+
+    @Autowired
+    IFsStoreOrderItemService orderItemService;
+
+    @Autowired
+    IFsPatientService patientService;
+
+    @Autowired
+    IFsUserService userService;
+
+    @Autowired
+    FSSysConfig fsSysConfig;
+
+    @Autowired
+    IFsStoreProductService productService;
+
     /**
      * 查询处方
      *
@@ -992,4 +1010,5 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
         return fsPrescribeMapper.selectByOrderId(orderId);
     }
 
+
 }

+ 7 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsStoreProductServiceImpl.java

@@ -34,6 +34,7 @@ import com.fs.his.param.FsStoreProductListSParam;
 import com.fs.his.service.IFsPackageService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.*;
+import com.fs.store.vo.FsStoreProductActivityListVO;
 import com.fs.hisStore.vo.FsStoreProductListVO;
 import com.fs.live.domain.LiveGoods;
 import org.apache.commons.lang3.StringUtils;
@@ -529,7 +530,7 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
                 } else if (erpType == 5){
                     //聚水潭商品同步
                     params.setProductIdList(Arrays.asList(product.getProductId()));
-                    
+
                     jSTErpGoodsService.addGoods(params);
                 }
             }
@@ -878,4 +879,9 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
     public List<FsStoreProductListVO> liveList(LiveGoods liveId) {
         return fsStoreProductMapper.liveList(liveId);
     }
+
+    @Override
+    public List<FsStoreProductActivityListVO> selectFsStoreProductByIds(String productIds) {
+        return fsStoreProductMapper.selectFsStoreProductByIds(productIds);
+    }
 }

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

@@ -181,6 +181,9 @@ public class FsUserAddressServiceImpl implements IFsUserAddressService
     public Long selectFsUserAddressListCount(FsUserAddress fsUserAddress) {
         return fsUserAddressMapper.selectFsUserAddressListCount(fsUserAddress);
     }
+
+
+
     private String encrypt(String content, String keyValue, String charset) {
         if (keyValue != null) {
             content = content + keyValue;
@@ -208,4 +211,14 @@ public class FsUserAddressServiceImpl implements IFsUserAddressService
         }
         return sb.toString().toLowerCase();
     }
+
+    @Override
+    public Long selectFsUserAddressByCityName(String city) {
+        return fsUserAddressMapper.selectFsUserAddressByCityName(city);
+    }
+
+    @Override
+    public Integer delAllAddress(Long userId) {
+        return fsUserAddressMapper.delAllAddress(userId);
+    }
 }

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

@@ -487,4 +487,11 @@ public interface FsStoreProductScrmMapper
             "</script>"})
     List<FsStoreProductListQueryVO> selectFsStoreProductSidebarListQuery(@Param("maps")FsStoreOrderScrmSidebarVO param);
 
+
+    @Select("select * from fs_store_product where is_del=0 and is_show=1 and  is_new=1 and is_display=1 order by sort desc, product_id DESC limit #{count}")
+    List<FsStoreProductListQueryVO> selectFsStoreProductNewQueryCount(int count);
+
+    @Select("select * from fs_store_product where is_del=0 and is_show=1 and  is_hot=1 and is_display=1 order by sort desc, product_id DESC limit #{count}")
+    List<FsStoreProductListQueryVO> selectFsStoreProductHotQueryCount(int count);
+
 }

+ 15 - 8
fs-service/src/main/java/com/fs/hisStore/mapper/FsWechatTemplateScrmMapper.java

@@ -1,20 +1,23 @@
 package com.fs.hisStore.mapper;
 
 import java.util.List;
+import java.util.Set;
+
 import com.fs.hisStore.domain.FsWechatTemplateScrm;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 /**
  * 微信模板Mapper接口
- * 
+ *
  * @author fs
  * @date 2022-03-15
  */
-public interface FsWechatTemplateScrmMapper 
+public interface FsWechatTemplateScrmMapper
 {
     /**
      * 查询微信模板
-     * 
+     *
      * @param id 微信模板ID
      * @return 微信模板
      */
@@ -22,7 +25,7 @@ public interface FsWechatTemplateScrmMapper
 
     /**
      * 查询微信模板列表
-     * 
+     *
      * @param fsWechatTemplate 微信模板
      * @return 微信模板集合
      */
@@ -30,7 +33,7 @@ public interface FsWechatTemplateScrmMapper
 
     /**
      * 新增微信模板
-     * 
+     *
      * @param fsWechatTemplate 微信模板
      * @return 结果
      */
@@ -38,7 +41,7 @@ public interface FsWechatTemplateScrmMapper
 
     /**
      * 修改微信模板
-     * 
+     *
      * @param fsWechatTemplate 微信模板
      * @return 结果
      */
@@ -46,7 +49,7 @@ public interface FsWechatTemplateScrmMapper
 
     /**
      * 删除微信模板
-     * 
+     *
      * @param id 微信模板ID
      * @return 结果
      */
@@ -54,7 +57,7 @@ public interface FsWechatTemplateScrmMapper
 
     /**
      * 批量删除微信模板
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
@@ -62,8 +65,12 @@ public interface FsWechatTemplateScrmMapper
 
     @Select("select * from fs_wechat_template where tempkey=#{key}")
     FsWechatTemplateScrm selectFsWechatTemplateByKey(String key);
+
     @Select("select temp_id from fs_wechat_template where status=1")
     List<String> selectFsWechatTemplateIds();
+
     @Select("select temp_id from fs_wechat_template where find_in_set(tempkey,#{key})")
     List<String> selectFsWechatTemplateIdsByKeys(String key);
+
+    List<String> selectFsWechatTemplateIdsByKeySet(@Param("items") Set<String> key);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -12,6 +12,7 @@ import com.fs.common.core.domain.R;
 import com.fs.company.domain.CompanyUser;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
 import com.fs.erp.domain.ErpOrder;
+import com.fs.his.domain.FsStoreOrder;
 import com.fs.his.dto.FsStoreOrderAmountScrmStatsQueryDto;
 import com.fs.his.enums.PaymentMethodEnum;
 import com.fs.his.param.FsIntegralOrderDoPayParam;
@@ -402,4 +403,6 @@ public interface IFsStoreOrderScrmService
     R payment(FsIntegralOrderDoPayParam param, PaymentMethodEnum paymentMethodEnum);
 
     R zfbPayment(FsStoreOrderDoPayParam param);
+
+//    R getExpressMulti(FsStoreOrder order);
 }

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

@@ -101,8 +101,10 @@ public interface IFsStoreProductScrmService
 
 
     List<FsStoreProductListQueryVO> selectFsStoreProductNewQuery(int count, String appId);
+    List<FsStoreProductListQueryVO> selectFsStoreProductNewQueryCount(int count);
 
     List<FsStoreProductListQueryVO> selectFsStoreProductHotQuery(int count, String appId);
+    List<FsStoreProductListQueryVO> selectFsStoreProductHotQueryCount(int count);
 
     /** 绿色有机分页(与 selectFsStoreProductNewQuery 条件一致,支持分页) */
     List<FsStoreProductListQueryVO> selectFsStoreProductNewQueryPage(int pageNum, int pageSize, String appId, String keyword);

+ 26 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -113,6 +113,7 @@ import com.fs.hisStore.constants.StoreConstants;
 import com.fs.hisStore.domain.*;
 import com.fs.hisStore.enums.*;
 import com.fs.hisStore.service.*;
+import com.fs.store.domain.FsStoreDelivers;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.service.ISysConfigService;
 import com.fs.system.service.ISysDictTypeService;
@@ -219,6 +220,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     @Autowired
     private FsStoreCartScrmMapper cartMapper;
 
+//    @Autowired
+//    private FsStoreDeliversMapper fsStoreDeliversMapper;
 
     @Autowired
     private FsUserCompanyUserMapper fsUserCompanyUserMapper;
@@ -6437,4 +6440,27 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         }
         return payPostage;
     }
+
+//    @Override
+//    public R getExpressMulti(FsStoreOrder order) {
+//        //顺丰轨迹查询处理
+//        String lastFourNumber = PhoneUtils.getLastFourNum(order.getUserPhone());
+//        // 获取该订单关联的物流信息
+//        List<FsStoreDelivers> fsStoreDelivers = fsStoreDeliversMapper.findByOrderId(order.getId());
+//        if(CollectionUtils.isEmpty(fsStoreDelivers)){
+//            return R.ok("当前订单号暂无物流信息");
+//        }
+//
+//        List<ExpressInfoDTO> result = new ArrayList<>();
+//        for (FsStoreDelivers fsStoreDeliver : fsStoreDelivers) {
+//            ExpressInfoDTO dto=expressService.getExpressInfo(order.getOrderCode(),
+//                    fsStoreDeliver.getDeliverSn(),
+//                    fsStoreDeliver.getDeliverId(),
+//                    lastFourNumber);
+//            result.add(dto);
+//        }
+//
+//        return R.ok().put("data",result);
+//    }
+
 }

+ 10 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -1181,6 +1181,11 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
         return fsStoreProductMapper.selectFsStoreProductNewQuery(map);
     }
 
+    @Override
+    public List<FsStoreProductListQueryVO> selectFsStoreProductNewQueryCount(int count) {
+        return fsStoreProductMapper.selectFsStoreProductNewQueryCount(count);
+    }
+
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductHotQuery(int count, String appId) {
         HashMap<String, Object> map = new HashMap<>();
@@ -1190,6 +1195,11 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
         return fsStoreProductMapper.selectFsStoreProductHotQuery(map);
     }
 
+    @Override
+    public List<FsStoreProductListQueryVO> selectFsStoreProductHotQueryCount(int count) {
+        return fsStoreProductMapper.selectFsStoreProductHotQueryCount(count);
+    }
+
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductNewQueryPage(int pageNum, int pageSize, String appId, String keyword) {
         HashMap<String, Object> map = new HashMap<>();

+ 21 - 0
fs-service/src/main/java/com/fs/store/bean/Drug.java

@@ -0,0 +1,21 @@
+package com.fs.store.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class Drug implements Serializable {
+    String drug_common_name;//药品名称
+    String drug_specification;//药品规格
+    String usage_method;//使⽤⽅法
+    String usage_frequency_unit;//药品频次
+    String usage_per_use_count;//每次⽤药数量
+    String usage_per_use_unit;//每次⽤药单位
+    String usage_days;//天数
+    String sale_amount;//药品数量
+    String sale_unit;//药品数量单位
+    String instructions;//药品说明书
+    String approval_number;//药品产品批准⽂号⽤药单位
+
+}

+ 23 - 0
fs-service/src/main/java/com/fs/store/bean/DrugV2.java

@@ -0,0 +1,23 @@
+package com.fs.store.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class DrugV2 implements Serializable {
+    Long drugCode;//药品名称
+    String drugCommonName;//药品名称
+    String drugSpecification;//药品规格
+    String usageMethod;//使⽤⽅法
+    String frequencyUnit;//药品频次
+    String frequencyNum;//频次数量,例:1 等
+    String dosaNum;//每次⽤药数量
+    String dosaUnit;//每次⽤药单位
+    String usageDays;//天数
+    String saleAmount;//药品数量
+    String saleUnit;//药品数量单位
+    String instructions;//药品说明书
+    String approvalNumber;//药品产品批准⽂号⽤药单位
+
+}

+ 44 - 0
fs-service/src/main/java/com/fs/store/bean/Prescribe.java

@@ -0,0 +1,44 @@
+package com.fs.store.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class Prescribe implements Serializable {
+    String rp_type;//药品类型:01⻄药 02中药
+    String rp_id;//处⽅单ID(唯⼀ID)
+    String pharmacy_code;//⻔店ID
+    String pharmacy_name;//⻔店名称
+    String chief_complaint;//病情描述(主诉)
+    String now_illness;//现病史
+    String history_illness;//既往史
+    Integer patient_age;//患者年龄
+    String patient_name;//患者姓名
+    Integer weight;//体重
+    String icd_name;//对应icd名称
+    String icd_name2;//对应icd名称2
+    String is_history_allergic;//是否有过敏史(传值:是/否)
+    String history_allergic;
+    String liver_unusual;//肝功能是否异常(传值:是/否)
+    String renal_unusual;//肾功能是否异常(传值:是/否)
+    String lactation_flag;//是否是备孕/怀孕/哺乳期(传值:是/否)
+    String patient_tel;//患者⼿机号(通过订单号去订单中⼼查)
+    String patient_gender;//患者性别(传数字,1男 2⼥)
+    String[] record_pic;//复诊凭证
+    String rp_create_time;//处⽅开具时间(来互联⽹医院开⽅的时间)
+    String rp_url_type;//处⽅⽂件格式(传值:png/jpg)
+    String pharmacist_id;//药师ID
+    String pharmacist_name;//药师名称
+    String pharmacist_autograph;//药师签名地址
+    String dispensing_pharmacist_id;//发药药师ID
+    String dispensing_pharmacist_name;//发药药师名称
+    String dispensing_pharmacist_autograph;//发药药师签名地址
+    String deployment_pharmacist_id;//配药药师ID
+    String deployment_pharmacist_name;//配药药师名称
+    String deployment_pharmacist_autograph;//配药药师签名地址
+    Integer is_pharmacist_audit;//是否提供药师审核,0-不使⽤⼀线平台的药师审核,1-使⽤⼀线平台的药师审核
+    String callback_url;//回调地址,如果填写,审核完处⽅后⾃动回调到第三⽅药房服务接⼝
+    List<Drug> drug_list;
+}

+ 46 - 0
fs-service/src/main/java/com/fs/store/bean/PrescribeV2.java

@@ -0,0 +1,46 @@
+package com.fs.store.bean;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class PrescribeV2 implements Serializable {
+    String drugType;//药品类型:01⻄药 02中药
+    String onlyId;//处⽅单ID(唯⼀ID)
+    String drugstoreName;//药店名称
+    String chiefComplaint;//病情描述(主诉)
+    String nowIllness;//现病史
+    String historyIllness;//既往史
+    Integer patientAge;//患者年龄
+    String patientName;//患者姓名
+    Integer weight;//体重
+    String icdName = "暂无";//对应icd名称
+    Integer patientAllergy;//是否有过敏史(传值:是/否)
+    String patientAllergyDesc;
+    Integer liverUnusual;//肝功能是否异常(传值:是/否)
+    Integer renalUnusual;//肾功能是否异常(传值:是/否)
+    Integer lactationFlag;//是否是备孕/怀孕/哺乳期(传值:是/否)
+    String patientMobile;//患者⼿机号(通过订单号去订单中⼼查)
+    Integer patientSex;//患者性别(传数字,1男 2⼥)
+    String[] recordPic;//复诊凭证
+    String createTime;//处⽅开具时间(来互联⽹医院开⽅的时间)
+    String pictureType;//处⽅⽂件格式(传值:png/jpg)
+    String pharmacistId;//药师ID
+    String pharmacistName;//药师名称
+    String pharmacistAutograph;//药师签名地址
+    String dispensingPharmacistId;//发药药师ID
+    String dispensingPharmacistName;//发药药师名称
+    String dispensingPharmacistAutograph;//发药药师签名地址
+    String deploymentPharmacistId;//配药药师ID
+    String deploymentPharmacistName;//配药药师名称
+    String deploymentPharmacistAutograph;//配药药师签名地址
+    Integer isPharmacistAudit;//是否提供药师审核,0-不使⽤⼀线平台的药师审核,1-使⽤⼀线平台的药师审核
+    String callbackUrl;//回调地址,如果填写,审核完处⽅后⾃动回调到第三⽅药房服务接⼝
+    String takingUsage;//服用方法(中药)
+    String takingRequire;//服用要求(中药
+    String takingNum;//服用付数(中药)(中药处方必传字段,西药、中成药非必传)
+    String hospitalCode;//开方医院标识(同步给平台方)
+    List<DrugV2> drugList;
+}

+ 13 - 0
fs-service/src/main/java/com/fs/store/param/FsArticleQueryParam.java

@@ -0,0 +1,13 @@
+package com.fs.store.param;
+
+import com.fs.common.param.BaseQueryParam;
+import lombok.Data;
+
+@Data
+public class FsArticleQueryParam extends BaseQueryParam
+{
+
+    private Long cateId;
+    private Integer isTui;
+
+}

+ 58 - 0
fs-service/src/main/java/com/fs/store/param/FsUserAddressAddEditParam.java

@@ -0,0 +1,58 @@
+package com.fs.store.param;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+
+/**
+ * 用户地址对象 fs_user_address
+ *
+ * @author fs
+ * @date 2022-03-15
+ */
+@Data
+public class FsUserAddressAddEditParam implements Serializable
+{
+
+    /** 用户地址id */
+    private Long addressId;
+
+    /** 用户id */
+    private Long userId;
+
+    /** 收货人姓名 */
+    @NotBlank(message = "收货人姓名不能为空")
+    @Length(max = 10,message = "长度必须小于10个字符")
+    private String realName;
+
+    /** 收货人电话 */
+    @NotBlank(message = "收货人电话不能为空")
+    @Pattern(regexp="^1[3456789]\\d{9}$",message="手机号格式不正确")
+    private String phone;
+
+    /** 收货人所在省 */
+    @NotBlank(message = "收货人地址不能为空")
+    private String province;
+
+    /** 收货人所在市 */
+    @NotBlank(message = "收货人地址不能为空")
+    private String city;
+
+    /** 收货人所在区 */
+    @NotBlank(message = "收货人地址不能为空")
+    private String district;
+
+    /** 收货人详细地址 */
+    @NotBlank(message = "收货人详细地址不能为空")
+    private String detail;
+
+    /** 是否默认 */
+    private Integer isDefault;
+
+    private Long cityId;
+
+}

+ 20 - 0
fs-service/src/main/java/com/fs/store/param/PrescribeV2Param.java

@@ -0,0 +1,20 @@
+package com.fs.store.param;
+
+import com.fs.store.bean.PrescribeV2;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class PrescribeV2Param implements Serializable {
+    String accessKeyID;//操作编码uporder表示上传订单,getorder表示回传处⽅信息
+    String accessKeySecret;//为对接⼚商提供的编码,Y001表示
+    String timestamp;//调⽤接⼝时的时间戳
+    String sig;//输⼊参数计算后的签名结果
+    PrescribeV2 data;
+
+
+
+
+
+}

+ 36 - 0
fs-service/src/main/java/com/fs/store/vo/FsArticleListQueryVO.java

@@ -0,0 +1,36 @@
+package com.fs.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.hisStore.vo.FsArticleViewListQueryVO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class FsArticleListQueryVO implements Serializable
+{
+
+    /** ID */
+    private Integer articleId;
+
+    /** 分类ID */
+    private Long cateId;
+
+    /** 标题 */
+    private String title;
+
+    /** 封面图片 */
+    private String imageUrl;
+
+
+    /** 浏览数 */
+    private Long views;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date publishTime;
+
+    List<FsArticleViewListQueryVO> viewsList;
+
+}

+ 59 - 0
fs-service/src/main/java/com/fs/store/vo/FsStoreProductActivityListVO.java

@@ -0,0 +1,59 @@
+package com.fs.store.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+/**
+ * 商品对象 fs_store_product
+ *
+ * @author fs
+ * @date 2022-03-15
+ */
+public class FsStoreProductActivityListVO implements Serializable
+{
+
+    /** 商品id */
+    private Long productId;
+
+    /** 商品图片 */
+    private String image;
+
+    /** 商品名称 */
+    private String productName;
+
+    /** 商品简介 */
+    private String productInfo;
+
+    /** 关键字 */
+    private String keyword;
+
+
+    /** 商品价格 */
+    private BigDecimal price;
+
+    /** 市场价 */
+    private BigDecimal otPrice;
+
+
+    /** 单位名 */
+    private String unitName;
+
+    /** 销量 */
+    private Long sales;
+
+    /** 库存 */
+    private Long stock;
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+    /**
+     * 仓库代码
+     */
+    private String warehouseCode;
+
+
+}

+ 27 - 0
fs-service/src/main/java/com/fs/system/config/SnowflakeUtils.java

@@ -0,0 +1,27 @@
+package com.fs.system.config;
+
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.IdUtil;
+
+public class SnowflakeUtils {
+
+    private static Snowflake snowflake;
+
+    public static void init(long workerId, long datacenterId){
+        snowflake = IdUtil.getSnowflake(workerId, datacenterId);
+    }
+
+    public static String nextId() {
+        if (snowflake == null) {
+            throw new IllegalStateException("SnowflakeUtils not initialized");
+        }
+        return snowflake.nextIdStr();
+    }
+
+    public static long nextIdLong() {
+        if (snowflake == null) {
+            throw new IllegalStateException("SnowflakeUtils not initialized");
+        }
+        return snowflake.nextId();
+    }
+}

+ 2 - 2
fs-service/src/main/java/com/fs/wxwork/service/WxIpadService.java

@@ -41,12 +41,12 @@ public class WxIpadService {
 
     public void sendTxt(WxTxtVo vo){
         String url = getUrl(vo.getServerId());
-        ResponseResult<Void> result = WxHttpUtil.postWithType(url, vo, new TypeReference<ResponseResult<Void>>() {
+        ResponseResult<Void> result = WxHttpUtil.postWithType(url+"/app/common/sendMsg", vo, new TypeReference<ResponseResult<Void>>() {
         }, vo.getServerId());
     }
     public void addWx(AddWxActionParam vo){
         String url = getUrl(vo.getServerId());
-        ResponseResult<Void> result = WxHttpUtil.postWithType(url, vo, new TypeReference<ResponseResult<Void>>() {
+        ResponseResult<Void> result = WxHttpUtil.postWithType(url+"/app/common/addWxAction", vo, new TypeReference<ResponseResult<Void>>() {
         }, vo.getServerId());
     }
 }

+ 1 - 1
fs-service/src/main/resources/application-druid-sxjz.yml

@@ -44,7 +44,7 @@ spring:
                     password: Sxdtcbm@#+!2025
                 # 从库数据源
                 slave:
-                    url: jdbc:mysql://139.155.247.58:2345/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://172.27.0.6:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                     username: root
                     password: Sxdtcbm@#+!2025
                 # 初始连接数

+ 1 - 1
fs-service/src/main/resources/application-druid-sxtb.yml

@@ -44,7 +44,7 @@ spring:
                     password: Sxdtcbm@#+!2025
                 # 从库数据源
                 slave:
-                    url: jdbc:mysql://139.155.247.58:2345/fs_his_sxtb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://172.27.0.6:3306/fs_his_sxtb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                     username: root
                     password: Sxdtcbm@#+!2025
                 # 初始连接数

+ 9 - 1
fs-service/src/main/resources/mapper/company/CompanyAiWorkflowExecMapper.xml

@@ -265,7 +265,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             t3.user_id as crmUserId,
             t3.user_name as remark,
             t3.phone as phone,
-            t2.wx_client_id as accountId,
+            t2.wx_client_id as wxClientId,
             t4.account_id as accountId,
             t4.company_id as companyId,
             t4.company_user_id as companyUserId
@@ -277,4 +277,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE
             t1.workflow_instance_id = #{workflowInstanceId}
     </select>
+
+    <select id="selectWxClientIdByWorkflowInstanceId" resultType="java.lang.Long" >
+        select
+            t2.wx_client_id
+        from company_ai_workflow_exec t1
+                 inner join company_voice_robotic_business t2 on t1.business_key = t2.id
+        where t1.workflow_instance_id = #{workflowInstanceId}
+    </select>
 </mapper>

+ 1 - 0
fs-service/src/main/resources/mapper/company/CompanyWxClientMapper.xml

@@ -132,6 +132,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="dialogId != null">dialog_id = #{dialogId},</if>
             <if test="accountId != null">account_id = #{accountId},</if>
             <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="successAddTime != null">success_add_time = #{successAddTime},</if>
         </trim>
         where id = #{id}
     </update>

+ 15 - 7
fs-service/src/main/resources/mapper/hisStore/FsWechatTemplateScrmMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.hisStore.mapper.FsWechatTemplateScrmMapper">
-    
+
     <resultMap type="FsWechatTemplateScrm" id="FsWechatTemplateResult">
         <result property="id"    column="id"    />
         <result property="tempkey"    column="tempkey"    />
@@ -23,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectFsWechatTemplateList" parameterType="FsWechatTemplateScrm" resultMap="FsWechatTemplateResult">
         <include refid="selectFsWechatTemplateVo"/>
-        <where>  
+        <where>
             <if test="tempkey != null  and tempkey != ''"> and tempkey = #{tempkey}</if>
             <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
             <if test="content != null  and content != ''"> and content = #{content}</if>
@@ -33,12 +33,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="type != null  and type != ''"> and type = #{type}</if>
         </where>
     </select>
-    
+
     <select id="selectFsWechatTemplateById" parameterType="Integer" resultMap="FsWechatTemplateResult">
         <include refid="selectFsWechatTemplateVo"/>
         where id = #{id}
     </select>
-        
+
+    <select id="selectFsWechatTemplateIdsByKeySet" resultType="java.lang.String">
+        select temp_id from fs_wechat_template where tempkey in
+        <foreach collection="items" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+    </select>
+
+
     <insert id="insertFsWechatTemplate" parameterType="FsWechatTemplateScrm" useGeneratedKeys="true" keyProperty="id">
         insert into fs_wechat_template
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -86,10 +94,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteFsWechatTemplateByIds" parameterType="String">
-        delete from fs_wechat_template where id in 
+        delete from fs_wechat_template where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-    
-</mapper>
+
+</mapper>

+ 14 - 0
fs-user-app/src/main/java/com/fs/app/controller/AdvController.java

@@ -6,14 +6,17 @@ import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.domain.R;
 import com.fs.his.domain.FsAdv;
 import com.fs.his.service.IFsAdvService;
+import com.fs.hisStore.vo.FsAdvListQueryVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 
@@ -42,5 +45,16 @@ public class AdvController {
 		return R.ok().put("data",list);
 	}
 
+	/**
+	 * 获取用户信息
+	 * @param request
+	 * @return     */
+	@ApiOperation("获取广告")
+	@GetMapping("/getAdv")
+	public R getProductCate(@RequestParam(value="advType") Integer advType, HttpServletRequest request){
+		List<FsAdvListQueryVO> advList=advService.selectFsAdvListQuery(advType);
+		return R.ok().put("data", advList);
+	}
+
 
 }

+ 73 - 0
fs-user-app/src/main/java/com/fs/app/controller/CommonController.java

@@ -48,17 +48,21 @@ import com.fs.his.param.FsInquiryOrderFinishParam;
 import com.fs.his.service.*;
 
 import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.mapper.FsWechatTemplateScrmMapper;
+import com.fs.hisStore.service.IFsWechatTemplateScrmService;
 import com.fs.im.dto.*;
 import com.fs.im.service.IImService;
 import com.fs.qw.domain.FsAppContactWay;
 import com.fs.qw.service.IFsAppContactWayService;
 import com.fs.qw.service.IQwAppContactWayService;
+import com.fs.store.config.StoreConfig;
 import com.fs.system.oss.CloudStorageService;
 import com.fs.system.oss.OSSFactory;
 import com.fs.system.service.ISysConfigService;
 import com.fs.system.service.ISysDictDataService;
 import com.fs.system.vo.DictVO;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import com.huaweicloud.sdk.vod.v1.model.BaseInfo;
 import com.tencentyun.TLSSigAPIv2;
 import io.swagger.annotations.Api;
@@ -141,6 +145,9 @@ public class CommonController {
 	@Autowired
 	private IFsProjectAddressConfigService projectAddressConfigService;
 
+	@Autowired
+	private FsWechatTemplateScrmMapper wechatTemplateScrmMapper;
+
 //	@Autowired
 //	private RocketMQTemplate rocketMQTemplate;
 //
@@ -399,6 +406,46 @@ public class CommonController {
 		String sign=api.genUserSig(signParam.getUserId(),180*86400);
 		return R.ok().put("data",sign);
 	}
+
+	@GetMapping(value = "/getStoreConfig")
+	@ApiOperation("获取系统配置")
+	public R getStoreConfig()
+	{
+		String config=configService.selectConfigByKey("store.config");
+		StoreConfig storeConfig= JSONUtil.toBean(config,StoreConfig.class);
+		return  R.ok().put("data",storeConfig);
+
+	}
+
+	@ApiOperation("获取微信模板")
+	@GetMapping("/getWeixinTemps")
+	public R getWeixinTemps(
+	){
+		List<String> temp=wechatTemplateScrmMapper.selectFsWechatTemplateIds();
+		return R.ok().put("temp",temp);
+
+	}
+
+	@ApiOperation("获取微信模板")
+	@GetMapping("/getWeixinOrderTemps")
+	public R getWeixinOrderTemps(
+	){
+		Set<String> keys = Sets.newHashSet("delivery_success","finish_success","cancel_success");
+
+		List<String> temp=wechatTemplateScrmMapper.selectFsWechatTemplateIdsByKeySet(keys);
+		return R.ok().put("temp",temp);
+
+	}
+
+	@ApiOperation("获取微信模板")
+	@GetMapping("/getWeixinPrescribeTemps")
+	public R getWeixinPrescribeTemps(
+	){
+		List<String> temp=wechatTemplateScrmMapper.selectFsWechatTemplateIdsByKeySet(Sets.newHashSet("prescribe"));
+		return R.ok().put("temp",temp);
+	}
+
+
 	@GetMapping(value = "/testSend")
 	@ApiOperation("testSend")
 	public R testSend( )
@@ -679,4 +726,30 @@ public class CommonController {
 		return  R.ok().put("isSmsVerification",0);
 
 	}
+
+	@ApiOperation("获取数据字典")
+	@GetMapping("/getDicts")
+//	@Cacheable(value= "dicts")
+	public R getDicts(){
+		List<DictVO> doctorPosition=dictDataService.selectDictDataListByType("doctor_position");
+		List<DictVO> doctorOrderStatus=dictDataService.selectDictDataListByType("doctor_order_status");
+		List<DictVO> storeOrderStatus=dictDataService.selectDictDataListByType("store_order_status");
+		List<DictVO> storeAfterSalesReasons=dictDataService.selectDictDataListByType("store_after_sales_reasons");
+		List<DictVO> storeProductType=dictDataService.selectDictDataListByType("store_product_type");
+		List<DictVO> storeAfterSalesSalesStatus=dictDataService.selectDictDataListByType("store_after_sales_sales_status");
+		List<DictVO> storeAfterSalesStatus=dictDataService.selectDictDataListByType("store_after_sales_status");
+		List<DictVO> storeProductPackageCate=dictDataService.selectDictDataListByType("store_product_package_cate");
+		List<DictVO> storeProductTuiCate=dictDataService.selectDictDataListByType("store_product_tui_cate");
+		return R.ok()
+				.put("storeProductPackageCate",storeProductPackageCate)
+				.put("storeAfterSalesStatus",storeAfterSalesStatus)
+				.put("storeAfterSalesSalesStatus",storeAfterSalesSalesStatus)
+				.put("storeProductType", storeProductType)
+				.put("doctorPosition",doctorPosition)
+				.put("doctorOrderStatus",doctorOrderStatus)
+				.put("storeOrderStatus", storeOrderStatus)
+				.put("storeAfterSalesReasons", storeAfterSalesReasons)
+				.put("storeProductTuiCate",storeProductTuiCate);
+	}
+
 }

+ 130 - 0
fs-user-app/src/main/java/com/fs/app/controller/CouponStoreController.java

@@ -0,0 +1,130 @@
+package com.fs.app.controller;
+
+
+import com.fs.app.annotation.Login;
+import com.fs.common.core.domain.R;
+import com.fs.common.param.BaseQueryParam;
+import com.fs.common.utils.StringUtils;
+import com.fs.hisStore.domain.FsStoreCouponIssueScrm;
+import com.fs.hisStore.domain.FsStoreCouponUserScrm;
+import com.fs.hisStore.param.FsCouponIssueParam;
+import com.fs.hisStore.param.FsCouponUserEnableParam;
+import com.fs.hisStore.param.FsStoreCouponReceiveParam;
+import com.fs.hisStore.service.IFsStoreCouponIssueScrmService;
+import com.fs.hisStore.service.IFsStoreCouponUserScrmService;
+import com.fs.hisStore.vo.FsStoreCouponIssueVO;
+import com.fs.system.config.SnowflakeUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+@Api("商城app优惠券接口")
+@RestController
+@RequestMapping(value="/app/store/coupon")
+public class CouponStoreController extends  AppBaseController {
+
+
+    @Autowired
+    private IFsStoreCouponIssueScrmService fsStoreCouponIssueScrmService;
+
+    @Autowired
+    private IFsStoreCouponUserScrmService fsStoreCouponUserScrmService;
+
+    @Login
+    @ApiOperation("获取优惠券列表")
+    @GetMapping("/getCouponIssueList")
+    public R getCouponIssueList(BaseQueryParam param){
+        PageHelper.startPage(param.getPage(), param.getPageSize());
+        try {
+            FsStoreCouponIssueScrm map=new FsStoreCouponIssueScrm();
+            map.setIsDel(0);
+            map.setCouponType(0);
+            map.setStatus(1);
+            List<FsStoreCouponIssueVO> list=fsStoreCouponIssueScrmService.selectFsStoreCouponIssueListQueryVO(getUserId(),map);
+            PageInfo<FsStoreCouponIssueVO> listPageInfo=new PageInfo<>(list);
+            return R.ok().put("data",listPageInfo);
+        } catch (Exception e){
+            return R.error("操作异常");
+        }
+    }
+    @Login
+    @ApiOperation("获取我的优惠券列表")
+    @GetMapping("/getMyCouponList")
+    public R getMyCouponList(){
+        try {
+            FsStoreCouponUserScrm map=new FsStoreCouponUserScrm();
+            map.setIsDel(0);
+            map.setUserId(Long.parseLong(getUserId()));
+            List<FsStoreCouponUserScrm> list=fsStoreCouponUserScrmService.selectFsStoreCouponUserList(map);
+            return R.ok().put("data",list);
+        } catch (Exception e){
+            return R.error("操作异常");
+        }
+    }
+
+    @Login
+    @ApiOperation("领取")
+    @PostMapping("/receive")
+    public R receive(@RequestBody FsStoreCouponReceiveParam param){
+        return fsStoreCouponIssueScrmService.receive(getUserId(),param);
+    }
+
+
+    @Login
+    @ApiOperation("获取销售可用套餐卷列表")
+    @GetMapping("/getCompanyCouponIssueList")
+    public R getCompanyCouponIssueList(FsCouponIssueParam param){
+        PageHelper.startPage(param.getPage(), param.getPageSize());
+        try {
+            List<FsStoreCouponIssueVO> list=fsStoreCouponIssueScrmService.getCompanyCouponIssueList(param);
+            PageInfo<FsStoreCouponIssueVO> listPageInfo=new PageInfo<>(list);
+            return R.ok().put("data",listPageInfo);
+        } catch (Exception e){
+            return R.error("操作异常");
+        }
+    }
+
+    @ApiOperation("获取销售可用套餐卷")
+    @GetMapping("/getCouponIssueById")
+    public R getCouponIssueById(@RequestParam(value="id") Long id){
+        String code = SnowflakeUtils.nextId();
+        redisCache.setCacheObject("coupon:"+code,id.toString(),10, TimeUnit.MINUTES);
+        FsStoreCouponIssueVO couponIssue=fsStoreCouponIssueScrmService.selectFsStoreCouponIssueVOById(id);
+        return R.ok().put("data",couponIssue).put("code",code);
+    }
+
+    @Login
+    @ApiOperation("领取")
+    @PostMapping("/companyReceive")
+    public R companyReceive(@RequestBody FsStoreCouponReceiveParam param){
+        String code=redisCache.getCacheObject("coupon:"+param.getCode());
+        if(StringUtils.isEmpty(code)){
+            return R.error("此券已失效");
+        }
+        return fsStoreCouponIssueScrmService.receive(getUserId(),param);
+    }
+
+
+    @Login
+    @ApiOperation("获取我的优惠券列表")
+    @GetMapping("/getMyEnableCouponList")
+    public R getMyEnableCouponList(FsCouponUserEnableParam param){
+        try {
+            param.setUserId(Long.parseLong(getUserId()));
+            List<FsStoreCouponUserScrm> list=fsStoreCouponUserScrmService.selectFsStoreCouponUserListByEnable(param);
+            list=list.stream().filter(s->(s.getCouponPrice().compareTo(param.getUseMinPrice()) < 0 )).collect(Collectors.toList());
+            list=list.stream().filter(s->(s.getUseMinPrice().compareTo(param.getUseMinPrice()) < 0 )).collect(Collectors.toList());
+            return R.ok().put("data",list);
+        } catch (Exception e){
+            return R.error("操作异常");
+        }
+    }
+
+}

+ 52 - 0
fs-user-app/src/main/java/com/fs/app/controller/IndexController.java

@@ -4,15 +4,24 @@ package com.fs.app.controller;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.fs.app.annotation.Login;
+import com.fs.app.vo.IndexVO;
 import com.fs.common.core.domain.R;
 
 import com.fs.his.domain.*;
 import com.fs.his.param.*;
 import com.fs.his.service.*;
 import com.fs.his.vo.*;
+
 import com.fs.hisStore.domain.FsStoreUserEndCategoryScrm;
+import com.fs.hisStore.service.IFsStoreCartScrmService;
+import com.fs.store.param.FsArticleQueryParam;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
 import com.fs.hisStore.service.IFsStoreUserEndCategoryScrmService;
+import com.fs.store.vo.FsArticleListQueryVO;
+import com.fs.hisStore.vo.FsStoreProductListQueryVO;
 import com.fs.store.config.ConceptConfig;
+import com.fs.hisStore.vo.FsAdvListQueryVO;
+import com.fs.hisStore.vo.FsArticleCateListQueryVO;
 import com.fs.system.service.ISysConfigService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -58,6 +67,22 @@ public class IndexController extends AppBaseController {
 	@Autowired
 	private IFsStoreUserEndCategoryScrmService userEndCategoryScrmService;
 
+
+	@Autowired
+	private IFsArticleService articleService;
+
+	@Autowired
+	private IFsArticleCateService articleCateService;
+
+	@Autowired
+	private IFsAdvService advService;
+
+	@Autowired
+	private IFsStoreProductScrmService productService;
+
+	@Autowired
+	private IFsStoreCartScrmService cartService;
+
 	@ApiOperation("获取名方列表")
 	@Cacheable(value = "getFamousPrescribeList", key = "#param")
 	@GetMapping("/getFamousPrescribeList")
@@ -220,4 +245,31 @@ public class IndexController extends AppBaseController {
 		return R.ok().put("date",start);
 	}
 
+
+	@ApiOperation("获取首页数据")
+	@GetMapping("/getIndexData")
+	public R getIndexData(){
+		List<FsArticleCateListQueryVO> articleCateList=articleCateService.selectFsArticleCateListQuery();
+		List<FsAdvListQueryVO> advList=advService.selectFsAdvListQuery(1);
+		List<FsStoreProductListQueryVO> newProductList=productService.selectFsStoreProductNewQueryCount(10);
+		List<FsStoreProductListQueryVO> hotProductList=productService.selectFsStoreProductHotQueryCount(10);
+		IndexVO vo=IndexVO.builder().articleCateList(articleCateList).advList(advList).newProductList(newProductList).hotProductList(hotProductList).build();
+		return R.ok().put("data", vo);
+	}
+
+	@ApiOperation("获取推荐健康知识")
+	@GetMapping("/getTuiArticle")
+	public R getTuiArticle(FsArticleQueryParam param){
+
+		List<FsArticleListQueryVO> list=articleService.selectFsArticleListQuery(param);
+		return R.ok().put("data", list);
+	}
+
+	@Login
+	@ApiOperation("获取购物车数量")
+	@GetMapping("/getCartCount")
+	public R getCartCount(){
+		Integer count=cartService.selectFsStoreCartCountByUserId(Long.parseLong(getUserId()));
+		return R.ok().put("data", count);
+	}
 }

+ 16 - 0
fs-user-app/src/main/java/com/fs/app/controller/StoreActivityController.java

@@ -5,12 +5,14 @@ import com.fs.common.core.domain.R;
 import com.fs.common.utils.StringUtils;
 import com.fs.his.domain.FsPackage;
 import com.fs.his.service.IFsPackageService;
+import com.fs.his.service.IFsStoreProductService;
 import com.fs.store.domain.FsStoreActivity;
 import com.fs.store.service.IFsStoreActivityService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import com.fs.store.vo.FsStoreProductActivityListVO;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
@@ -29,6 +31,9 @@ public class StoreActivityController extends  AppBaseController {
     @Autowired
     private IFsPackageService packageService;
 
+    @Autowired
+    private IFsStoreProductService productService;
+
     @ApiOperation("获取活动")
     @GetMapping("/getStoreActivity")
     public R getStoreActivity( HttpServletRequest request){
@@ -51,6 +56,17 @@ public class StoreActivityController extends  AppBaseController {
         }
         return R.ok().put("activity",activity).put("products",products);
     }
+
+
+    @ApiOperation("获取活动详情")
+    @GetMapping("/getStoreActivityDetailsByStore")
+    public R getStoreActivityDetailsByStore(@RequestParam(value = "activityId")Long activityId){
+        FsStoreActivity activity=activityService.selectFsStoreActivityById(activityId);
+        List<FsStoreProductActivityListVO> products=productService.selectFsStoreProductByIds(activity.getProductIds());
+        return R.ok().put("activity",activity).put("products",products);
+    }
+
+
     @ApiOperation("分享")
     @PostMapping("/share")
     public R share(@RequestParam(value = "activityId")Long activityId, HttpServletRequest request){

+ 3 - 1
fs-user-app/src/main/java/com/fs/app/controller/StoreOrderController.java

@@ -24,6 +24,7 @@ import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
+import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -32,9 +33,10 @@ import javax.servlet.http.HttpServletRequest;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
-
+// 这不是互医接口吗?
 @Api("商城接口")
 @RestController
+@Log4j2
 @RequestMapping(value="/app/storeOrder")
 public class StoreOrderController extends  AppBaseController {
 

+ 184 - 0
fs-user-app/src/main/java/com/fs/app/controller/app/AddressController.java

@@ -0,0 +1,184 @@
+package com.fs.app.controller.app;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import com.fs.app.annotation.Login;
+import com.fs.app.controller.AppBaseController;
+import com.fs.app.utils.CityTreeUtil;
+import com.fs.app.vo.CityVO;
+import com.fs.common.core.domain.R;
+import com.fs.common.utils.ParseUtils;
+import com.fs.his.domain.FsCity;
+import com.fs.his.domain.FsUserAddress;
+import com.fs.his.service.IFsCityService;
+import com.fs.his.service.IFsExpressService;
+import com.fs.his.service.IFsUserAddressService;
+import com.fs.hisStore.param.FsAddressParseParam;
+import com.fs.store.param.FsUserAddressAddEditParam;
+import com.google.common.collect.Lists;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.Cacheable;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.List;
+
+
+@Api("地址接口")
+@RestController
+@RequestMapping(value="/app/address")
+public class AddressController extends AppBaseController {
+
+    @Autowired
+    private IFsExpressService expressService;
+    @Autowired
+    private IFsUserAddressService addressService;
+
+    @Autowired
+    private IFsCityService cityService;
+    @Login
+    @ApiOperation("获取城市数据")
+    @GetMapping("/getCity")
+    @Cacheable("citys")
+    public R getCity(HttpServletRequest request){
+        List<FsCity> list=cityService.selectFsCitys();
+        return R.ok().put("data", list);
+
+    }
+
+    @Login
+    @ApiOperation("获取城市数据")
+    @GetMapping("/getCitys")
+    @Cacheable("cityData")
+    public R getCitys(HttpServletRequest request){
+        List<FsCity> list=cityService.selectFsCitys();
+        List<CityVO> cityVOS = Lists.newArrayList();
+        for (FsCity city : list){
+            CityVO cityVO = new CityVO();
+            cityVO.setV(city.getCityId());
+            cityVO.setN(city.getCityName());
+            cityVO.setPid(city.getParentId());
+            cityVOS.add(cityVO);
+        }
+        return R.ok().put("data", CityTreeUtil.list2TreeConverter(cityVOS, "0"));
+
+    }
+
+    @Login
+//    @ApiOperation("获取地址列表")
+    @GetMapping("/getAddressList")
+    public R getAddressList(HttpServletRequest request){
+        try {
+            FsUserAddress map=new FsUserAddress();
+            map.setUserId(Long.parseLong(getUserId()));
+            map.setIsDel(0);
+            List<FsUserAddress> list=addressService.selectFsUserAddressList(map);
+            return R.ok().put("data",list);
+        } catch (Exception e){
+            return R.error("操作异常");
+        }
+    }
+    @Login
+//    @ApiOperation("获取地址信息")
+    @GetMapping("/getAddressById")
+    public R getAddressById(@RequestParam("id")Long id, HttpServletRequest request){
+        FsUserAddress address=addressService.selectFsUserAddressByAddressId(id);
+        if(!address.getUserId().equals(Long.parseLong(getUserId()))){
+
+            return R.error("非法操作");
+        }
+        return R.ok().put("data",address);
+    }
+    @Login
+    @ApiOperation("添加地址")
+    @PostMapping("/addAddress")
+    public R addAddress(@Valid @RequestBody FsUserAddressAddEditParam address, HttpServletRequest request){
+        //处理地址数量 最大20个
+        Integer count=addressService.selectFsUserAddressCountsByUserId(Long.parseLong(getUserId()));
+        if(count>20){
+            return R.error("最多可创建20个地址");
+        }
+        address.setUserId(Long.parseLong(getUserId()));
+        if(address.getIsDefault()==1){
+            //处理默认地址
+            addressService.clearIsDefalut(Long.parseLong(getUserId()));
+        }
+
+
+           Long cityId= addressService.selectFsUserAddressByCityName(address.getCity());
+           address.setCityId(cityId);
+           if (cityId==null){
+               return R.error("系统中暂无此区县,请手动选择所在地区");
+           }
+
+        address.setPhone(address.getPhone().trim());
+        FsUserAddress userAddress=new FsUserAddress();
+        BeanUtil.copyProperties(address, userAddress);
+        addressService.insertFsUserAddress(userAddress);
+        return R.ok("操作成功");
+    }
+
+    @Login
+    @ApiOperation("编辑地址")
+    @PostMapping("/editAddress")
+    public R editAddress(@Valid @RequestBody FsUserAddressAddEditParam address, HttpServletRequest request){
+        if(address.getIsDefault()==1){
+            //处理默认地址
+            addressService.clearIsDefalut(Long.parseLong(getUserId()));
+        }
+
+        Long cityId= addressService.selectFsUserAddressByCityName(address.getCity());
+        address.setCityId(cityId);
+        if (cityId==null){
+            return R.error("系统中暂无此区县,请手动选择所在地区");
+        }
+        FsUserAddress userAddress=new FsUserAddress();
+        BeanUtil.copyProperties(address, userAddress);
+        addressService.updateFsUserAddress(userAddress);
+        return R.ok("操作成功");
+    }
+
+    @Login
+    @ApiOperation("删除地址")
+    @PostMapping("/delAddress")
+    public R delAddress(@RequestBody FsUserAddressAddEditParam address, HttpServletRequest request){
+        addressService.deleteFsUserAddressByAddressId(address.getAddressId());
+        return R.ok("操作成功");
+    }
+
+    @Login
+    @ApiOperation("地址解析")
+    @PostMapping("/parseAddress")
+    public R parseAddress(@RequestBody FsAddressParseParam param){
+        return expressService.parseAddress(param.getContent());
+    }
+
+
+    @Login
+    @ApiOperation("删除所有地址")
+    @PostMapping("/delAllAddress")
+    public R delAllAddress( HttpServletRequest request){
+        addressService.delAllAddress(Long.parseLong(getUserId()));
+        return R.ok("操作成功");
+    }
+
+    @Login
+    @ApiOperation("获取默认地址信息")
+    @GetMapping("/getAddressByDefault")
+    public R getAddressByDefault( HttpServletRequest request){
+        FsUserAddress address=addressService.selectFsUserAddressByDefault(Long.parseLong(getUserId()));
+        if (address!=null&&address.getPhone()!=null&&address.getPhone().length()>11&&!address.getPhone().matches("\\d+")){
+            address.setPhone(ParseUtils.parsePhone(address.getPhone()));
+        }
+        if (null!=address){
+            if(!address.getUserId().equals(Long.parseLong(getUserId()))){
+                return R.error("非法操作");
+            }
+        }
+        return R.ok().put("data",address);
+    }
+
+}

+ 1 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/StoreActivityScrmController.java

@@ -7,6 +7,7 @@ import com.fs.hisStore.domain.FsStoreActivityScrm;
 import com.fs.hisStore.service.IFsStoreActivityScrmService;
 import com.fs.hisStore.service.IFsStoreProductScrmService;
 import com.fs.hisStore.vo.FsStoreProductActivityListVO;
+import com.fs.store.domain.FsStoreActivity;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java

@@ -19,6 +19,7 @@ import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.core.config.WxMaConfiguration;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.his.domain.FsStoreOrder;
 import com.fs.his.param.FsStoreOrderDoPayParam;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.hisStore.config.FsErpConfig;

+ 35 - 0
fs-user-app/src/main/java/com/fs/app/vo/IndexStroeVO.java

@@ -0,0 +1,35 @@
+package com.fs.app.vo;
+
+import com.fs.store.vo.FsAdvListQueryVO;
+import com.fs.store.vo.FsArticleCateListQueryVO;
+import com.fs.store.vo.FsStoreProductListQueryVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("首页数据")
+public class IndexStroeVO {
+    @ApiModelProperty("首页BANNER")
+    List<FsAdvListQueryVO> advList;
+// @ApiModelProperty("推荐医生")
+// List<FsDoctorListQueryVO> doctorList;
+    @ApiModelProperty("健康分类")
+    List<FsArticleCateListQueryVO> articleCateList;
+
+    @ApiModelProperty("推荐产品")
+    List<FsStoreProductListQueryVO> tuiProductList;
+    @ApiModelProperty("最新产品")
+    List<FsStoreProductListQueryVO> newProductList;
+    @ApiModelProperty("热门产品")
+    List<FsStoreProductListQueryVO> hotProductList;
+
+}