客户体征优化

This commit is contained in:
xiezhijun 2021-01-04 20:28:45 +08:00
parent f76356da68
commit 1be9f4c0ce
7 changed files with 430 additions and 30 deletions

View File

@ -1,8 +1,15 @@
package com.stdiet.web.controller.custom; package com.stdiet.web.controller.custom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import com.stdiet.custom.domain.SysPhysicalSigns;
import org.apache.commons.lang.StringUtils;
import com.stdiet.common.utils.bean.ObjectUtils;
import com.stdiet.custom.dto.request.CustomerInvestigateRequest; import com.stdiet.custom.dto.request.CustomerInvestigateRequest;
import com.stdiet.custom.dto.response.CustomerListResponse;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -51,13 +58,30 @@ public class SysCustomerController extends BaseController
* 导出客户信息列表 * 导出客户信息列表
*/ */
@PreAuthorize("@ss.hasPermi('custom:customer:export')") @PreAuthorize("@ss.hasPermi('custom:customer:export')")
@Log(title = "客户信息", businessType = BusinessType.EXPORT) @Log(title = "客户体征", businessType = BusinessType.EXPORT)
@GetMapping("/export") @GetMapping("/export")
public AjaxResult export(SysCustomer sysCustomer) public AjaxResult export(SysCustomer sysCustomer) throws Exception
{ {
List<SysCustomer> list = sysCustomerService.selectSysCustomerList(sysCustomer); List<SysCustomer> list = sysCustomerService.selectSysCustomerAndSignList(sysCustomer);
ExcelUtil<SysCustomer> util = new ExcelUtil<SysCustomer>(SysCustomer.class); List<CustomerListResponse> responsesList = new ArrayList<>();
return util.exportExcel(list, "customer"); CustomerListResponse customerListResponse = null;
for (SysCustomer customer : list) {
customerListResponse = ObjectUtils.getObjectByObject(customer.getSign(), CustomerListResponse.class);
customerListResponse.setName(customer.getName());
customerListResponse.setPhone(customer.getPhone());
StringBuilder signStr = new StringBuilder();
if(customer.getSign().getSignList() != null && customer.getSign().getSignList().size() > 0){
int i = 0;
for (SysPhysicalSigns s : customer.getSign().getSignList()) {
signStr.append((i != 0 ? "" : "") + s.getName());
i++;
}
}
customerListResponse.setPhysicalSignsId(signStr.toString());
responsesList.add(customerListResponse);
}
ExcelUtil<CustomerListResponse> util = new ExcelUtil<CustomerListResponse>(CustomerListResponse.class);
return util.exportExcel(responsesList, "客户体征数据");
} }
/** /**
@ -74,7 +98,7 @@ public class SysCustomerController extends BaseController
* 新增客户信息 * 新增客户信息
*/ */
@PreAuthorize("@ss.hasPermi('custom:customer:add')") @PreAuthorize("@ss.hasPermi('custom:customer:add')")
@Log(title = "客户信息", businessType = BusinessType.INSERT) @Log(title = "客户体征", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@RequestBody CustomerInvestigateRequest customerInvestigateRequest) throws Exception public AjaxResult add(@RequestBody CustomerInvestigateRequest customerInvestigateRequest) throws Exception
{ {
@ -90,7 +114,7 @@ public class SysCustomerController extends BaseController
* 修改客户信息 * 修改客户信息
*/ */
@PreAuthorize("@ss.hasPermi('custom:customer:edit')") @PreAuthorize("@ss.hasPermi('custom:customer:edit')")
@Log(title = "客户信息", businessType = BusinessType.UPDATE) @Log(title = "客户体征", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@RequestBody CustomerInvestigateRequest customerInvestigateRequest) throws Exception public AjaxResult edit(@RequestBody CustomerInvestigateRequest customerInvestigateRequest) throws Exception
{ {
@ -109,7 +133,7 @@ public class SysCustomerController extends BaseController
* 删除客户信息 * 删除客户信息
*/ */
@PreAuthorize("@ss.hasPermi('custom:customer:remove')") @PreAuthorize("@ss.hasPermi('custom:customer:remove')")
@Log(title = "客户信息", businessType = BusinessType.DELETE) @Log(title = "客户体征", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) public AjaxResult remove(@PathVariable Long[] ids)
{ {

View File

@ -58,7 +58,7 @@ public class ObjectUtils {
//将指定对象变量上此 Field 对象表示的字段设置为指定的新值 //将指定对象变量上此 Field 对象表示的字段设置为指定的新值
field.set(t, val); field.set(t, val);
}catch (Exception e){ }catch (Exception e){
System.out.println(object.getClass().getName() + "没有该属性: " + field.getName()); //System.out.println(object.getClass().getName() + "没有该属性: " + field.getName());
} }
} }
} }

View File

@ -4,7 +4,7 @@ import com.stdiet.common.annotation.Excel;
import com.stdiet.common.core.domain.BaseEntity; import com.stdiet.common.core.domain.BaseEntity;
/** /**
* 客户信息建档调查DTO * 客户体征信息请求DTO
* *
* @author xzj * @author xzj
* @date 2020-12-31 * @date 2020-12-31

View File

@ -0,0 +1,364 @@
package com.stdiet.custom.dto.response;
import com.stdiet.common.annotation.Excel;
import com.stdiet.common.core.domain.BaseEntity;
/**
* 客户体征信息响应DTO
*
* @author xzj
* @date 2020-12-31
*/
public class CustomerListResponse extends BaseEntity
{
private static final long serialVersionUID = 1L;
//基础信息
/** $column.columnComment */
private Long id;
/** 名字 */
@Excel(name = "名字")
private String name;
/** 手机号 */
@Excel(name = "手机号")
private String phone;
//体征信息
/** 客户性别 0男 1女 */
@Excel(name = "性别", readConverterExp = "0=男,1=女")
private Integer sex;
/** 客户年龄(岁) */
@Excel(name = "年龄")
private Integer age;
/** 客户身高(厘米) */
@Excel(name = "身高(厘米)")
private Integer tall;
/** 客户体重(斤) */
@Excel(name = "体重(斤)")
private Integer weight;
/** 南方人还是北方人 0南方 1北方 */
@Excel(name = "北方、南方", readConverterExp = "0=南方,1=北方")
private Integer position;
/** 客户病史体征id */
@Excel(name = "病史")
private String physicalSignsId;
/** 客户忌口不爱吃食材id */
@Excel(name = "忌口或过敏源")
private String dishesIngredientId;
/** 是否便秘 0是 1否 */
@Excel(name = "是否便秘", readConverterExp = "0=是,1=否")
private Integer constipation;
/** 是否熬夜、失眠 0是 1否 */
@Excel(name = "是否熬夜失眠", readConverterExp = "0=是,1=否")
private Integer staylate;
/** 是否经常运动 0是 1否 */
@Excel(name = "是否经常运动", readConverterExp = "0=是,1=否")
private Integer motion;
/** 饮食方式 0自己做 1外面吃 */
@Excel(name = "饮食方式", readConverterExp = "0=自己做,1=外面吃")
private Integer makeFoodType;
/** 饮食备注 */
@Excel(name = "饮食备注")
private String remarks;
/** 饮食特点 0清淡 1重口味 */
@Excel(name = "饮食特点",readConverterExp = "0=清淡,1=重口味")
private Integer makeFoodTaste;
/** 工作职业 */
@Excel(name = "工作职业")
private String vocation;
/** 是否上夜班 */
@Excel(name = "是否上夜班", readConverterExp = "0=是,1=否")
private Integer night;
/** 平时是否久坐 0久坐多 1走动多 */
@Excel(name = "久坐多还是运动多", readConverterExp = "0=久坐多,1=走动多")
private Integer walk;
/** 是否浑身乏力 0是 1否 */
@Excel(name = "是否浑身乏力", readConverterExp = "0=是,1=否")
private Integer weakness;
/** 是否减脂反弹 0是 1否 */
@Excel(name = "是否减脂反弹", readConverterExp = "0=是,1=否")
private Integer rebound;
/** 能否认识到生活习惯的改善才是减脂的关键 0是 1否 */
@Excel(name = "意识到生活习惯是减脂关键",readConverterExp = "0=是,1=否")
private Integer crux;
/** 睡觉时间24小时制 */
@Excel(name = "睡觉时间", suffix = "")
private Integer sleepTime;
/** 起床时间24小时制 */
@Excel(name = "起床时间", suffix = "")
private Integer getupTime;
/** 联系沟通时间24小时制 */
@Excel(name = "方便沟通时间", suffix = "")
private Integer connectTime;
/** 湿气数据 */
@Excel(name = "湿气数据")
private String bloodData;
/** 气血数据 */
@Excel(name = "气血数据")
private String moistureDate;
/** 减脂经历 */
@Excel(name = "减脂经历")
private String experience;
/** 减脂过程遇到的困难 */
@Excel(name = "减脂遇到的困难")
private String difficulty;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getTall() {
return tall;
}
public void setTall(Integer tall) {
this.tall = tall;
}
public Integer getWeight() {
return weight;
}
public void setWeight(Integer weight) {
this.weight = weight;
}
public Integer getPosition() {
return position;
}
public void setPosition(Integer position) {
this.position = position;
}
public String getPhysicalSignsId() {
return physicalSignsId;
}
public void setPhysicalSignsId(String physicalSignsId) {
this.physicalSignsId = physicalSignsId;
}
public String getDishesIngredientId() {
return dishesIngredientId;
}
public void setDishesIngredientId(String dishesIngredientId) {
this.dishesIngredientId = dishesIngredientId;
}
public Integer getConstipation() {
return constipation;
}
public void setConstipation(Integer constipation) {
this.constipation = constipation;
}
public Integer getStaylate() {
return staylate;
}
public void setStaylate(Integer staylate) {
this.staylate = staylate;
}
public Integer getMotion() {
return motion;
}
public void setMotion(Integer motion) {
this.motion = motion;
}
public Integer getMakeFoodType() {
return makeFoodType;
}
public void setMakeFoodType(Integer makeFoodType) {
this.makeFoodType = makeFoodType;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public Integer getMakeFoodTaste() {
return makeFoodTaste;
}
public void setMakeFoodTaste(Integer makeFoodTaste) {
this.makeFoodTaste = makeFoodTaste;
}
public String getVocation() {
return vocation;
}
public void setVocation(String vocation) {
this.vocation = vocation;
}
public Integer getNight() {
return night;
}
public void setNight(Integer night) {
this.night = night;
}
public Integer getWalk() {
return walk;
}
public void setWalk(Integer walk) {
this.walk = walk;
}
public Integer getWeakness() {
return weakness;
}
public void setWeakness(Integer weakness) {
this.weakness = weakness;
}
public Integer getRebound() {
return rebound;
}
public void setRebound(Integer rebound) {
this.rebound = rebound;
}
public Integer getCrux() {
return crux;
}
public void setCrux(Integer crux) {
this.crux = crux;
}
public Integer getSleepTime() {
return sleepTime;
}
public void setSleepTime(Integer sleepTime) {
this.sleepTime = sleepTime;
}
public Integer getGetupTime() {
return getupTime;
}
public void setGetupTime(Integer getupTime) {
this.getupTime = getupTime;
}
public Integer getConnectTime() {
return connectTime;
}
public void setConnectTime(Integer connectTime) {
this.connectTime = connectTime;
}
public String getBloodData() {
return bloodData;
}
public void setBloodData(String bloodData) {
this.bloodData = bloodData;
}
public String getMoistureDate() {
return moistureDate;
}
public void setMoistureDate(String moistureDate) {
this.moistureDate = moistureDate;
}
public String getExperience() {
return experience;
}
public void setExperience(String experience) {
this.experience = experience;
}
public String getDifficulty() {
return difficulty;
}
public void setDifficulty(String difficulty) {
this.difficulty = difficulty;
}
}

View File

@ -101,8 +101,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
"/custom/contract/file/**", "/custom/contract/file/**",
"/custom/wxUserInfo/wx/**", "/custom/wxUserInfo/wx/**",
"/custom/wxUserLog/wx/**", "/custom/wxUserLog/wx/**",
"/investigate/**", "/investigate/**"
"/investigate/physicalSignsList"
).anonymous() ).anonymous()
.antMatchers( .antMatchers(
HttpMethod.GET, HttpMethod.GET,

View File

@ -46,7 +46,7 @@
v-hasPermi="['custom:customer:edit']" v-hasPermi="['custom:customer:edit']"
>修改</el-button> >修改</el-button>
</el-col>--> </el-col>-->
<!--<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
icon="el-icon-delete" icon="el-icon-delete"
@ -55,8 +55,8 @@
@click="handleDelete" @click="handleDelete"
v-hasPermi="['custom:customer:remove']" v-hasPermi="['custom:customer:remove']"
>删除</el-button> >删除</el-button>
</el-col>--> </el-col>
<!--<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
@ -64,7 +64,13 @@
@click="handleExport" @click="handleExport"
v-hasPermi="['custom:customer:export']" v-hasPermi="['custom:customer:export']"
>导出</el-button> >导出</el-button>
</el-col>--> </el-col>
<el-col :span="1.5" title="营养体征调查链接">
<el-button
type="primary"
size="mini"
><a href="http://sign.shengtangdiet.com/question" target='_blank'>营养体征调查</a></a></el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -116,6 +122,7 @@
{{scope.row.sign.makeFoodType == 0 ? `自己做` : '外面吃'}} {{scope.row.sign.makeFoodType == 0 ? `自己做` : '外面吃'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="饮食备注" align="center" prop="sign.remarks" width="80"></el-table-column>
<el-table-column label="饮食特点" align="center" prop="sign.makeFoodTaste" width="80"> <el-table-column label="饮食特点" align="center" prop="sign.makeFoodTaste" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.sign.makeFoodTaste == 0 ? `清淡` : '重口味'}} {{scope.row.sign.makeFoodTaste == 0 ? `清淡` : '重口味'}}
@ -138,7 +145,7 @@
</el-table-column> </el-table-column>
<el-table-column label="是否浑身乏力" align="center" prop="sign.weakness" width="80"> <el-table-column label="是否浑身乏力" align="center" prop="sign.weakness" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.sign.weakness == 0 ? `久坐多` : '走动多'}} {{scope.row.sign.weakness == 0 ? `` : '否'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否减脂反弹" align="center" prop="sign.rebound" width="80"> <el-table-column label="是否减脂反弹" align="center" prop="sign.rebound" width="80">
@ -221,7 +228,7 @@
<!-- 添加或修改客户信息对话框 --> <!-- 添加或修改客户信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<!--<p>现在要先为您建立更加详细的档案以便为您定制专属的减脂计划</p>--> <!--<p>现在要先为您建立更加详细的档案以便为您定制专属的减脂计划</p>-->
<el-form-item label="真实姓名" prop="name"> <el-form-item label="真实姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入真实姓名" /> <el-input v-model="form.name" placeholder="请输入真实姓名" />
@ -294,6 +301,9 @@
<el-option label="外面吃" value="1" /> <el-option label="外面吃" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="饮食备注" prop="remarks">
<el-input v-model="form.remarks" placeholder="请输入备注信息" />
</el-form-item>
<el-form-item label="饮食特点" prop="makeFoodTaste"> <el-form-item label="饮食特点" prop="makeFoodTaste">
<el-select v-model="form.makeFoodTaste" placeholder="请选择"> <el-select v-model="form.makeFoodTaste" placeholder="请选择">
<el-option label="清淡" value="0" /> <el-option label="清淡" value="0" />
@ -357,11 +367,12 @@
<el-checkbox v-for="moistureItem in moistureDataList" :label="moistureItem.dictValue" :key="moistureItem.dictValue">{{moistureItem.dictLabel}}</el-checkbox> <el-checkbox v-for="moistureItem in moistureDataList" :label="moistureItem.dictValue" :key="moistureItem.dictValue">{{moistureItem.dictLabel}}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item label="减脂经历(重点详细填写)" prop="experience"> <el-form-item label="减脂经历(重点详细填写)" prop="experience">
<el-input v-model="form.experience" placeholder="请输入" /> <el-input type="textarea" placeholder="请输入内容" v-model="form.experience" maxlength="200" show-word-limit rows="5"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="减脂遇到的困难" prop="difficulty"> <el-form-item label="减脂遇到的困难" prop="difficulty">
<el-input v-model="form.difficulty" placeholder="请输入" /> <el-input type="textarea" placeholder="请输入内容" v-model="form.difficulty" maxlength="200" show-word-limit rows="5"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -588,7 +599,7 @@
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加客户信息"; this.title = "添加客户体征";
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
@ -623,7 +634,7 @@
cusMessage.night += ''; cusMessage.night += '';
this.form = cusMessage; this.form = cusMessage;
this.open = true; this.open = true;
this.title = "修改客户信息"; this.title = "修改客户体征";
}); });
}, },
/** 提交按钮 */ /** 提交按钮 */
@ -672,7 +683,7 @@
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
const queryParams = this.queryParams; const queryParams = this.queryParams;
this.$confirm('是否确认导出所有客户信息数据项?', "警告", { this.$confirm('是否确认导出当前列表中所有客户体征数据?', "警告", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"

View File

@ -5,7 +5,7 @@
<img src="@/assets/logo/st_logo.png" style="width:240px;height:80px;"/> <img src="@/assets/logo/st_logo.png" style="width:240px;height:80px;"/>
</div> </div>
</header> <main class="el-main"> </header> <main class="el-main">
<el-form ref="form" :model="form" :rules="rules" label-width="80px" style="margin-top:40px;"> <el-form ref="form" :model="form" :rules="rules" label-width="100px" style="margin-top:40px;">
<!--<p>现在要先为您建立更加详细的档案以便为您定制专属的减脂计划</p>--> <!--<p>现在要先为您建立更加详细的档案以便为您定制专属的减脂计划</p>-->
<el-form-item label="真实姓名" prop="name"> <el-form-item label="真实姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入真实姓名" /> <el-input v-model="form.name" placeholder="请输入真实姓名" />
@ -78,6 +78,9 @@
<el-option label="外面吃" value="1" /> <el-option label="外面吃" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="饮食备注" prop="remarks">
<el-input v-model="form.remarks" placeholder="请输入备注信息" />
</el-form-item>
<el-form-item label="饮食特点" prop="makeFoodTaste"> <el-form-item label="饮食特点" prop="makeFoodTaste">
<el-select v-model="form.makeFoodTaste" placeholder="请选择"> <el-select v-model="form.makeFoodTaste" placeholder="请选择">
<el-option label="清淡" value="0" /> <el-option label="清淡" value="0" />
@ -127,9 +130,7 @@
<el-form-item label="方便沟通时间" prop="connectTime"> <el-form-item label="方便沟通时间" prop="connectTime">
<el-time-select v-model="form.connectTime" :picker-options="{start: '00:00',step: '01:00',end: '24:00'}" placeholder="请选择时间" :editable=false /> <el-time-select v-model="form.connectTime" :picker-options="{start: '00:00',step: '01:00',end: '24:00'}" placeholder="请选择时间" :editable=false />
</el-form-item> </el-form-item>
<!--<el-form-item label="备注信息" prop="remarks">
<el-input v-model="form.remarks" placeholder="请输入备注信息" />
</el-form-item>-->
<!--<p>好的我现在给您测一下湿气和气血有以下出现情况的请直接选择</p>--> <!--<p>好的我现在给您测一下湿气和气血有以下出现情况的请直接选择</p>-->
<el-form-item label="湿气(多选)" prop="bloodData"> <el-form-item label="湿气(多选)" prop="bloodData">
<el-checkbox-group v-model="form.bloodData"> <el-checkbox-group v-model="form.bloodData">
@ -142,10 +143,11 @@
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item label="减脂经历(重点详细填写)" prop="experience"> <el-form-item label="减脂经历(重点详细填写)" prop="experience">
<el-input v-model="form.experience" placeholder="请输入" /> <el-input type="textarea" placeholder="请输入内容" v-model="form.experience" maxlength="200" show-word-limit rows="5"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="减脂遇到的困难" prop="difficulty"> <el-form-item label="减脂遇到的困难" prop="difficulty">
<el-input v-model="form.difficulty" placeholder="请输入" /> <el-input type="textarea" placeholder="请输入内容" v-model="form.difficulty" maxlength="200" show-word-limit rows="5"></el-input>
</el-form-item> </el-form-item>
<el-form-item style="text-align:center;margin:0 auto;"> <el-form-item style="text-align:center;margin:0 auto;">
<el-button type="primary" @click="addCustomer()" style="margin-right:50px;">已填写完成提交数据</el-button> <el-button type="primary" @click="addCustomer()" style="margin-right:50px;">已填写完成提交数据</el-button>