| @@ -0,0 +1,43 @@ | ||||
| package com.stdiet.custom.domain; | ||||
|  | ||||
| import com.stdiet.common.annotation.Excel; | ||||
| import com.stdiet.common.core.domain.BaseEntity; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * 营养知识小问答对象 sys_nutrition_question | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-13 | ||||
|  */ | ||||
| @Data | ||||
| public class SysNutritionQuestion extends BaseEntity | ||||
| { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** $column.columnComment */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** 标题 */ | ||||
|     @Excel(name = "标题") | ||||
|     private String title; | ||||
|  | ||||
|     /** 内容 */ | ||||
|     @Excel(name = "内容") | ||||
|     private String content; | ||||
|  | ||||
|     /** 关键词,逗号隔开 */ | ||||
|     @Excel(name = "关键词,逗号隔开") | ||||
|     private String key; | ||||
|  | ||||
|     /** 标题内容索引分词之后的关键词 */ | ||||
|     @Excel(name = "标题内容索引分词之后的关键词") | ||||
|     private String titleContentIndex; | ||||
|  | ||||
|     /** 是否在小程序显示,0 不显示 1显示,默认0 */ | ||||
|     @Excel(name = "是否在小程序显示,0 不显示 1显示,默认0") | ||||
|     private Integer showFlag; | ||||
|  | ||||
|     /** 删除标识 0未删除 1已删除 */ | ||||
|     private Integer delFlag; | ||||
| } | ||||
| @@ -76,6 +76,9 @@ public class SysWxUserLog extends BaseEntity | ||||
|     //客户ID | ||||
|     private Long customerId; | ||||
|  | ||||
|     //建议 | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 非持久化字段,客户姓名 | ||||
|      */ | ||||
| @@ -123,6 +126,25 @@ public class SysWxUserLog extends BaseEntity | ||||
|     @Excel(name = "体型对比照") | ||||
|     private String bodyImages; | ||||
|  | ||||
|     /** 服务建议 */ | ||||
|     @Excel(name = "服务建议") | ||||
|     private String suggest; | ||||
|  | ||||
|     /** 目标体重 */ | ||||
|     @Excel(name = "目标体重") | ||||
|     private BigDecimal targetWeight; | ||||
|  | ||||
|     /** 执行评分,五分制 */ | ||||
|     @Excel(name = "执行评分,五分制") | ||||
|     private BigDecimal executionScore; | ||||
|  | ||||
|     /** 点评 */ | ||||
|     @Excel(name = "点评") | ||||
|     private String comment; | ||||
|  | ||||
|     /** 删除标识 0未删除 1已删除 */ | ||||
|     private Long delFlag; | ||||
|  | ||||
|     //售后营养师ID | ||||
|     private Long afterNutritionistId; | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,27 @@ | ||||
| package com.stdiet.custom.dto.response; | ||||
|  | ||||
| import com.stdiet.common.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| @Data | ||||
| public class NutritionQuestionResponse implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** $column.columnComment */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** 标题 */ | ||||
|     @Excel(name = "标题") | ||||
|     private String title; | ||||
|  | ||||
|     /** 内容 */ | ||||
|     @Excel(name = "内容") | ||||
|     private String content; | ||||
|  | ||||
|     /** 关键词,逗号隔开 */ | ||||
|     @Excel(name = "关键词,逗号隔开") | ||||
|     private String key; | ||||
| } | ||||
| @@ -0,0 +1,67 @@ | ||||
| package com.stdiet.custom.mapper; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.stdiet.custom.domain.SysNutritionQuestion; | ||||
|  | ||||
| /** | ||||
|  * 营养知识小问答Mapper接口 | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-13 | ||||
|  */ | ||||
| public interface SysNutritionQuestionMapper | ||||
| { | ||||
|     /** | ||||
|      * 查询营养知识小问答 | ||||
|      * | ||||
|      * @param id 营养知识小问答ID | ||||
|      * @return 营养知识小问答 | ||||
|      */ | ||||
|     public SysNutritionQuestion selectSysNutritionQuestionById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 查询营养知识小问答列表 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 营养知识小问答集合 | ||||
|      */ | ||||
|     public List<SysNutritionQuestion> selectSysNutritionQuestionList(SysNutritionQuestion sysNutritionQuestion); | ||||
|  | ||||
|     /** | ||||
|      * 新增营养知识小问答 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); | ||||
|  | ||||
|     /** | ||||
|      * 修改营养知识小问答 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); | ||||
|  | ||||
|     /** | ||||
|      * 删除营养知识小问答 | ||||
|      * | ||||
|      * @param id 营养知识小问答ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysNutritionQuestionById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除营养知识小问答 | ||||
|      * | ||||
|      * @param ids 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysNutritionQuestionByIds(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 根据关键词搜索对应营养知识问答 | ||||
|      * @return | ||||
|      */ | ||||
|     public List<String> getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion); | ||||
| } | ||||
| @@ -85,4 +85,11 @@ public interface SysWxUserLogMapper | ||||
|      */ | ||||
|     List<SysWxUserLog> getWxUserLogListByCustomerId(SysWxUserLog sysWxUserLog); | ||||
|  | ||||
|     /** | ||||
|      * 根据ID查询打卡详情 | ||||
|      * @param sysWxUserLog | ||||
|      * @return | ||||
|      */ | ||||
|     WxLogInfo getWxLogInfoDetailById(SysWxUserLog sysWxUserLog); | ||||
|  | ||||
| } | ||||
| @@ -1,14 +1,18 @@ | ||||
| package com.stdiet.custom.page; | ||||
|  | ||||
| import com.stdiet.common.annotation.Excel; | ||||
| import com.stdiet.common.utils.DateUtils; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.math.BigDecimal; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| public class WxLogInfo implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     private Long id; | ||||
|  | ||||
|     private String date; | ||||
|  | ||||
|     private Long water; | ||||
| @@ -27,6 +31,8 @@ public class WxLogInfo implements Serializable { | ||||
|  | ||||
|     private String defecation; | ||||
|  | ||||
|     private String remark; | ||||
|  | ||||
|     /** 情绪 */ | ||||
|     private String emotion; | ||||
|  | ||||
| @@ -51,6 +57,28 @@ public class WxLogInfo implements Serializable { | ||||
|     /** 体型对比照 */ | ||||
|     private String bodyImages; | ||||
|  | ||||
|     /** 服务建议 */ | ||||
|     private String suggest; | ||||
|  | ||||
|     /** 目标体重 */ | ||||
|     private BigDecimal targetWeight; | ||||
|  | ||||
|     /** 执行评分,五分制 */ | ||||
|     private BigDecimal executionScore; | ||||
|  | ||||
|     /** 点评 */ | ||||
|     private String comment; | ||||
|  | ||||
|     private List<String> breakfastImagesUrl; | ||||
|  | ||||
|     private List<String> lunchImagesUrl; | ||||
|  | ||||
|     private List<String> dinnerImagesUrl; | ||||
|  | ||||
|     private List<String> extraMealImagesUrl; | ||||
|  | ||||
|     private List<String> bodyImagesUrl; | ||||
|  | ||||
|     public String getDate() { | ||||
|         return date; | ||||
|     } | ||||
| @@ -187,6 +215,94 @@ public class WxLogInfo implements Serializable { | ||||
|         this.bodyImages = bodyImages; | ||||
|     } | ||||
|  | ||||
|     public String getSuggest() { | ||||
|         return suggest; | ||||
|     } | ||||
|  | ||||
|     public void setSuggest(String suggest) { | ||||
|         this.suggest = suggest; | ||||
|     } | ||||
|  | ||||
|     public BigDecimal getTargetWeight() { | ||||
|         return targetWeight; | ||||
|     } | ||||
|  | ||||
|     public void setTargetWeight(BigDecimal targetWeight) { | ||||
|         this.targetWeight = targetWeight; | ||||
|     } | ||||
|  | ||||
|     public BigDecimal getExecutionScore() { | ||||
|         return executionScore; | ||||
|     } | ||||
|  | ||||
|     public void setExecutionScore(BigDecimal executionScore) { | ||||
|         this.executionScore = executionScore; | ||||
|     } | ||||
|  | ||||
|     public String getComment() { | ||||
|         return comment; | ||||
|     } | ||||
|  | ||||
|     public void setComment(String comment) { | ||||
|         this.comment = comment; | ||||
|     } | ||||
|  | ||||
|     public List<String> getBreakfastImagesUrl() { | ||||
|         return breakfastImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public void setBreakfastImagesUrl(List<String> breakfastImagesUrl) { | ||||
|         this.breakfastImagesUrl = breakfastImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public List<String> getLunchImagesUrl() { | ||||
|         return lunchImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public void setLunchImagesUrl(List<String> lunchImagesUrl) { | ||||
|         this.lunchImagesUrl = lunchImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public List<String> getDinnerImagesUrl() { | ||||
|         return dinnerImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public void setDinnerImagesUrl(List<String> dinnerImagesUrl) { | ||||
|         this.dinnerImagesUrl = dinnerImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public List<String> getExtraMealImagesUrl() { | ||||
|         return extraMealImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public void setExtraMealImagesUrl(List<String> extraMealImagesUrl) { | ||||
|         this.extraMealImagesUrl = extraMealImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public List<String> getBodyImagesUrl() { | ||||
|         return bodyImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public void setBodyImagesUrl(List<String> bodyImagesUrl) { | ||||
|         this.bodyImagesUrl = bodyImagesUrl; | ||||
|     } | ||||
|  | ||||
|     public String getRemark() { | ||||
|         return remark; | ||||
|     } | ||||
|  | ||||
|     public void setRemark(String remark) { | ||||
|         this.remark = remark; | ||||
|     } | ||||
|  | ||||
|     public Long getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     public void setId(Long id) { | ||||
|         this.id = id; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "WxLogInfo{" + | ||||
|   | ||||
| @@ -0,0 +1,70 @@ | ||||
| package com.stdiet.custom.service; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| import com.stdiet.custom.domain.SysNutritionQuestion; | ||||
|  | ||||
| /** | ||||
|  * 营养知识小问答Service接口 | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-13 | ||||
|  */ | ||||
| public interface ISysNutritionQuestionService | ||||
| { | ||||
|     /** | ||||
|      * 查询营养知识小问答 | ||||
|      * | ||||
|      * @param id 营养知识小问答ID | ||||
|      * @return 营养知识小问答 | ||||
|      */ | ||||
|     public SysNutritionQuestion selectSysNutritionQuestionById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 查询营养知识小问答列表 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 营养知识小问答集合 | ||||
|      */ | ||||
|     public List<SysNutritionQuestion> selectSysNutritionQuestionList(SysNutritionQuestion sysNutritionQuestion); | ||||
|  | ||||
|     /** | ||||
|      * 新增营养知识小问答 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); | ||||
|  | ||||
|     /** | ||||
|      * 修改营养知识小问答 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除营养知识小问答 | ||||
|      * | ||||
|      * @param ids 需要删除的营养知识小问答ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysNutritionQuestionByIds(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 删除营养知识小问答信息 | ||||
|      * | ||||
|      * @param id 营养知识小问答ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysNutritionQuestionById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 根据关键词搜索对应营养知识问答(Lucene索引分词查询) | ||||
|      * @return | ||||
|      */ | ||||
|     public Map<String, Object> getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion, int pageNum, int pageSize); | ||||
|  | ||||
| } | ||||
| @@ -87,4 +87,11 @@ public interface ISysWxUserLogService | ||||
|      */ | ||||
|     List<SysWxUserLog> getWxUserLogListByCustomerId(SysWxUserLog sysWxUserLog); | ||||
|  | ||||
|     /** | ||||
|      * 根据ID查询打卡详情 | ||||
|      * @param sysWxUserLog | ||||
|      * @return | ||||
|      */ | ||||
|     WxLogInfo getWxLogInfoDetailById(SysWxUserLog sysWxUserLog); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,154 @@ | ||||
| package com.stdiet.custom.service.impl; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| import com.stdiet.common.utils.DateUtils; | ||||
| import com.stdiet.common.utils.reflect.ReflectUtils; | ||||
| import com.stdiet.custom.utils.LuceneIndexUtils; | ||||
| import org.apache.lucene.document.Document; | ||||
| import org.apache.lucene.document.Field; | ||||
| import org.apache.lucene.document.TextField; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import com.stdiet.custom.mapper.SysNutritionQuestionMapper; | ||||
| import com.stdiet.custom.domain.SysNutritionQuestion; | ||||
| import com.stdiet.custom.service.ISysNutritionQuestionService; | ||||
|  | ||||
| /** | ||||
|  * 营养知识小问答Service业务层处理 | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-13 | ||||
|  */ | ||||
| @Service | ||||
| public class SysNutritionQuestionServiceImpl implements ISysNutritionQuestionService | ||||
| { | ||||
|     @Autowired | ||||
|     private SysNutritionQuestionMapper sysNutritionQuestionMapper; | ||||
|  | ||||
|     public static final String index_path = "D:\\develop\\LuceneIndex\\nutritionQuestion"; | ||||
|     //private static final String index_path = ""; | ||||
|  | ||||
|     //建立索引的字段名称 | ||||
|     public static final String[] index_field_array = {"id", "title", "content", "key"}; | ||||
|  | ||||
|     /** | ||||
|      * 查询营养知识小问答 | ||||
|      * | ||||
|      * @param id 营养知识小问答ID | ||||
|      * @return 营养知识小问答 | ||||
|      */ | ||||
|     @Override | ||||
|     public SysNutritionQuestion selectSysNutritionQuestionById(Long id) | ||||
|     { | ||||
|         return sysNutritionQuestionMapper.selectSysNutritionQuestionById(id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询营养知识小问答列表 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 营养知识小问答 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<SysNutritionQuestion> selectSysNutritionQuestionList(SysNutritionQuestion sysNutritionQuestion) | ||||
|     { | ||||
|         return sysNutritionQuestionMapper.selectSysNutritionQuestionList(sysNutritionQuestion); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增营养知识小问答 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int insertSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion) | ||||
|     { | ||||
|         sysNutritionQuestion.setCreateTime(DateUtils.getNowDate()); | ||||
|         if(sysNutritionQuestionMapper.insertSysNutritionQuestion(sysNutritionQuestion) > 0){ | ||||
|             return createNutritionQuestionIndex(sysNutritionQuestion) ? 1 : 0; | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改营养知识小问答 | ||||
|      * | ||||
|      * @param sysNutritionQuestion 营养知识小问答 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int updateSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion) | ||||
|     { | ||||
|         sysNutritionQuestion.setUpdateTime(DateUtils.getNowDate()); | ||||
|         return sysNutritionQuestionMapper.updateSysNutritionQuestion(sysNutritionQuestion); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 批量删除营养知识小问答 | ||||
|      * | ||||
|      * @param ids 需要删除的营养知识小问答ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int deleteSysNutritionQuestionByIds(Long[] ids) | ||||
|     { | ||||
|         return sysNutritionQuestionMapper.deleteSysNutritionQuestionByIds(ids); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除营养知识小问答信息 | ||||
|      * | ||||
|      * @param id 营养知识小问答ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int deleteSysNutritionQuestionById(Long id) | ||||
|     { | ||||
|         return sysNutritionQuestionMapper.deleteSysNutritionQuestionById(id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据关键词搜索对应营养知识问答 | ||||
|      * @return | ||||
|      */ | ||||
|     @Override | ||||
|     public Map<String, Object> getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion, int pageNum, int pageSize){ | ||||
|         //return sysNutritionQuestionMapper.getNutritionQuestionListByKey(sysNutritionQuestion); | ||||
|         try{ | ||||
|             //建立索引 | ||||
|             LuceneIndexUtils luceneIndexUtils = LuceneIndexUtils.getLuceneIndexUtils(index_path); | ||||
|             return luceneIndexUtils.queryByKeyword(sysNutritionQuestion.getKey(), index_field_array, pageNum, pageSize); | ||||
|         }catch (Exception e){ | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         Map<String, Object> result = new HashMap<>(); | ||||
|         result.put("total", 0); | ||||
|         result.put("data", new ArrayList<>()); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 建立索引 | ||||
|      * @param sysNutritionQuestion | ||||
|      * @return | ||||
|      */ | ||||
|     private boolean createNutritionQuestionIndex(SysNutritionQuestion sysNutritionQuestion){ | ||||
|         try{ | ||||
|             //建立索引 | ||||
|             LuceneIndexUtils luceneIndexUtils = LuceneIndexUtils.getLuceneIndexUtils(index_path); | ||||
|             Document document = new Document(); | ||||
|             for (String fieldName : index_field_array) { | ||||
|                 document.add(new TextField(fieldName, ReflectUtils.getFieldValue(sysNutritionQuestion, fieldName)+"", Field.Store.YES)); | ||||
|             } | ||||
|             return luceneIndexUtils.addIndexOne(document); | ||||
|         }catch (Exception e){ | ||||
|             e.printStackTrace(); | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -133,4 +133,13 @@ public class SysWxUserLogServiceImpl implements ISysWxUserLogService { | ||||
|         return sysWxUserLogMapper.getWxUserLogListByCustomerId(sysWxUserLog); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据ID查询打卡详情 | ||||
|      * @param sysWxUserLog | ||||
|      * @return | ||||
|      */ | ||||
|     public WxLogInfo getWxLogInfoDetailById(SysWxUserLog sysWxUserLog){ | ||||
|         return sysWxUserLogMapper.getWxLogInfoDetailById(sysWxUserLog); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,319 @@ | ||||
| package com.stdiet.custom.utils; | ||||
|  | ||||
| import com.stdiet.common.utils.StringUtils; | ||||
| import com.stdiet.custom.service.impl.SysNutritionQuestionServiceImpl; | ||||
| import org.apache.lucene.document.Document; | ||||
| import org.apache.lucene.index.*; | ||||
| import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; | ||||
| import org.apache.lucene.search.*; | ||||
| import org.apache.lucene.store.Directory; | ||||
| import org.apache.lucene.store.FSDirectory; | ||||
| import org.apache.lucene.util.Version; | ||||
| import org.wltea.analyzer.core.IKSegmenter; | ||||
| import org.wltea.analyzer.core.Lexeme; | ||||
| import org.wltea.analyzer.lucene.IKAnalyzer; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.io.StringReader; | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Lucene的IKAnalyzer工具类 | ||||
|  */ | ||||
| public class LuceneIndexUtils { | ||||
|  | ||||
|     //分词器 | ||||
|     private IKAnalyzer analyzer = null; | ||||
|     //索引库 | ||||
|     private Directory directory = null; | ||||
|     //分词器工具 | ||||
|     private IndexWriterConfig config = null; | ||||
|     //流 | ||||
|     private IndexWriter indexWriter= null; | ||||
|  | ||||
|     public static final String default_primary_key = "id"; | ||||
|  | ||||
|     public static final Integer max_select_count = 1000; | ||||
|  | ||||
|     public static LuceneIndexUtils getLuceneIndexUtils(String indexPath){ | ||||
|         LuceneIndexUtils luceneIndexUtils = new LuceneIndexUtils(); | ||||
|         try { | ||||
|             //分词器 | ||||
|             luceneIndexUtils.analyzer = new IKAnalyzer(); | ||||
|             //使用智能分词 | ||||
|             luceneIndexUtils.analyzer.setUseSmart(true); | ||||
|             //索引库 | ||||
|             luceneIndexUtils.directory = FSDirectory.open(new File(indexPath)); | ||||
|             //工具装配分词器 | ||||
|             luceneIndexUtils.config = new IndexWriterConfig(Version.LUCENE_44, luceneIndexUtils.analyzer); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return luceneIndexUtils; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 增加所有数据 | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public int addIndexs(ArrayList<Document> documents) throws IOException { | ||||
|  | ||||
|         //流 读取索引库 加装工具 | ||||
|         indexWriter = new IndexWriter(directory,config); | ||||
|  | ||||
|         //数据进流 | ||||
|         indexWriter.addDocuments(documents); | ||||
|  | ||||
|         try { | ||||
|             indexWriter.commit(); | ||||
|             return documents.size(); | ||||
|         }catch (Exception e){ | ||||
|             indexWriter.rollback(); | ||||
|             return 0; | ||||
|         }finally { | ||||
|             indexWriter.close(); | ||||
|             indexWriter= null; | ||||
|             //config=null; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 增加一条数据 | ||||
|      * @param document | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public boolean addIndexOne(Document document) throws IOException { | ||||
|  | ||||
|  | ||||
|         //流 读取索引库 加装工具 | ||||
|         indexWriter = new IndexWriter(directory,config); | ||||
|  | ||||
|         //数据进流 | ||||
|         indexWriter.addDocument(document); | ||||
|  | ||||
|         try { | ||||
|             indexWriter.commit(); | ||||
|             return true; | ||||
|         }catch (Exception e){ | ||||
|             indexWriter.rollback(); | ||||
|             return false; | ||||
|         }finally { | ||||
|             indexWriter.close(); | ||||
|             indexWriter= null; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除索引库所有数据 | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public boolean deleteAllIndex() throws IOException { | ||||
|  | ||||
|         try { | ||||
|  | ||||
|             //流 读取索引库 加装工具 | ||||
|             indexWriter = new IndexWriter(directory,config); | ||||
|  | ||||
|             indexWriter.deleteAll(); | ||||
|             indexWriter.commit(); | ||||
|             return true; | ||||
|         }catch (Exception e){ | ||||
|             e.printStackTrace(); | ||||
|             indexWriter.rollback(); | ||||
|             return false; | ||||
|         }finally { | ||||
|             indexWriter.close(); | ||||
|             indexWriter= null; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除索引库中一条数据 | ||||
|      * @param term | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public boolean deleteOne(Term term) throws IOException { | ||||
|  | ||||
|  | ||||
|         //流 读取索引库 加装工具 | ||||
|         indexWriter = new IndexWriter(directory,config); | ||||
|  | ||||
|         try { | ||||
|             indexWriter.deleteDocuments(term); | ||||
|             indexWriter.commit(); | ||||
|             return true; | ||||
|         }catch (Exception e){ | ||||
|             indexWriter.rollback(); | ||||
|             return false; | ||||
|         }finally { | ||||
|             indexWriter.close(); | ||||
|             indexWriter= null; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改索引库中一条数据 | ||||
|      * 注意:此处修改为  根据查找条件修改  如果有则修改 没有则新添 多条则修改一条(索引库的底层其实做法是 先删除,后修改- -) | ||||
|      * @param term | ||||
|      * @param document | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public boolean updateOne(Term term, Document document) throws IOException { | ||||
|  | ||||
|         try { | ||||
|  | ||||
|             //流 读取索引库 加装工具 | ||||
|             indexWriter = new IndexWriter(directory,config); | ||||
|  | ||||
|             indexWriter.updateDocument(term,document); | ||||
|             indexWriter.commit(); | ||||
|             return true; | ||||
|         }catch (Exception e){ | ||||
|             indexWriter.rollback(); | ||||
|             return false; | ||||
|         }finally { | ||||
|             indexWriter.close(); | ||||
|             indexWriter= null; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询索引库的数据(根据输入关键字) | ||||
|      * @param keyword | ||||
|      * @return | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public Map<String, Object> queryByKeyword(String keyword, String[] columns, int pageNum, int pageSize) throws Exception { | ||||
|         Map<String, Object> result = new HashMap<>(); | ||||
|  | ||||
|         //指定读取索引库的列数据 | ||||
|         //String[] columns = {"articleId","articleName","articleImage","articleContent"}; | ||||
|  | ||||
|         //装配 | ||||
|         MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_44, columns, analyzer); | ||||
|  | ||||
|         //解析输入关键字 | ||||
|         Query query = StringUtils.isEmpty(keyword) ? new WildcardQuery(new Term(default_primary_key, "*")) : queryParser.parse(keyword); | ||||
|  | ||||
|         //读索引库流 | ||||
|         IndexReader reader = DirectoryReader.open(directory); | ||||
|  | ||||
|         //获得读取对象 | ||||
|         IndexSearcher indexSearcher = new IndexSearcher(reader); | ||||
|  | ||||
|         //排序 | ||||
|         SortField sortField = new SortField(default_primary_key, SortField.Type.INT, true); | ||||
|         Sort sort = new Sort(sortField); | ||||
|  | ||||
|         //装配解析结果 指定读取量级 | ||||
|         TopDocs search = indexSearcher.search(query, max_select_count, sort); | ||||
|  | ||||
|         //获得数据地址数组 | ||||
|         ScoreDoc[] scoreDocs = search.scoreDocs; | ||||
|  | ||||
|         result.put("total", scoreDocs.length); | ||||
|  | ||||
|         //创建返回集合  --> 方便装配 | ||||
|         ArrayList<Document> list = new ArrayList<>(); | ||||
|  | ||||
|         int start = (pageNum - 1) * pageSize; | ||||
|  | ||||
|         if(start < scoreDocs.length){ | ||||
|             int end = pageSize * pageNum; | ||||
|             if (end > scoreDocs.length) { | ||||
|                 end = scoreDocs.length; | ||||
|             } | ||||
|             for (int i = start; i < end; i++) { | ||||
|                 //进集合 装配 | ||||
|                 list.add(indexSearcher.doc(scoreDocs[i].doc)); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         result.put("data", list); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 重置索引库 不解释 | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      */ | ||||
|     public boolean resetIndexDB(ArrayList<Document> documents) throws IOException { | ||||
|  | ||||
|         try { | ||||
|             boolean bool = deleteAllIndex(); | ||||
|             System.out.println(bool); | ||||
|             int i = addIndexs(documents); | ||||
|             System.out.println(i); | ||||
|             return true; | ||||
|         } catch (Exception e) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * 打印分词结果 | ||||
|      * @param keyWord | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public static void printAnalysisResult(String keyWord) throws Exception { | ||||
|         StringReader reader = new StringReader(keyWord); | ||||
|         IKSegmenter ik = new IKSegmenter(reader, true);// 当为true时,分词器进行最大词长切分 | ||||
|         Lexeme lexeme = null; | ||||
|         while ((lexeme = ik.next()) != null) { | ||||
|             System.out.println(lexeme.getLexemeText()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|     public static void main(String[] args) throws IOException { | ||||
|         try{ | ||||
|             LuceneIndexUtils luceneIndexUtils = LuceneIndexUtils.getLuceneIndexUtils(SysNutritionQuestionServiceImpl.index_path); | ||||
|             /*for (int i = 1 ; i < 100; i++){ | ||||
|                 Document document = new Document(); | ||||
|                 document.add(new TextField("id",i+"", Field.Store.YES)); | ||||
|                 document.add(new TextField("title","什么食物是脂肪杀手?", Field.Store.YES)); | ||||
|                 document.add(new TextField("content","黄瓜", Field.Store.YES)); | ||||
|                 document.add(new TextField("key","脂肪|杀手|食物", Field.Store.YES)); | ||||
|                 luceneIndexUtils.addIndexOne(document); | ||||
|  | ||||
|             }*/ | ||||
|             /*Document document = new Document(); | ||||
|             document.add(new TextField("id","1", Field.Store.YES)); | ||||
|             document.add(new TextField("title","什么食物是脂肪杀手?", Field.Store.YES)); | ||||
|             document.add(new TextField("content","黄瓜", Field.Store.YES)); | ||||
|             document.add(new TextField("key","脂肪|杀手|食物", Field.Store.YES)); | ||||
|             luceneIndexUtils.addIndexOne(document);*/ | ||||
|  | ||||
|             String[] columns = {"key","content","title"}; | ||||
|             Map<String,Object> map = luceneIndexUtils.queryByKeyword("猝死", SysNutritionQuestionServiceImpl.index_field_array, 1,10); | ||||
|  | ||||
|             System.out.println(Long.parseLong(map.get("total").toString())); | ||||
|  | ||||
|             for(Document document : (List<Document>)map.get("data")){ | ||||
|                 System.out.println(document.get("id")+"-"+document.get("key")); | ||||
|             } | ||||
|  | ||||
|             //LuceneIndexUtils.printAnalysisResult("什么食物是脂肪杀手?"); | ||||
|         }catch (Exception e){ | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,114 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
|         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
|         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.stdiet.custom.mapper.SysNutritionQuestionMapper"> | ||||
|  | ||||
|     <resultMap type="SysNutritionQuestion" id="SysNutritionQuestionResult"> | ||||
|         <result property="id"    column="id"    /> | ||||
|         <result property="title"    column="title"    /> | ||||
|         <result property="content"    column="content"    /> | ||||
|         <result property="key"    column="key"    /> | ||||
|         <result property="titleContentIndex"    column="title_content_index"    /> | ||||
|         <result property="showFlag"    column="show_flag"    /> | ||||
|         <result property="createTime"    column="create_time"    /> | ||||
|         <result property="createBy"    column="create_by"    /> | ||||
|         <result property="updateTime"    column="update_time"    /> | ||||
|         <result property="updateBy"    column="update_by"    /> | ||||
|         <result property="delFlag"    column="del_flag"    /> | ||||
|     </resultMap> | ||||
|  | ||||
|     <!-- 部分字段resultMap --> | ||||
|     <resultMap type="com.stdiet.custom.dto.response.NutritionQuestionResponse" id="SysNutritionQuestionResultExtended"> | ||||
|         <result property="id"    column="id"    /> | ||||
|         <result property="title"    column="title"    /> | ||||
|         <result property="content"    column="content"    /> | ||||
|         <result property="key"    column="key"    /> | ||||
|         <result property="titleContentIndex"    column="title_content_index"    /> | ||||
|     </resultMap> | ||||
|  | ||||
|     <sql id="selectSysNutritionQuestionVo"> | ||||
|         select id, title, content, `key`, title_content_index, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutrition_question | ||||
|     </sql> | ||||
|  | ||||
|     <select id="selectSysNutritionQuestionList" parameterType="SysNutritionQuestion" resultMap="SysNutritionQuestionResult"> | ||||
|         <include refid="selectSysNutritionQuestionVo"/> where del_flag = 0 | ||||
|         <if test="title != null  and title != ''"> and title = #{title}</if> | ||||
|         <if test="content != null  and content != ''"> and content = #{content}</if> | ||||
|         <if test="key != null  and key != ''"> and `key` = #{key}</if> | ||||
|         <if test="titleContentIndex != null  and titleContentIndex != ''"> and title_content_index = #{titleContentIndex}</if> | ||||
|         <if test="showFlag != null "> and show_flag = #{showFlag}</if> | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectSysNutritionQuestionById" parameterType="Long" resultMap="SysNutritionQuestionResult"> | ||||
|         <include refid="selectSysNutritionQuestionVo"/> | ||||
|         where id = #{id} and del_flag = 0 | ||||
|     </select> | ||||
|  | ||||
|     <insert id="insertSysNutritionQuestion" parameterType="SysNutritionQuestion" useGeneratedKeys="true" keyProperty="id"> | ||||
|         insert into sys_nutrition_question | ||||
|         <trim prefix="(" suffix=")" suffixOverrides=","> | ||||
|             <if test="title != null">title,</if> | ||||
|             <if test="content != null">content,</if> | ||||
|             <if test="key != null and key != ''">`key`,</if> | ||||
|             <if test="titleContentIndex != null">title_content_index,</if> | ||||
|             <if test="showFlag != null">show_flag,</if> | ||||
|             <if test="createTime != null">create_time,</if> | ||||
|             <if test="createBy != null">create_by,</if> | ||||
|             <if test="updateTime != null">update_time,</if> | ||||
|             <if test="updateBy != null">update_by,</if> | ||||
|             <if test="delFlag != null">del_flag,</if> | ||||
|         </trim> | ||||
|         <trim prefix="values (" suffix=")" suffixOverrides=","> | ||||
|             <if test="title != null">#{title},</if> | ||||
|             <if test="content != null">#{content},</if> | ||||
|             <if test="key != null and key != ''">#{key},</if> | ||||
|             <if test="titleContentIndex != null">#{titleContentIndex},</if> | ||||
|             <if test="showFlag != null">#{showFlag},</if> | ||||
|             <if test="createTime != null">#{createTime},</if> | ||||
|             <if test="createBy != null">#{createBy},</if> | ||||
|             <if test="updateTime != null">#{updateTime},</if> | ||||
|             <if test="updateBy != null">#{updateBy},</if> | ||||
|             <if test="delFlag != null">#{delFlag},</if> | ||||
|         </trim> | ||||
|     </insert> | ||||
|  | ||||
|     <update id="updateSysNutritionQuestion" parameterType="SysNutritionQuestion"> | ||||
|         update sys_nutrition_question | ||||
|         <trim prefix="SET" suffixOverrides=","> | ||||
|             <if test="title != null">title = #{title},</if> | ||||
|             <if test="content != null">content = #{content},</if> | ||||
|             <if test="key != null and key != ''">`key` = #{key},</if> | ||||
|             <if test="titleContentIndex != null">title_content_index = #{titleContentIndex},</if> | ||||
|             <if test="showFlag != null">show_flag = #{showFlag},</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> | ||||
|             <if test="updateBy != null">update_by = #{updateBy},</if> | ||||
|             <if test="delFlag != null">del_flag = #{delFlag},</if> | ||||
|         </trim> | ||||
|         where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <update id="deleteSysNutritionQuestionById" parameterType="Long"> | ||||
|         update sys_nutrition_question set del_flag = 1 where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <update id="deleteSysNutritionQuestionByIds" parameterType="String"> | ||||
|         update sys_nutrition_question set del_flag = 1 where id in | ||||
|         <foreach item="id" collection="array" open="(" separator="," close=")"> | ||||
|             #{id} | ||||
|         </foreach> | ||||
|     </update> | ||||
|  | ||||
|     <!-- 根据关键词查询对应知识问题 --> | ||||
|     <select id="getNutritionQuestionListByKey" parameterType="SysNutritionQuestion" resultMap="SysNutritionQuestionResultExtended"> | ||||
|         select id, title, `key`, content where del_flag = 0 | ||||
|         <if test="showFlag != null "> and show_flag = #{showFlag}</if> | ||||
|         <if test="key != null and key != ''"> | ||||
|           and (title like CONCAT('%',#{key},'%') or key like CONCAT('%',#{key},'%') or titleContentIndex like CONCAT('%',#{key},'%')) | ||||
|         </if> | ||||
|         order by id desc | ||||
|     </select> | ||||
|  | ||||
| </mapper> | ||||
| @@ -33,6 +33,11 @@ | ||||
|         <result property="dinnerImages"    column="dinner_images"    /> | ||||
|         <result property="extraMealImages"    column="extra_meal_images"    /> | ||||
|         <result property="bodyImages"    column="body_images"    /> | ||||
|         <result property="suggest"    column="suggest"    /> | ||||
|         <result property="targetWeight"    column="target_weight"    /> | ||||
|         <result property="executionScore"    column="execution_score"    /> | ||||
|         <result property="comment"    column="comment"    /> | ||||
|         <result property="delFlag"    column="del_flag"    /> | ||||
|         <!-- 非持久字段 --> | ||||
|         <result property="customerName" column="customer_name"></result> | ||||
|         <!-- 营养师 --> | ||||
| @@ -41,6 +46,7 @@ | ||||
|     </resultMap> | ||||
|  | ||||
|     <resultMap type="com.stdiet.custom.page.WxLogInfo" id="WxLogInfo"> | ||||
|         <result property="id"    column="id"    /> | ||||
|         <result property="weight" column="weight"/> | ||||
|         <result property="sleepTime" column="sleep_time"/> | ||||
|         <result property="wakeupTime" column="wakeup_time"/> | ||||
| @@ -53,34 +59,39 @@ | ||||
|         <result property="emotion"    column="emotion"    /> | ||||
|         <result property="slyEatFood"    column="sly_eat_food"    /> | ||||
|         <result property="constipation"    column="constipation"    /> | ||||
|         <result property="remark" column="remark"></result> | ||||
|         <result property="breakfastImages"    column="breakfast_images"    /> | ||||
|         <result property="lunchImages"    column="lunch_images"    /> | ||||
|         <result property="dinnerImages"    column="dinner_images"    /> | ||||
|         <result property="extraMealImages"    column="extra_meal_images"    /> | ||||
|         <result property="bodyImages"    column="body_images"    /> | ||||
|         <result property="suggest"    column="suggest"    /> | ||||
|         <result property="targetWeight"    column="target_weight"    /> | ||||
|         <result property="executionScore"    column="execution_score"    /> | ||||
|         <result property="comment"    column="comment"    /> | ||||
|     </resultMap> | ||||
|  | ||||
|     <sql id="selectSysWxUserLogVo"> | ||||
|         select id,openid, weight, appid, phone, log_time, sleep_time, wakeup_time, sport, avatar_url, diet, insomnia, defecation, water, create_by, create_time, update_by, update_time, remark, | ||||
|          emotion,sly_eat_food,constipation,breakfast_images,lunch_images,dinner_images,extra_meal_images,body_images | ||||
|          emotion,sly_eat_food,constipation,breakfast_images,lunch_images,dinner_images,extra_meal_images,body_images,suggest,execution_score,comment | ||||
|          from sys_wx_user_log | ||||
|     </sql> | ||||
|  | ||||
|     <select id="checkWxLogInfoCount" parameterType="String" resultType="Integer"> | ||||
|         select count(*) from sys_wx_user_log where to_days(log_time) = to_days(now()) and openid = #{openid} | ||||
|         select count(*) from sys_wx_user_log where to_days(log_time) = to_days(now()) and openid = #{openid} and del_flag = 0 | ||||
|     </select> | ||||
|  | ||||
|     <!-- 后台查询 --> | ||||
|     <select id="selectSysWxUserLogList" parameterType="SysWxUserLog" resultMap="SysWxUserLogResult"> | ||||
|         SELECT wxlog.id,wxinfo.appid,wxinfo.openid,wxinfo.avatar_url,wxinfo.phone,wxlog.weight,wxlog.log_time,wxlog.sleep_time, wxlog.wakeup_time,wxlog.defecation, wxlog.water, wxlog.insomnia,wxlog.sport,wxlog.diet,wxlog.remark, | ||||
|         wxlog.emotion,wxlog.sly_eat_food,wxlog.constipation,wxlog.breakfast_images,wxlog.lunch_images,wxlog.dinner_images,wxlog.extra_meal_images,wxlog.body_images, | ||||
|         sc.name as customer_name, su.nick_name as nutritionist, su_atferSale.nick_name as after_nutritionist | ||||
|         wxlog.suggest,wxlog.execution_score,wxlog.comment,sc.name as customer_name, su.nick_name as nutritionist, su_atferSale.nick_name as after_nutritionist | ||||
|         FROM sys_wx_user_log wxlog | ||||
|         left join sys_wx_user_info wxinfo on wxinfo.openid  = wxlog.openid | ||||
|         left join sys_customer sc on sc.phone = wxinfo.phone and sc.del_flag = 0 | ||||
|         left join sys_user su on su.user_id = sc.main_dietitian and su.del_flag = '0' | ||||
|         left join sys_user su_atferSale on su_atferSale.user_id = sc.after_dietitian and su_atferSale.del_flag = '0' | ||||
|         where wxinfo.phone is not null | ||||
|         where wxlog.del_flag = 0 and wxinfo.phone is not null | ||||
|         <if test="id != null"> | ||||
|             and wxlog.id = #{id} | ||||
|         </if> | ||||
| @@ -103,24 +114,22 @@ | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectWxLogInfoList" parameterType="SysWxUserLog" resultMap="WxLogInfo"> | ||||
|         SELECT * FROM sys_wx_user_log log | ||||
|         <where> | ||||
|             <choose> | ||||
|                 <when test="phone == null or phone == ''"> | ||||
|                     (SELECT phone FROM sys_wx_user_info WHERE openid = #{openid}) = log.phone | ||||
|                 </when> | ||||
|                 <otherwise> | ||||
|                     <if test="openid != null  and openid != ''">and openid = #{openid}</if> | ||||
|                     <if test="phone != null  and phone != ''">or phone = #{phone}</if> | ||||
|                 </otherwise> | ||||
|             </choose> | ||||
|         </where> | ||||
|         SELECT * FROM sys_wx_user_log log where log.del_flag = 0 | ||||
|         <choose> | ||||
|             <when test="phone == null or phone == ''"> | ||||
|                 (SELECT phone FROM sys_wx_user_info WHERE openid = #{openid}) = log.phone | ||||
|             </when> | ||||
|             <otherwise> | ||||
|                 <if test="openid != null  and openid != ''">and openid = #{openid}</if> | ||||
|                 <if test="phone != null  and phone != ''">or phone = #{phone}</if> | ||||
|             </otherwise> | ||||
|         </choose> | ||||
|         order by log_time asc | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectSysWxUserLogById" parameterType="String" resultMap="SysWxUserLogResult"> | ||||
|         <include refid="selectSysWxUserLogVo"/> | ||||
|         where id = #{id} | ||||
|         where id = #{id} and del_flag = 0 | ||||
|     </select> | ||||
|  | ||||
|     <insert id="insertSysWxUserLog" parameterType="SysWxUserLog"> | ||||
| @@ -152,6 +161,11 @@ | ||||
|             <if test="dinnerImages != null">dinner_images,</if> | ||||
|             <if test="extraMealImages != null">extra_meal_images,</if> | ||||
|             <if test="bodyImages != null">body_images,</if> | ||||
|             <if test="suggest != null">suggest,</if> | ||||
|             <if test="targetWeight != null">target_weight,</if> | ||||
|             <if test="executionScore != null">execution_score,</if> | ||||
|             <if test="comment != null">comment,</if> | ||||
|             <if test="delFlag != null">del_flag,</if> | ||||
|         </trim> | ||||
|         <trim prefix="values (" suffix=")" suffixOverrides=","> | ||||
|             <if test="openid != null">#{openid},</if> | ||||
| @@ -180,6 +194,11 @@ | ||||
|             <if test="dinnerImages != null">#{dinnerImages},</if> | ||||
|             <if test="extraMealImages != null">#{extraMealImages},</if> | ||||
|             <if test="bodyImages != null">#{bodyImages},</if> | ||||
|             <if test="suggest != null">suggest = #{suggest},</if> | ||||
|             <if test="targetWeight != null">target_weight = #{targetWeight},</if> | ||||
|             <if test="executionScore != null">execution_score = #{executionScore},</if> | ||||
|             <if test="comment != null">comment = #{comment},</if> | ||||
|             <if test="delFlag != null">del_flag = #{delFlag},</if> | ||||
|         </trim> | ||||
|     </insert> | ||||
|  | ||||
| @@ -212,32 +231,38 @@ | ||||
|             <if test="dinnerImages != null">dinner_images = #{dinnerImages},</if> | ||||
|             <if test="extraMealImages != null">extra_meal_images = #{extraMealImages},</if> | ||||
|             <if test="bodyImages != null">body_images = #{bodyImages},</if> | ||||
|             <if test="suggest != null">suggest = #{suggest},</if> | ||||
|             <if test="targetWeight != null">target_weight = #{targetWeight},</if> | ||||
|             <if test="executionScore != null">execution_score = #{executionScore},</if> | ||||
|             <if test="comment != null">comment = #{comment},</if> | ||||
|             <if test="delFlag != null">del_flag = #{delFlag},</if> | ||||
|         </trim> | ||||
|         where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <delete id="deleteSysWxUserLogById" parameterType="Long"> | ||||
|         delete from sys_wx_user_log where id = #{id} | ||||
|     </delete> | ||||
|     <update id="deleteSysWxUserLogById" parameterType="Long"> | ||||
|         update sys_wx_user_log set del_flag = 1 where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <delete id="deleteSysWxUserLogByIds" parameterType="String"> | ||||
|         delete from sys_wx_user_log where id in | ||||
|     <update id="deleteSysWxUserLogByIds" parameterType="String"> | ||||
|         update sys_wx_user_log set del_flag = 1  where id in | ||||
|         <foreach item="id" collection="array" open="(" separator="," close=")"> | ||||
|             #{id} | ||||
|         </foreach> | ||||
|     </delete> | ||||
|     </update> | ||||
|  | ||||
|     <!-- 根据openid和手机号查询对应打卡记录 --> | ||||
|     <select id="getWxLogInfoList" parameterType="SysWxUserLog" resultMap="WxLogInfo"> | ||||
|         SELECT wxlog.weight,wxlog.log_time,wxlog.sleep_time, wxlog.wakeup_time,wxlog.defecation, wxlog.water, wxlog.insomnia,wxlog.sport,wxlog.diet, | ||||
|         SELECT wxlog.id,wxlog.weight,wxlog.log_time,wxlog.sleep_time, wxlog.wakeup_time,wxlog.defecation, wxlog.water, wxlog.insomnia,wxlog.sport,wxlog.diet, | ||||
|         wxlog.emotion,wxlog.sly_eat_food,wxlog.constipation,wxlog.breakfast_images,wxlog.lunch_images,wxlog.dinner_images,wxlog.extra_meal_images,wxlog.body_images | ||||
|         ,wxlog.remark,wxlog.execution_score,wxlog.comment | ||||
|         FROM sys_wx_user_log wxlog left join sys_wx_user_info wxinfo on wxinfo.openid  = wxlog.openid | ||||
|         where wxinfo.openid = #{openid} or wxinfo.phone = #{phone} | ||||
|         where wxlog.del_flag = 0 and (wxinfo.openid = #{openid} or wxinfo.phone = #{phone}) | ||||
|         order by wxlog.log_time desc | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectSysWxUserLogByDateAndOpenId"  parameterType="SysWxUserLog" resultMap="SysWxUserLogResult"> | ||||
|         select id from sys_wx_user_log where to_days(log_time) = to_days(#{logTime}) and openid = #{openid} limit 1 | ||||
|         select id from sys_wx_user_log where del_flag = 0 and to_days(log_time) = to_days(#{logTime}) and openid = #{openid} limit 1 | ||||
|     </select> | ||||
|  | ||||
|     <!-- 根据手机号和openid查询打卡连续天数,只查询前两条 --> | ||||
| @@ -250,7 +275,7 @@ | ||||
|                 ( | ||||
|                     SELECT log_time,CONCAT(YEAR(log_time),'-',MONTH(log_time)) AS yearMonth,DAY(log_time) AS days | ||||
|                     FROM sys_wx_user_log wxlog left join sys_wx_user_info wxinfo on wxinfo.openid  = wxlog.openid | ||||
|                     where wxinfo.openid = #{openid} or wxinfo.phone = #{phone} | ||||
|                     where wxlog.del_flag = 0 and wxinfo.openid = #{openid} or wxinfo.phone = #{phone} | ||||
|                 ) AS s ORDER BY s.log_time DESC | ||||
|             ) ss | ||||
|         ) sss GROUP BY yearMonth,day_cha LIMIT 2 | ||||
| @@ -261,10 +286,20 @@ | ||||
|         SELECT wxlog.id,wxlog.log_time,wxlog.weight FROM sys_wx_user_log wxlog | ||||
|         left join sys_wx_user_info wxinfo on wxinfo.openid  = wxlog.openid | ||||
|         left join sys_customer sc on sc.phone = wxinfo.phone and sc.del_flag = 0 | ||||
|         where wxinfo.phone is not null and sc.id = #{customerId} | ||||
|         where wxlog.del_flag = 0 and wxinfo.phone is not null and sc.id = #{customerId} | ||||
|         <if test="beginTime != null and beginTime != ''">and date_format(wxlog.log_time,'%y%m%d') >= date_format(#{beginTime},'%y%m%d')</if> | ||||
|         <if test="endTime != null and endTime != ''">and date_format(wxlog.log_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d')</if> | ||||
|         order by wxlog.log_time asc | ||||
|     </select> | ||||
|  | ||||
|     <!-- 根据openid和手机号查询对应打卡记录 --> | ||||
|     <select id="getWxLogInfoDetailById" parameterType="SysWxUserLog" resultMap="WxLogInfo"> | ||||
|         SELECT wxlog.id,wxlog.weight,wxlog.log_time,wxlog.sleep_time, wxlog.wakeup_time,wxlog.defecation, wxlog.water, wxlog.insomnia,wxlog.sport,wxlog.diet, | ||||
|         wxlog.emotion,wxlog.sly_eat_food,wxlog.constipation,wxlog.breakfast_images,wxlog.lunch_images,wxlog.dinner_images,wxlog.extra_meal_images,wxlog.body_images | ||||
|         ,wxlog.remark,wxlog.execution_score,wxlog.comment | ||||
|         FROM sys_wx_user_log wxlog left join sys_wx_user_info wxinfo on wxinfo.openid  = wxlog.openid | ||||
|         where wxlog.del_flag = 0 and wxlog.id = #{id} | ||||
|         order by wxlog.log_time desc | ||||
|     </select> | ||||
|  | ||||
| </mapper> | ||||
		Reference in New Issue
	
	Block a user