From 5de80fd57f085834b16c5ad85024bbb314c53631 Mon Sep 17 00:00:00 2001
From: xiezhijun <15270898033@163.com>
Date: Sat, 27 Feb 2021 16:55:31 +0800
Subject: [PATCH] =?UTF-8?q?=E5=81=A5=E5=BA=B7=E8=AF=84=E4=BC=B0=E6=8A=A5?=
 =?UTF-8?q?=E5=91=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../core/domain/entity/SysDictData.java       | 18 +++-
 .../common/utils/reflect/ReflectUtils.java    |  2 +-
 .../custom/domain/SysCustomerHealthy.java     |  3 +
 .../dto/request/HealthyDetailRequest.java     | 10 ++-
 .../mapper/SysCustomerHealthyMapper.java      |  9 ++
 .../service/ISysCustomerHealthyService.java   |  9 ++
 .../impl/SysCustomerHealthyServiceImpl.java   | 55 ++++++++++--
 .../impl/SysRecipesPlanServiceImpl.java       | 31 ++++---
 .../custom/SysCustomerHealthyMapper.xml       | 22 ++++-
 .../components/PhysicalSignsDialog/index.vue  | 61 ++++++++++---
 .../PhysicalSignsGuidance/index.vue           | 88 +++++++++++++++++++
 11 files changed, 263 insertions(+), 45 deletions(-)
 create mode 100644 stdiet-ui/src/components/PhysicalSignsGuidance/index.vue

diff --git a/stdiet-common/src/main/java/com/stdiet/common/core/domain/entity/SysDictData.java b/stdiet-common/src/main/java/com/stdiet/common/core/domain/entity/SysDictData.java
index 891da5078..87fdda38f 100644
--- a/stdiet-common/src/main/java/com/stdiet/common/core/domain/entity/SysDictData.java
+++ b/stdiet-common/src/main/java/com/stdiet/common/core/domain/entity/SysDictData.java
@@ -9,6 +9,8 @@ import com.stdiet.common.annotation.Excel.ColumnType;
 import com.stdiet.common.constant.UserConstants;
 import com.stdiet.common.core.domain.BaseEntity;
 
+import java.util.List;
+
 /**
  * 字典数据表 sys_dict_data
  * 
@@ -34,8 +36,10 @@ public class SysDictData extends BaseEntity
     @Excel(name = "字典键值")
     private String dictValue;
 
-    /** 字典类型 */
-    @Excel(name = "字典类型")
+    private List<String> dictValueList;
+
+        /** 字典类型 */
+        @Excel(name = "字典类型")
     private String dictType;
 
     /** 样式属性(其他样式扩展) */
@@ -153,7 +157,15 @@ public class SysDictData extends BaseEntity
     {
         this.status = status;
     }
-    
+
+    public List<String> getDictValueList() {
+        return dictValueList;
+    }
+
+    public void setDictValueList(List<String> dictValueList) {
+        this.dictValueList = dictValueList;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/reflect/ReflectUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/reflect/ReflectUtils.java
index 26c685838..b8cd10e16 100644
--- a/stdiet-common/src/main/java/com/stdiet/common/utils/reflect/ReflectUtils.java
+++ b/stdiet-common/src/main/java/com/stdiet/common/utils/reflect/ReflectUtils.java
@@ -416,7 +416,7 @@ public class ReflectUtils
             Field field = object.getClass().getDeclaredField(fieldName);
             //设置对象的访问权限,保证对private的属性的访问
             field.setAccessible(true);
-            return field.get(object).toString();
+            return field.get(object) == null ? "" : field.get(object).toString();
         } catch (Exception e) {
             return "";
         }
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHealthy.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHealthy.java
index 21052d9f8..1b2bb182e 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHealthy.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHealthy.java
@@ -433,6 +433,9 @@ public class SysCustomerHealthy extends BaseEntity
     //备注
     private String remark;
 
+    /** 减脂指导 */
+    private String guidance;
+
     /** 湿气数据 */
     @Excel(name = "湿气数据")
     private String moistureDate;
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/dto/request/HealthyDetailRequest.java b/stdiet-custom/src/main/java/com/stdiet/custom/dto/request/HealthyDetailRequest.java
index dbb870225..afab4aba9 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/dto/request/HealthyDetailRequest.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/dto/request/HealthyDetailRequest.java
@@ -281,6 +281,8 @@ public class HealthyDetailRequest implements Serializable {
     /** 其他运动项目,使用,隔开 */
     private String otherMotionClassify;
 
+    private String motion;
+
     /** 运动场地,使用,隔开 */
     private String motionField;
 
@@ -372,8 +374,8 @@ public class HealthyDetailRequest implements Serializable {
     /** 饮食习惯 */
     private String makeFoodType;
 
-    /** 客户病史体征id,使用,隔开 */
-    private String physicalSignsId;
+    /** 客户病史体征,使用,隔开 */
+    private String physicalSigns;
 
     /** 其他病史体征 **/
     private String otherPhysicalSigns;
@@ -387,4 +389,8 @@ public class HealthyDetailRequest implements Serializable {
     /** 湿气数据 */
     private String moistureDate;
 
+
+    /** 减脂指导 **/
+    private String guidance;
+
 }
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHealthyMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHealthyMapper.java
index c60456991..29acf80b2 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHealthyMapper.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHealthyMapper.java
@@ -2,6 +2,7 @@ package com.stdiet.custom.mapper;
 
 import java.util.List;
 
+import com.stdiet.common.core.domain.entity.SysDictData;
 import com.stdiet.custom.domain.SysCustomer;
 import com.stdiet.custom.domain.SysCustomerHealthy;
 import org.apache.ibatis.annotations.Param;
@@ -79,4 +80,12 @@ public interface SysCustomerHealthyMapper
      * @return
      */
     int deleteCustomerHealthyByCustomerId(@Param("customerId")Long customerId);
+
+
+    /**
+     * 根据类型、键值集合查询字典类型
+     * @param sysDictData
+     * @return
+     */
+    public  List<SysDictData> selectDictDataByTypeAndValue(SysDictData sysDictData);
 }
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHealthyService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHealthyService.java
index 1888bb531..65ded44e9 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHealthyService.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHealthyService.java
@@ -3,6 +3,7 @@ package com.stdiet.custom.service;
 import java.util.List;
 
 import com.stdiet.common.core.domain.AjaxResult;
+import com.stdiet.common.core.domain.entity.SysDictData;
 import com.stdiet.custom.domain.SysCustomerHealthy;
 import com.stdiet.custom.dto.request.HealthyDetailRequest;
 import org.apache.ibatis.annotations.Param;
@@ -85,4 +86,12 @@ public interface ISysCustomerHealthyService
      * @return
      */
     AjaxResult generateHealthyReport(HealthyDetailRequest healthyDetailRequest);
+
+
+    /**
+     * 根据类型、键值集合查询字典类型
+     * @param sysDictData
+     * @return
+     */
+    public  List<SysDictData> selectDictDataByTypeAndValue(SysDictData sysDictData);
 }
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHealthyServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHealthyServiceImpl.java
index 2ecd67782..52c1b052f 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHealthyServiceImpl.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHealthyServiceImpl.java
@@ -1,11 +1,11 @@
 package com.stdiet.custom.service.impl;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import com.stdiet.common.config.RuoYiConfig;
 import com.stdiet.common.core.domain.AjaxResult;
+import com.stdiet.common.core.domain.entity.SysDictData;
+import com.stdiet.common.utils.DateUtils;
 import com.stdiet.common.utils.StringUtils;
 import com.stdiet.common.utils.bean.ObjectUtils;
 import com.stdiet.common.utils.reflect.ReflectUtils;
@@ -157,14 +157,13 @@ public class SysCustomerHealthyServiceImpl implements ISysCustomerHealthyService
     @Override
     public AjaxResult generateHealthyReport(HealthyDetailRequest healthyDetailRequest){
         AjaxResult ajaxResult = AjaxResult.error();
-        String templatePath = "/home/workspace/ShengTangManage/running/pdf/healthyReport.pdf";
-        //String templatePath = "D:\\contract\\healthyReport.pdf";
+        //String templatePath = "/home/workspace/ShengTangManage/running/pdf/healthyReport.pdf";
+        String templatePath = "D:\\contract\\healthyReport.pdf";
         String fileName = "healthyReport" + healthyDetailRequest.getCustomerId() + System.currentTimeMillis() + ".pdf";
         String filePath = RuoYiConfig.getDownloadPath() + fileName;
         //查询客户健康信息
         SysCustomerHealthy sysCustomerHealthy = selectSysCustomerHealthyById(healthyDetailRequest.getId());
         if(sysCustomerHealthy != null){
-
             ajaxResult = PdfUtils.generatePdfFile(templatePath, filePath, getReportData(sysCustomerHealthy, healthyDetailRequest));
             ajaxResult.put("path", fileName);
         }
@@ -192,10 +191,35 @@ public class SysCustomerHealthyServiceImpl implements ISysCustomerHealthyService
     };
 
     private Map<String,String> getReportData(SysCustomerHealthy sysCustomerHealthy, HealthyDetailRequest healthyDetailRequest){
+        if(StringUtils.isNotEmpty(sysCustomerHealthy.getBloodData())){
+            SysDictData param = new SysDictData();
+            param.setDictType("sys_moisture_data");
+            param.setDictValueList(Arrays.asList(sysCustomerHealthy.getBloodData().split(",")));
+            List<SysDictData> bloodData = selectDictDataByTypeAndValue(param);
+            String bloodString = "";
+            for (SysDictData blood : bloodData) {
+                bloodString += blood.getDictValue() + "、" +blood.getDictLabel() + "\n";
+            }
+            healthyDetailRequest.setBloodData(bloodString);
+        }
+        if(StringUtils.isNotEmpty(sysCustomerHealthy.getMoistureDate())){
+            SysDictData param = new SysDictData();
+            param.setDictType("sys_blood_data");
+            param.setDictValueList(Arrays.asList(sysCustomerHealthy.getBloodData().split(",")));
+            List<SysDictData> moistureData = selectDictDataByTypeAndValue(param);
+            String moistureString = "";
+            for (SysDictData moisture : moistureData) {
+                moistureString += moisture.getDictValue() + "、" + moisture.getDictLabel() + "\n";
+            }
+            healthyDetailRequest.setMoistureDate(moistureString);
+        }
         Map<String,String> data = new HashMap<>();
         for (String key : healthyAttrNameAray) {
             data.put(key, ReflectUtils.getFieldValueByFieldName(key, healthyDetailRequest));
         }
+        //减脂指导
+        data.put("guidance", sysCustomerHealthy.getGuidance());
+        //营养热量分析数据
         NutritionalCalories nutritionalCalories = NutritionalUtils.getNutritionalCaloriesData(sysCustomerHealthy);
         nutritionalCalories.setNutritionalHeat_one(nutritionalCalories.getNutritionalHeat()[0].toString());
         nutritionalCalories.setNutritionalHeat_two(nutritionalCalories.getNutritionalHeat()[1].toString());
@@ -208,13 +232,28 @@ public class SysCustomerHealthyServiceImpl implements ISysCustomerHealthyService
         nutritionalCalories.setWeightNutritionalRate_three(nutritionalCalories.getWeightNutritionalRate()[2].toString());
         for (String key : nutriAttrNameArray) {
             if("targetEveryWeightHeat".equals(key)){
-                data.put(key, nutritionalCalories.getTargetEveryWeightHeat()[0].toString()+"-"+nutritionalCalories.getTargetEveryWeightHeat()[1].toString());
+                data.put(key, nutritionalCalories.getTargetEveryWeightHeat()[0].intValue()+"-"+nutritionalCalories.getTargetEveryWeightHeat()[1].intValue());
+                continue;
             }
             if("standardEveryWeightHeat".equals(key)){
-                data.put(key, nutritionalCalories.getStandardEveryWeightHeat()[0].toString()+"-"+nutritionalCalories.getStandardEveryWeightHeat()[1].toString());
+                data.put(key, nutritionalCalories.getStandardEveryWeightHeat()[0].intValue()+"-"+nutritionalCalories.getStandardEveryWeightHeat()[1].intValue());
+                continue;
             }
             data.put(key, ReflectUtils.getFieldValueByFieldName(key, nutritionalCalories));
         }
+        data.put("company","深圳胜唐体控有限公司");
+        data.put("date", DateUtils.getDate());
         return data;
     }
+
+
+    /**
+     * 根据类型、键值集合查询字典类型
+     * @param sysDictData
+     * @return
+     */
+    @Override
+    public List<SysDictData> selectDictDataByTypeAndValue(SysDictData sysDictData){
+        return sysCustomerHealthyMapper.selectDictDataByTypeAndValue(sysDictData);
+    }
 }
\ No newline at end of file
diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java
index 6b334a05e..fbdf3ffff 100644
--- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java
+++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java
@@ -29,6 +29,7 @@ import java.util.List;
 @Service("sysRecipesPlanService")
 @Transactional
 public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
+
     public static final String generateRecipesPlanLockKey = "generateRecipesPlanLock::%s";
     @Autowired
     private SysRecipesPlanMapper sysRecipesPlanMapper;
@@ -137,6 +138,7 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
         //判断是否提成单,拆分单中的副单,体验单
         if(sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() == 1) ||
             "2".equals(sysOrder.getOrderType())){
+            System.out.println("---------------------不生成食谱------------------------");
             return;
         }
         try {
@@ -144,7 +146,6 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
             if (synchrolockUtil.lock(String.format(generateRecipesPlanLockKey, orderId))) {
                 SysRecipesPlan queryParam = new SysRecipesPlan();
                 queryParam.setOrderId(orderId);
-                List<SysRecipesPlan> oldRecipesPlanList = sysRecipesPlanMapper.selectSysRecipesPlanList(queryParam);
                 //判断是否已存在食谱
                 /*if (oldRecipesPlanList != null && oldRecipesPlanList.size() > 0) {
                     Long[] orderIdArray = new Long[1];
@@ -156,10 +157,15 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
                 pauseParam.setOrderId(sysOrder.getOrderId());
                 //暂停记录列表
                 List<SysOrderPause> pauseList = sysOrderPauseService.selectSysOrderPauseList(pauseParam);
-                List<SysRecipesPlan> planList = generatePlan(sysOrder, oldRecipesPlanList,
-                        DateUtils.dateToLocalDate(sysOrder.getStartTime()), DateUtils.dateToLocalDate(sysOrder.getServerEndTime()), pauseList);
-                if (planList != null && planList.size() > 0) {
-                    sysRecipesPlanMapper.insertBatch(planList);
+                List<SysRecipesPlan> planList = generatePlan(sysOrder, DateUtils.dateToLocalDate(sysOrder.getStartTime()), DateUtils.dateToLocalDate(sysOrder.getServerEndTime()), pauseList);
+                //判断是否已存在食谱计划
+                List<SysRecipesPlan> oldRecipesPlanList = sysRecipesPlanMapper.selectSysRecipesPlanList(queryParam);
+                if(oldRecipesPlanList != null && oldRecipesPlanList.size() > 0){
+
+                }else{
+                    if (planList != null && planList.size() > 0) {
+                        sysRecipesPlanMapper.insertBatch(planList);
+                    }
                 }
             }
         } catch (Exception e) {
@@ -174,14 +180,12 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
      * 根据订单ID、订单开始服务时间、结束时间、暂停列表生成食谱计划列表
      *
      * @param sysOrder           订单对象
-     * @param oldRecipesPlanList 旧的食谱计划
      * @param serverStartDate    服务开始时间
      * @param serverEndDate      服务结束时间
      * @param pauseList          暂停列表
      * @return
      */
-    public List<SysRecipesPlan> generatePlan(SysOrder sysOrder, List<SysRecipesPlan> oldRecipesPlanList,
-                                             LocalDate serverStartDate, LocalDate serverEndDate, List<SysOrderPause> pauseList) {
+    public List<SysRecipesPlan> generatePlan(SysOrder sysOrder, LocalDate serverStartDate, LocalDate serverEndDate, List<SysOrderPause> pauseList) {
         List<SysRecipesPlan> planList = new ArrayList<>();
         boolean breakFlag = false;
         LocalDate planStartDate = serverStartDate;
@@ -200,17 +204,12 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
             sysRecipesPlan.setEndDate(DateUtils.localDateToDate(planEndDate));
             sysRecipesPlan.setOrderId(sysOrder.getOrderId());
             sysRecipesPlan.setCusId(sysOrder.getCusId());
-            /*//当开始时间小于等于当前时间,默认为已发送,发送时间为前一天
-            if(ChronoUnit.DAYS.between(planStartDate, LocalDate.now()) >= 0){
-                sysRecipesPlan.setSendFlag(1);
-                sysRecipesPlan.setSendTime(DateUtils.localDateToDate(LocalDate.now().minusDays(1)));
-            }*/
+            sysRecipesPlan.setEndNumDay();
             //将旧食谱计划中的发送状态、发送时间、食谱复制到新食谱计划中
-            boolean existFlag = oldRecipesPlanList.size() >= planList.size() + 1;
+            /*boolean existFlag = oldRecipesPlanList.size() >= planList.size() + 1;
             sysRecipesPlan.setSendFlag(existFlag ? oldRecipesPlanList.get(planList.size()).getSendFlag() : 0);
             sysRecipesPlan.setSendTime(existFlag ? oldRecipesPlanList.get(planList.size()).getSendTime() : null);
-            sysRecipesPlan.setRecipesId(existFlag ? oldRecipesPlanList.get(planList.size()).getRecipesId() : null);
-
+            sysRecipesPlan.setRecipesId(existFlag ? oldRecipesPlanList.get(planList.size()).getRecipesId() : null);*/
             planList.add(sysRecipesPlan);
 
             planStartDate = planEndDate.plusDays(1);
diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHealthyMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHealthyMapper.xml
index 7f32de28e..437aedd3f 100644
--- a/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHealthyMapper.xml
+++ b/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHealthyMapper.xml
@@ -112,6 +112,7 @@
         <result property="bloodData"    column="blood_data"    />
         <result property="moistureDate"    column="moisture_date"    />
         <result property="remark" column="remark"></result>
+        <result property="guidance"    column="guidance"    />
         <result property="createTime"    column="create_time"    />
         <result property="createBy"    column="create_by"    />
         <result property="updateTime"    column="update_time"    />
@@ -123,7 +124,7 @@
 
     <sql id="selectSysCustomerHealthyVo">
         select sch.id, customer_id, conditioning_project_id, sex, age, weight, tall, condiment, other_condiment, cooking_style, cooking_style_rate, wash_vegetables_style, other_wash_vegetables_style, breakfast_type, breakfast_food, lunch_type, dinner, vegetable_rate, common_meat, dinner_time, supper_num, supper_food, diet_hot_and_cold, diet_flavor, vegetables_num, vegetables_rate_type, fruits_num, fruits_time, fruits_rate, rice_num, rice_full, eating_speed, snacks, other_snacks, health_products_flag, health_products_brand, health_products_name, health_products_week_rate, health_products_day_rate, water_num, water_type, water_habit, drinks_num, drink_wine_flag, drink_wine_classify, other_wine_classify, drink_wine_amount, smoke_flag, smoke_rate, second_smoke, work_industry, work_type, defecation_num, other_defecation_num, defecation_time, defecation_shape, defecation_smell, defecation_speed, defecation_color, motion_num, motion_duration, motion_time, aerobic_motion_classify, anaerobic_motion_classify, anaerobic_aerobic_motion_classify, other_motion_classify, motion_field, other_motion_field, sleep_time, sleep_quality, sleep_drug_flag, sleep_drug, stayup_late_flag, stayup_late_week_num, family_illness_history, other_family_illness_history, operation_history, other_operation_history, near_operation_flag, recoverye_situation, long_eat_drug_flag, long_eat_drug_classify, other_long_eat_drug_classify, allergy_flag, allergy_situation, allergen, other_allergen, medical_report, medical_report_name,
-        position,experience,rebound,difficulty,crux,dishes_ingredient,make_food_type,physical_signs_id,other_physical_signs,blood_data,moisture_date,sch.remark,
+        position,experience,rebound,difficulty,crux,dishes_ingredient,make_food_type,physical_signs_id,other_physical_signs,blood_data,moisture_date,sch.remark,sch.guidance,
         sch.create_time, sch.create_by,sch. update_time, sch.update_by, sch.del_flag
     </sql>
 
@@ -261,6 +262,7 @@
             <if test="bloodData != null">blood_data,</if>
             <if test="moistureDate != null">moisture_date,</if>
             <if test="remark != null">remark,</if>
+            <if test="guidance != null">guidance,</if>
             <if test="createTime != null">create_time,</if>
             <if test="createBy != null">create_by,</if>
             <if test="updateTime != null">update_time,</if>
@@ -369,6 +371,7 @@
             <if test="bloodData != null">#{bloodData},</if>
             <if test="moistureDate != null">#{moistureDate},</if>
             <if test="remark != null">#{remark},</if>
+            <if test="guidance != null">#{guidance},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
@@ -480,6 +483,7 @@
             <if test="bloodData != null">blood_data = #{bloodData},</if>
             <if test="moistureDate != null">moisture_date = #{moistureDate},</if>
             <if test="remark != null">remark = #{remark},</if>
+            <if test="guidance != null">guidance = #{guidance},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
@@ -517,4 +521,20 @@
         update sys_customer_healthy set del_flag = 1 where customer_id = #{customerId}
     </update>
 
+    <resultMap type="SysDictData" id="SysDictDataResult">
+        <id     property="dictCode"   column="dict_code"   />
+        <result property="dictSort"   column="dict_sort"   />
+        <result property="dictLabel"  column="dict_label"  />
+        <result property="dictValue"  column="dict_value"  />
+        <result property="dictType"   column="dict_type"   />
+    </resultMap>
+
+    <select id="selectDictDataByTypeAndValue" parameterType="SysDictData" resultMap="SysDictDataResult">
+        select dict_code, dict_sort, dict_label, dict_value, dict_type from sys_dict_data
+        where status = '0' and dict_type = #{dictType}
+        and dict_value in <foreach collection="dictValueList" item="item" index="index"
+                                   open="(" separator="," close=")">#{item}</foreach>
+        order by dict_sort asc
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/stdiet-ui/src/components/PhysicalSignsDialog/index.vue b/stdiet-ui/src/components/PhysicalSignsDialog/index.vue
index 7f39b74b6..d7702d4dd 100644
--- a/stdiet-ui/src/components/PhysicalSignsDialog/index.vue
+++ b/stdiet-ui/src/components/PhysicalSignsDialog/index.vue
@@ -3,7 +3,8 @@
     <div v-if="showFlag">
     <div style="float:right;margin-top:-10px;margin-bottom: 10px;" v-show="dataList.length > 0">
       <!-- 只有新版健康评估信息才可修改,旧的体征数据不支持修改 -->
-      <el-button type="info" v-show="dataType == 0" @click="generateReport()"  plain>生成报告</el-button>
+      <el-button type="info" v-show="dataType == 0" @click="generateReport()"  plain>下载报告</el-button>
+      <el-button type="info" v-show="dataType == 0" @click="handleEditGuidanceClick()"  plain>减脂指导</el-button>
       <el-button v-hasPermi="['custom:healthy:edit']" type="info" v-show="dataType == 0" @click="handleEditRemarkClick()"  plain>修改备注</el-button>
       <el-button v-hasPermi="['custom:healthy:edit']" type="warning" v-show="dataType == 0" @click="handleEditHealthyClick()"  plain>修改信息</el-button>
       <el-button type="danger" v-hasPermi="['custom:healthy:remove']" @click="handleDelete()" plain>删除信息</el-button>
@@ -25,6 +26,15 @@
               <auto-hide-message :data="scope.row.remarkValue" :maxLength="100"/></template>
           </el-table-column>
         </el-table>
+        <!-- 指导 -->
+        <el-table :data="guidanceList" :show-header="false" border :cell-style="remarkColumnStyle" style="width: 100%;">
+          <el-table-column width="140" prop="guidanceTitle">
+          </el-table-column>
+          <el-table-column prop="guidanceValue">
+            <template slot-scope="scope">
+              <auto-hide-message :data="scope.row.guidanceValue" :maxLength="100"/></template>
+          </el-table-column>
+        </el-table>
       </div>
       <!-- 其他信息 -->
       <div style="height:400px;overflow: auto">
@@ -72,6 +82,8 @@
     <physicalSigns-edit ref="physicalSignsEditDialog" @refreshHealthyData="getCustomerHealthyByCusId()"></physicalSigns-edit>
     <!-- 编辑备注 -->
     <physicalSigns-remark ref="physicalSignsRemarkDialog" @refreshHealthyData="getCustomerHealthyByCusId()"></physicalSigns-remark>
+    <!-- 编辑减脂指导 -->
+    <physicalSigns-guidance ref="physicalSignsGuidanceDialog" @refreshHealthyData="getCustomerHealthyByCusId()"></physicalSigns-guidance>
   </el-dialog>
 </template>
 <script>
@@ -83,13 +95,15 @@ import * as healthyData from "@/utils/healthyData";
 import Clipboard from 'clipboard';
 import PhysicalSignsEdit from "@/components/PhysicalSignsEdit";
 import PhysicalSignsRemark from "@/components/PhysicalSignsRemark";
+import PhysicalSignsGuidance from "@/components/PhysicalSignsGuidance";
 export default {
   name: "PhysicalSignsDialog",
   components: {
     "auto-hide-message": AutoHideMessage,
     "table-detail-message": TableDetailMessage,
     "physicalSigns-edit":PhysicalSignsEdit,
-    "physicalSigns-remark":PhysicalSignsRemark
+    "physicalSigns-remark":PhysicalSignsRemark,
+    "physicalSigns-guidance":PhysicalSignsGuidance
   },
   data() {
     return {
@@ -101,6 +115,7 @@ export default {
       dataType: 0,
       healthyData: null,
       remarkList:[{"remarkTitle": "备注信息", "remarkValue": ""}],
+      guidanceList:[{"guidanceTitle": "减脂指导", "guidanceValue": ""}],
       // 体征标题
       signTitleData: [
         ["创建时间", "姓名", "年龄"],
@@ -242,6 +257,7 @@ export default {
           if(this.dataType == 0){
              this.healthyData = Object.assign({}, res.data.customerHealthy);
              this.remarkList[0].remarkValue = this.healthyData.remark;
+             this.guidanceList[0].guidanceValue = this.healthyData.guidance;
              this.getDataListByHealthyMessage(res.data.customerHealthy);
           }else{
             this.getDataListBySignMessage(res.data.customerHealthy)
@@ -362,7 +378,7 @@ export default {
         });
       }
       detailHealthy.motion =  this.trimComma(motionStr + (detailHealthy.otherMotionClassify ? ( ","+ detailHealthy.otherMotionClassify) : ""));
-      detailHealthy.motionField += this.trimComma(detailHealthy.otherMotionField ? (","+detailHealthy.otherMotionField) : "");
+      detailHealthy.motionField = this.trimComma(detailHealthy.motionField + (detailHealthy.otherMotionField ? (","+detailHealthy.otherMotionField) : ""));
       detailHealthy.sleepDrugFlag = detailHealthy.sleepDrugFlag == 1 ? "有" : "无";
       detailHealthy.stayupLateFlag = detailHealthy.stayupLateFlag == 1 ? "有" : "无";
       detailHealthy.stayupLateWeekNum += "次/周";
@@ -374,14 +390,13 @@ export default {
       }*/
       physicalSigns += "," + (detailHealthy.otherPhysicalSigns ? detailHealthy.otherPhysicalSigns : "");
       detailHealthy.physicalSigns = this.trimComma(physicalSigns);
-      detailHealthy.familyIllnessHistory += this.trimComma(detailHealthy.otherFamilyIllnessHistory ? ("," + detailHealthy.otherFamilyIllnessHistory) : "");
-      detailHealthy.operationHistory += this.trimComma(detailHealthy.otherOperationHistory ? ("," + detailHealthy.otherOperationHistory) : "");
+      detailHealthy.familyIllnessHistory = this.trimComma(detailHealthy.familyIllnessHistory + ","+ (detailHealthy.otherFamilyIllnessHistory ? detailHealthy.otherFamilyIllnessHistory : ""));
+      detailHealthy.operationHistory = this.trimComma(detailHealthy.operationHistory + ","+ (detailHealthy.otherOperationHistory ? detailHealthy.otherOperationHistory : ""));
       detailHealthy.nearOperationFlag = detailHealthy.nearOperationFlag == 1 ? "有" : "无";
       detailHealthy.longEatDrugFlag = detailHealthy.longEatDrugFlag == 1 ? "有" : "无";
-      detailHealthy.longEatDrugClassify += detailHealthy.otherLongEatDrugClassify ? ("," + detailHealthy.otherLongEatDrugClassify) : "";
+      detailHealthy.longEatDrugClassify = this.trimComma(detailHealthy.longEatDrugClassify + "," + (detailHealthy.otherLongEatDrugClassify ? detailHealthy.otherLongEatDrugClassify : ""));
       detailHealthy.allergyFlag = detailHealthy.allergyFlag == 1 ? "有" : "无";
-      detailHealthy.allergen += detailHealthy.otherAllergen ? ("," +detailHealthy.otherAllergen) : "";
-      detailHealthy.allergen = this.trimComma(detailHealthy.allergen);
+      detailHealthy.allergen = this.trimComma(detailHealthy.allergen + "," + (detailHealthy.otherAllergen ? detailHealthy.otherAllergen : ""));
       let medicalReportPathArray = detailHealthy.medicalReport ? detailHealthy.medicalReport.split(",") : [];
       let medicalReportNameArray = detailHealthy.medicalReportName ? detailHealthy.medicalReportName.split(",") : [];
       this.medicalReportPathArray = medicalReportPathArray;
@@ -432,12 +447,26 @@ export default {
       this.downloadResource(fileName);
     },
     generateReport(){
-      //this.detailHealthy.customerId = this.data.id;
-      generateHealthyReport(this.detailHealthy).then((res) => {
-         if(res.code == 200 && res.path != null){
-            this.download(res.path);
-         }
-      });
+       let data = this.detailHealthy;
+       if(!this.guidanceList[0].guidanceValue || this.guidanceList[0].guidanceValue.length == 0){
+         this.$confirm("该客户还未添加减脂指导,是否确认下载报告?", "警告", {
+           confirmButtonText: "确定", cancelButtonText: "取消", type: "warning"
+         })
+           .then(function(){
+           return generateHealthyReport(data);
+         })
+         .then((response) => {
+             if(response.code == 200 && response.path != null){
+                  this.download(response.path);
+             }
+          }).catch(function () {});
+       }else{
+         generateHealthyReport(data).then((res) => {
+            if(res.code == 200 && res.path != null){
+              this.download(res.path);
+            }
+         });
+       }
     },
     trimComma(str){
       if(str.startsWith(",") || str.startsWith(",")){
@@ -480,7 +509,11 @@ export default {
     },
     handleEditRemarkClick(){
       this.$refs["physicalSignsRemarkDialog"].showDialog(this.data, this.healthyData);
+    },
+    handleEditGuidanceClick(){
+      this.$refs["physicalSignsGuidanceDialog"].showDialog(this.data, this.healthyData);
     }
+
   }
 };
 </script>
diff --git a/stdiet-ui/src/components/PhysicalSignsGuidance/index.vue b/stdiet-ui/src/components/PhysicalSignsGuidance/index.vue
new file mode 100644
index 000000000..fc3356095
--- /dev/null
+++ b/stdiet-ui/src/components/PhysicalSignsGuidance/index.vue
@@ -0,0 +1,88 @@
+<template>
+  <el-dialog :visible.sync="visible" :title="title" width="500px" append-to-body @closed="onClosed">
+    <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="100px">
+      <el-form-item label="" prop="guidance" >
+        <el-input
+          type="textarea"
+          :rows="8"
+          maxlength="300"
+          show-word-limit
+          placeholder="请输入减脂指导"
+          v-model="form.guidance">
+        </el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="submit()">确 定</el-button>
+      <el-button @click="onClosed()">取 消</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import { getCustomerPhysicalSignsByCusId } from "@/api/custom/customer";
+import { updateHealthy } from "@/api/custom/healthy";
+export default {
+  name: "PhysicalSignsGuidance",
+  components: {
+
+  },
+  data() {
+    return {
+      visible: false,
+      title: "",
+      data: undefined,
+      form: {
+        id: null,
+        guidance: null
+      },
+      rules: {
+
+      }
+    };
+  },
+  methods: {
+    showDialog(data, healthy) {
+      this.data = data;
+      this.title = "修改"+`「${data.name}」`+"减脂指导";
+      this.form.id = healthy.id;
+      this.form.guidance = healthy.guidance;
+      this.visible = true;
+    },
+    onClosed() {
+      this.visible = false;
+      this.data = null;
+    },
+    submit(){
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.editCustomerHealthy();
+        } else {
+          this.$message({message: "数据未填写完整", type: "warning"});
+        }
+      });
+    },
+    editCustomerHealthy(){
+      updateHealthy(this.form).then((response) => {
+        if (response.code === 200) {
+          this.msgSuccess("修改成功");
+          this.onClosed();
+          this.$emit('refreshHealthyData');
+        }
+      }).catch(function() {
+        console.log("error");
+      });
+    }
+  }
+};
+</script>
+
+<style scoped>
+  .margin-top-20{
+    margin-top:20px;
+  }
+  .p_title_1{
+    font-size: 18px;
+    font-weight: bold;
+    margin-top: 20px;
+  }
+</style>