package com.xjrsoft.module.app.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yulichang.toolkit.MPJWrappers;
import com.xjrsoft.common.annotation.XjrLog;
import com.xjrsoft.common.constant.GlobalConstant;
import com.xjrsoft.common.model.result.R;
import com.xjrsoft.common.page.ConventPage;
import com.xjrsoft.common.page.PageOutput;
import com.xjrsoft.common.utils.VoToColumnUtil;
import com.xjrsoft.module.app.dto.AddFuncDesignDto;
import com.xjrsoft.module.app.dto.AppFuncDesignPageDto;
import com.xjrsoft.module.app.dto.DeleteAppPageDesignDto;
import com.xjrsoft.module.app.dto.UpdateAppFuncDesignDto;
import com.xjrsoft.module.app.dto.UpdateEnableMarkDto;
import com.xjrsoft.module.app.entity.AppFuncDesign;
import com.xjrsoft.module.app.entity.AppMenu;
import com.xjrsoft.module.app.service.IAppFuncDesignService;
import com.xjrsoft.module.app.service.IAppMenuService;
import com.xjrsoft.module.app.vo.AppFuncDesignPageVo;
import com.xjrsoft.module.app.vo.AppFuncDesignVo;
import com.xjrsoft.module.app.vo.AppMenuVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
*
* 前端控制器
*
*
* @author tzx
* @since 2023-07-26
*/
@RestController
@RequestMapping(GlobalConstant.APP_MODEL +"/func-design")
@Api(value = GlobalConstant.APP_MODEL +"/func-design", tags = "app端功能页面设计")
@AllArgsConstructor
public class AppFuncDesignController {
private IAppFuncDesignService funcDesignService;
private IAppMenuService appMenuService;
@GetMapping(value = "/page")
@ApiOperation("app端功能页面设计分页")
public R page(AppFuncDesignPageDto dto) {
IPage page = funcDesignService.selectJoinListPage(ConventPage.getPage(dto), AppFuncDesignPageVo.class, MPJWrappers.lambdaJoin()
.like(StrUtil.isNotBlank(dto.getKeyword()), AppMenu::getName, dto.getKeyword())
.eq(ObjectUtil.isNotEmpty(dto.getEnabledMark()), AppFuncDesign::getEnabledMark, dto.getEnabledMark())
.eq(dto.getFormType() != null, AppFuncDesign::getFormType, dto.getFormType())
.select(AppFuncDesign::getId)
.select(AppFuncDesign.class, x -> VoToColumnUtil.fieldsToColumns(AppFuncDesignPageVo.class).contains(x.getProperty()))
.selectAs(AppMenu::getName, AppFuncDesignPageVo::getName)
.selectAs(AppMenu::getRemark, AppFuncDesignPageVo::getMenuRemark)
.leftJoin(AppMenu.class, AppMenu::getId, AppFuncDesign::getAppMenuId)
.orderByDesc(AppFuncDesign::getCreateDate)
);
PageOutput pageOutput = ConventPage.getPageOutput(page, AppFuncDesignPageVo.class);
return R.ok(pageOutput);
}
@PostMapping
@ApiOperation(value = "新增app端功能页面设计")
public R add(@Valid @RequestBody AddFuncDesignDto dto) {
return R.ok(funcDesignService.add(dto));
}
@PutMapping
@ApiOperation(value = "修改app端功能页面设计")
public R update(@Valid @RequestBody UpdateAppFuncDesignDto dto) {
return R.ok(funcDesignService.modify(dto));
}
@GetMapping(value = "/info")
@ApiOperation(value = "根据id查询数app端功能页面设计详细信息")
public R info(@RequestParam Long id) {
AppFuncDesign appFuncDesign = funcDesignService.getById(id);
if (appFuncDesign == null) {
return R.error("找不到此功能页面设计!");
}
AppFuncDesignVo appFuncDesignVo = BeanUtil.toBean(appFuncDesign, AppFuncDesignVo.class);
AppMenu appMenu = appMenuService.getById(appFuncDesign.getAppMenuId());
appFuncDesignVo.setMenuConfigs(BeanUtil.toBean(appMenu, AppMenuVo.class));
return R.ok(appFuncDesignVo);
}
@DeleteMapping
@ApiOperation(value = "删除")
@XjrLog(value = "删除app端展示页面设计")
@Transactional(rollbackFor = Exception.class)
public R delete(@Valid @RequestBody DeleteAppPageDesignDto dto) {
AppFuncDesign appFuncDesign = funcDesignService.getById(dto.getId());
appMenuService.removeById(appFuncDesign.getAppMenuId());
funcDesignService.removeById(dto.getId());
return R.ok(Boolean.TRUE);
}
@PutMapping("/update-enable-mark")
@ApiOperation(value = "修改启用状态")
@XjrLog(value = "修改启用状态")
public R updateEnableMark(@Valid @RequestBody UpdateEnableMarkDto dto) {
AppFuncDesign appFuncDesign = new AppFuncDesign();
appFuncDesign.setId(dto.getId());
appFuncDesign.setEnabledMark(dto.getEnabledMark());
funcDesignService.updateById(appFuncDesign);
AppFuncDesign one = funcDesignService.getOne(Wrappers.lambdaQuery(AppFuncDesign.class).eq(AppFuncDesign::getId, dto.getId()).select(AppFuncDesign::getAppMenuId));
AppMenu appMenu = new AppMenu();
appMenu.setId(one.getAppMenuId());
appMenu.setEnabledMark(dto.getEnabledMark());
appMenuService.updateById(appMenu);
return R.ok(true);
}
}