package com.ruoyi.satisfaction.controller;
import java.util.List;
import java.util.Map;
import com.github.pagehelper.ISelect;
import com.ruoyi.common.annotation.AddOrgId;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.satisfaction.domain.vo.PatSatisfactionReqVO;
import com.ruoyi.satisfaction.domain.vo.PatSatisfactionResVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections4.CollectionUtils;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.satisfaction.domain.PatSatisfaction;
import com.ruoyi.satisfaction.service.IPatSatisfactionService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 患者满意度 Controller(已迁入 ruoyi-satisfaction 模块)。
*
* ⚠️ URL 与出入参一字未改:{@code @RequestMapping("/smartor/satisfaction")} 与全部
* {@code @PostMapping}/{@code @GetMapping} 路径保持原样,前端无需任何改动。
* 迁移只改了类所在的 Maven 模块与包名。
*
* 开关:本 Controller 始终注册(不随 {@code satisfaction.enabled} 消失)。
* 模块被关闭时由 {@code SatisfactionAvailabilityInterceptor}
* (见 {@code config/SatisfactionWebConfig})在进入方法前抛出 {@code ServiceException},
* 调用方会拿到明确的错误提示(而不是 404,能区分"模块被关闭"与"地址写错")。
* 拦截器只挂在本模块的 17 个满意度端点上,随访/问卷等其它业务完全不受影响。
*
* @author lihu
* @date 2025-06-30
*/
@Api(description = "患者满意度")
@RestController
@RequestMapping("/smartor/satisfaction")
public class PatSatisfactionController extends BaseController {
@Autowired
private IPatSatisfactionService patSatisfactionService;
/**
* 查询患者满意度列表
*/
@ApiOperation("查询患者满意度列表")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:list')")
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("list")
public TableDataInfo list(@RequestBody PatSatisfaction patSatisfaction) {
PageUtils.startPageByPost(patSatisfaction.getPageNum(), patSatisfaction.getPageSize());
List list = patSatisfactionService.selectPatSatisfactionList(patSatisfaction);
//获取total
long total = PageUtils.count(new ISelect() {
@Override
public void doSelect() {
patSatisfaction.setPageNum(null);
patSatisfaction.setPageSize(null);
patSatisfactionService.selectPatSatisfactionList(patSatisfaction);
}
});
return getDataTable2(total, list);
}
/**
* 导出患者满意度列表
*/
@ApiOperation("导出患者满意度列表")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:export')")
@Log(title = "患者满意度", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, PatSatisfaction patSatisfaction) {
LoginUser loginUser = getLoginUser();
String orgid = loginUser.getUser().getOrgid();
String campusid = loginUser.getUser().getCampusid();
patSatisfaction.setOrgid(orgid);
patSatisfaction.setCampusid(campusid);
List list = patSatisfactionService.selectPatSatisfactionList(patSatisfaction);
ExcelUtil util = new ExcelUtil(PatSatisfaction.class);
util.exportExcel(response, list, "患者满意度数据");
}
/**
* 获取患者满意度详细信息
*/
@ApiOperation("获取患者满意度详细信息")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:query')")
@GetMapping(value = "/getInfo/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
return success(patSatisfactionService.selectPatSatisfactionById(id));
}
/**
* 新增患者满意度
*/
@ApiOperation("新增患者满意度")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:add')")
@Log(title = "患者满意度", businessType = BusinessType.INSERT)
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/add")
public AjaxResult add(@RequestBody PatSatisfaction patSatisfaction) {
LoginUser loginUser = getLoginUser();
SysUser user = loginUser.getUser();
patSatisfaction.setCreateBy(user.getNickName());
patSatisfaction.setOrgid(user.getOrgid());
return toAjax(patSatisfactionService.insertPatSatisfaction(patSatisfaction));
}
/**
* 新增患者满意度
*/
@ApiOperation("批量新增患者满意度")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:add')")
@Log(title = "患者满意度", businessType = BusinessType.INSERT)
@PostMapping("/batchinsert")
public AjaxResult batchinsert(@RequestBody List patSatisfaction) {
Integer row = patSatisfactionService.batchInsert(patSatisfaction);
return toAjax(row);
}
/**
* 修改患者满意度
*/
@ApiOperation("修改患者满意度")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:edit')")
@Log(title = "患者满意度", businessType = BusinessType.UPDATE)
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/edit")
public AjaxResult edit(@RequestBody PatSatisfaction patSatisfaction) {
LoginUser loginUser = getLoginUser();
SysUser user = loginUser.getUser();
patSatisfaction.setCreateBy(user.getNickName());
return toAjax(patSatisfactionService.updatePatSatisfaction(patSatisfaction));
}
/**
* 删除患者满意度
*/
@ApiOperation("删除患者满意度")
//@PreAuthorize("@ss.hasPermi('smartor:satisfaction:remove')")
@Log(title = "患者满意度", businessType = BusinessType.DELETE)
@GetMapping("/remove/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(patSatisfactionService.deletePatSatisfactionByIds(ids));
}
/**
* 患者满意度统计
*/
@ApiOperation("患者满意度统计")
@PostMapping("/statistics")
public Map statistics(@RequestBody PatSatisfactionReqVO patSatisfactionReqVO) {
//后端不做分页了,由前端做
PatSatisfactionResVO statistics = patSatisfactionService.statistics(patSatisfactionReqVO);
return getDataTable3(CollectionUtils.isNotEmpty(statistics.getPatSatisfactionDetailEntities()) ? statistics.getPatSatisfactionDetailEntities().size() : 0, statistics);
}
/**
/**
* 患者满意度统计(维度)
*/
@ApiOperation("患者满意度统计(维度)")
@PostMapping("/statisticsByDimension")
public Map statisticsByDimension(@RequestBody PatSatisfactionReqVO patSatisfactionReqVO) {
//后端不做分页了,由前端做
PatSatisfactionResVO statistics = patSatisfactionService.statisticsByDimension(patSatisfactionReqVO);
return getDataTable3(CollectionUtils.isNotEmpty(statistics.getPatSatisfactionDetailEntities()) ? statistics.getPatSatisfactionDetailEntities().size() : 0, statistics);
}
/**
* 患者满意度柱状图信息
*/
@ApiOperation("患者满意度柱状图信息(分类)")
@PostMapping("/satisfactionGraph")
public Map satisfactionGraph(@RequestBody PatSatisfactionReqVO patSatisfactionReqVO) {
Map patSatisfactionGraphResVOS = patSatisfactionService.satisfactionGraph(patSatisfactionReqVO);
return getDataTable3(0, patSatisfactionGraphResVOS);
}
/**
* 患者满意度柱状图信息
*/
@ApiOperation("患者满意度柱状图信息(维度)")
@PostMapping("/satisfactionGraphDimension")
public Map satisfactionGraphDimension(@RequestBody PatSatisfactionReqVO patSatisfactionReqVO) {
Map patSatisfactionGraphResVOS = patSatisfactionService.satisfactionGraphDimension(patSatisfactionReqVO);
return getDataTable3(0, patSatisfactionGraphResVOS);
}
}