From 2069e25fd1ab754bb593a7f2b52b5471be4baecc Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Wed, 21 Jul 2021 18:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BB=BA=E8=AE=AE=E8=B0=83=E6=9F=A5=E9=97=AE?= =?UTF-8?q?=E5=8D=B7=E9=A1=B5=E9=9D=A2=E4=BB=A5=E5=8F=8A=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/InvestigateController.java | 21 + .../custom/SysPreSaleSurveyController.java | 112 ++++ .../custom/WechatAppletController.java | 6 + .../java/com/stdiet/common/enums/AgeBMI.java | 82 +++ .../com/stdiet/common/utils/HealthyUtils.java | 19 + .../stdiet/common/utils/sign/AesUtils.java | 4 + .../custom/domain/SysPreSaleSurvey.java | 9 + .../service/ISysPreSaleSurveyService.java | 2 + .../impl/SysPreSaleSurveyServiceImpl.java | 5 + .../mapper/custom/SysPreSaleSurveyMapper.xml | 9 +- .../src/api/custom/customerInvestigation.js | 11 + .../components/SimpleSurveyReport/index.vue | 261 ++++++++++ stdiet-ui/src/permission.js | 3 +- stdiet-ui/src/router/index.js | 7 + stdiet-ui/src/utils/request.js | 2 +- .../src/views/custom/preSaleSurvey/index.vue | 486 ++++++++++++++++++ .../preSaleSurvey/simpleSurvey/index.vue | 462 +++++++++++++++++ 17 files changed, 1498 insertions(+), 3 deletions(-) create mode 100644 stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java create mode 100644 stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java create mode 100644 stdiet-ui/src/components/SimpleSurveyReport/index.vue create mode 100644 stdiet-ui/src/views/custom/preSaleSurvey/simpleSurvey/index.vue diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java index e53782b46..645785c05 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/common/InvestigateController.java @@ -4,8 +4,10 @@ import com.stdiet.common.core.controller.BaseController; import com.stdiet.common.core.domain.AjaxResult; import com.stdiet.common.core.page.TableDataInfo; import com.stdiet.common.enums.BusinessType; +import com.stdiet.common.utils.HealthyUtils; import com.stdiet.common.utils.StringUtils; import com.stdiet.common.utils.sign.AesUtils; +import com.stdiet.common.utils.uuid.IdUtils; import com.stdiet.custom.domain.*; import com.stdiet.custom.dto.request.CustomerInvestigateRequest; import com.stdiet.custom.dto.request.FoodHeatCalculatorRequest; @@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; /** * 客户相关信息调查Controller @@ -139,6 +142,7 @@ public class InvestigateController extends BaseController { if(oldSysPreSale != null){ return AjaxResult.error("已提交过问卷,无法重复提交"); } + sysPreSaleSurvey.setQuestionType(0); return toAjax(sysPreSaleSurveyService.insertSysPreSaleSurvey(sysPreSaleSurvey)); } @@ -155,4 +159,21 @@ public class InvestigateController extends BaseController { SysPreSaleSurvey preSaleSurvey = sysPreSaleSurveyService.getSysPreSaleSurveyByKey(customerKey); return AjaxResult.success(preSaleSurvey); } + + /** + * 添加用户简易问卷 + */ + @PostMapping("/addSimpleCustomerSurvey") + public AjaxResult addSimpleCustomerSurvey(@RequestBody SysPreSaleSurvey sysPreSaleSurvey) + { + sysPreSaleSurvey.setQuestionType(1); + sysPreSaleSurvey.setCustomerKey(IdUtils.fastSimpleUUID()); + int row = sysPreSaleSurveyService.insertSysPreSaleSurvey(sysPreSaleSurvey); + if(row > 0){ + //获取标准体重 + Double standardWeight = HealthyUtils.calculateStandardWeightByBMI(sysPreSaleSurvey.getTall(), sysPreSaleSurvey.getAge(), sysPreSaleSurvey.getSex()); + return AjaxResult.success(standardWeight); + } + return AjaxResult.error("提交失败"); + } } diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java new file mode 100644 index 000000000..1b17670e3 --- /dev/null +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysPreSaleSurveyController.java @@ -0,0 +1,112 @@ +package com.stdiet.web.controller.custom; + +import java.util.List; + +import com.stdiet.common.utils.HealthyUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.stdiet.common.annotation.Log; +import com.stdiet.common.core.controller.BaseController; +import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.enums.BusinessType; +import com.stdiet.custom.domain.SysPreSaleSurvey; +import com.stdiet.custom.service.ISysPreSaleSurveyService; +import com.stdiet.common.utils.poi.ExcelUtil; +import com.stdiet.common.core.page.TableDataInfo; + +/** + * 简易问卷调查Controller + * + * @author xzj + * @date 2021-07-21 + */ +@RestController +@RequestMapping("/custom/preSaleSurvey") +public class SysPreSaleSurveyController extends BaseController +{ + @Autowired + private ISysPreSaleSurveyService sysPreSaleSurveyService; + + /** + * 查询简易问卷调查列表 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:list')") + @GetMapping("/list") + public TableDataInfo list(SysPreSaleSurvey sysPreSaleSurvey) + { + startPage(); + sysPreSaleSurvey.setQuestionType(1); + List list = sysPreSaleSurveyService.selectSysPreSaleSurveyList(sysPreSaleSurvey); + if(list != null && list.size() > 0){ + for (SysPreSaleSurvey survey : list) { + //计算标准体重 + survey.setStandardWeight(HealthyUtils.calculateStandardWeightByBMI(survey.getTall(), survey.getAge(), survey.getSex())); + } + } + return getDataTable(list); + } + + /** + * 导出简易问卷调查列表 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:export')") + @Log(title = "简易问卷调查", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysPreSaleSurvey sysPreSaleSurvey) + { + List list = sysPreSaleSurveyService.selectSysPreSaleSurveyList(sysPreSaleSurvey); + ExcelUtil util = new ExcelUtil(SysPreSaleSurvey.class); + return util.exportExcel(list, "preSaleSurvey"); + } + + /** + * 获取简易问卷调查详细信息 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(sysPreSaleSurveyService.selectSysPreSaleSurveyById(id)); + } + + /** + * 新增简易问卷调查 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:add')") + @Log(title = "简易问卷调查", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysPreSaleSurvey sysPreSaleSurvey) + { + return toAjax(sysPreSaleSurveyService.insertSysPreSaleSurvey(sysPreSaleSurvey)); + } + + /** + * 修改简易问卷调查 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:edit')") + @Log(title = "简易问卷调查", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysPreSaleSurvey sysPreSaleSurvey) + { + return toAjax(sysPreSaleSurveyService.updateSysPreSaleSurvey(sysPreSaleSurvey)); + } + + /** + * 删除简易问卷调查 + */ + @PreAuthorize("@ss.hasPermi('custom:preSaleSurvey:remove')") + @Log(title = "简易问卷调查", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysPreSaleSurveyService.deleteSysPreSaleSurveyByIds(ids)); + } +} \ No newline at end of file diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java index 5680b9efa..745b4eb33 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java @@ -507,6 +507,12 @@ public class WechatAppletController extends BaseController { sysWxUserInfo.setCusId(sysCustomer.getId()); sysWxUserInfo.setUpdateTime(DateUtils.getNowDate()); + //先根据cusId查询是否已经绑定过微信用户 + SysWxUserInfo cusIdWxUserInfo = sysWxUserInfoService.selectSysWxUserInfoByCusId(sysCustomer.getId()); + if(cusIdWxUserInfo != null && !sysWxUserInfo.getOpenid().equals(curWxUserInfo.getOpenid())){ + //解绑之前记录 + sysWxUserInfoService.removeCusIdByOpenId(curWxUserInfo.getOpenid()); + } if (StringUtils.isNull(curWxUserInfo)) { // 新增sys_wx_user_info sysWxUserInfo.setCreateTime(DateUtils.getNowDate()); diff --git a/stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java b/stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java new file mode 100644 index 000000000..b201fedb0 --- /dev/null +++ b/stdiet-common/src/main/java/com/stdiet/common/enums/AgeBMI.java @@ -0,0 +1,82 @@ +package com.stdiet.common.enums; + +/** + * 年龄、性别对应BMI值枚举类 + */ +public enum AgeBMI { + + age7_7(7, 7, "15.5_15"), + age8_8(8, 8, "16_15"), + age9_9(9, 9, "16.5_16"), + age10_10(10, 10, "17_16"), + age11_11(11, 11, "17.5_17"), + age12_12(12, 12, "18_17"), + age13_13(13, 13, "19_18"), + age14_14(14, 14, "19.5_19"), + age15_15(15, 15, "20_20"), + age16_16(16, 16, "20.5_20"), + age17_17(17, 17, "21_20"), + age18_27(18, 27, "22_20"), + age28_32(28, 32, "22.5_20.5"), + age33_37(33, 37, "23_21"), + age38_42(38, 42, "23.5_21.5"), + age43_47(43, 47, "24_22"), + age48_52(48, 52, "24.5_22.5"); + + private final int minAge; + + private final int maxAge; + + //BMI数值,0男 1女 + private final double[] bmi; + + //等于或大于该年龄之后就五岁一个阶梯,五岁BMI加0.5 + private static final int beyondAge = 53; + + //超过beyondAge年龄之后的起始BMI值,0男 1女 + private static final double[] beyondAgeBmi = {25, 23}; + + AgeBMI(int minAge, int maxAge, String bmi) + { + this.bmi = new double[2]; + this.bmi[0] = Double.parseDouble(bmi.split("_")[0]); + this.bmi[1] = Double.parseDouble(bmi.split("_")[1]); + this.minAge = minAge; + this.maxAge = maxAge; + } + + /** + * 根据年龄、性别获取BMI值 + * @param age 年龄 + * @param sex 性别 + * @return + */ + public static double getBmiByAgeAndSex(int age, int sex){ + if(age < beyondAge){ + double bmi = 0.0; + for (AgeBMI ageBMI : AgeBMI.values()) { + if(age >= ageBMI.minAge && age <= ageBMI.maxAge){ + bmi = ageBMI.bmi[sex]; + break; + } + } + return bmi; + }else{ + return getBeyondAgeBmi(age, sex); + } + } + + + /** + * 大年龄计算BMI,五岁一个阶梯 + * @param age + * @return + */ + public static double getBeyondAgeBmi(int age, int sex){ + return beyondAgeBmi[sex] + (0.5 * ((age - beyondAge)/5)); + } + + public static void main(String[] args) { + System.out.println(getBmiByAgeAndSex(20,0)); + } +} diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java index 3f18008a0..c082255ca 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java @@ -1,5 +1,9 @@ package com.stdiet.common.utils; +import com.stdiet.common.enums.AgeBMI; + +import java.math.BigDecimal; + public class HealthyUtils { public static final long maxHeatEveryDayLess = 250; @@ -174,4 +178,19 @@ public class HealthyUtils { } + /** + * 根据年龄、性别获取BMI值,再根据BMI值、身高计算标准体重 + * @param tall 身高(厘米) + * @param age 年龄 + * @param sex 性别 0男 1女 + * @return + */ + public static Double calculateStandardWeightByBMI(int tall, int age, int sex){ + double bmi = AgeBMI.getBmiByAgeAndSex(age, sex); + if(bmi > 0){ + BigDecimal standardWeight = NumberUtils.getNumberByRoundHalfUp(bmi * Math.pow(tall/100.0, 2) * 2, 2); + return standardWeight.doubleValue(); + } + return null; + } } diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java index 0a2ed412d..87f4a5035 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/sign/AesUtils.java @@ -104,4 +104,8 @@ public class AesUtils { } return null; } + + public static void main(String[] args) { + System.out.println(encrypt("4470")); + } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java index c1efc3110..c5d6a9d08 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysPreSaleSurvey.java @@ -80,6 +80,15 @@ public class SysPreSaleSurvey extends BaseEntity @Excel(name = "售前ID") private Long preSaleId; + /** 问卷类型 0售前简易问卷 1简易评估问卷 */ + @Excel(name = "问卷类型 0售前简易问卷 1简易评估问卷") + private Integer questionType; + /** 删除标识 0未删除 1已删除 */ private Integer delFlag; + + /** + * 标准体重 + */ + private Double standardWeight; } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java index 3db85be46..f43fbfc48 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysPreSaleSurveyService.java @@ -1,6 +1,8 @@ package com.stdiet.custom.service; import java.util.List; +import java.util.Map; + import com.stdiet.custom.domain.SysPreSaleSurvey; /** diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java index d35117f8a..a41fba1d9 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysPreSaleSurveyServiceImpl.java @@ -1,7 +1,12 @@ package com.stdiet.custom.service.impl; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.HealthyUtils; +import com.stdiet.custom.utils.NutritionalUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.stdiet.custom.mapper.SysPreSaleSurveyMapper; diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml index 4b33f45f6..7521f242d 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysPreSaleSurveyMapper.xml @@ -21,6 +21,7 @@ + @@ -34,7 +35,10 @@