package com.qianwen.smartman.modules.cps.controller; import java.util.List; import java.util.Optional; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qianwen.core.boot.ctrl.BladeController; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.scanner.modular.annotation.DeleteResource; import com.qianwen.core.scanner.modular.annotation.GetResource; import com.qianwen.core.scanner.modular.annotation.PostResource; import com.qianwen.core.scanner.modular.annotation.PutResource; import com.qianwen.core.scanner.modular.stereotype.ApiResource; import com.qianwen.core.secure.annotation.PreAuth; import com.qianwen.core.secure.utils.AuthUtil; import com.qianwen.core.tool.api.R; import com.qianwen.smartman.modules.cps.convert.ProductionCalendarConvert; import com.qianwen.smartman.modules.cps.entity.ProductionCalendar; import com.qianwen.smartman.modules.cps.service.ICalendarService; import com.qianwen.smartman.modules.cps.vo.CalendarAssociateWorkstationVO; import com.qianwen.smartman.modules.cps.vo.CalendarCopyVO; import com.qianwen.smartman.modules.cps.vo.CalendarSaveVO; import com.qianwen.smartman.modules.cps.vo.CalendarSearchVO; import com.qianwen.smartman.modules.cps.vo.CalendarSimpleVO; import com.qianwen.smartman.modules.cps.vo.CalendarUpdateVO; import com.qianwen.smartman.modules.cps.vo.CalendarVO; import com.qianwen.smartman.modules.cps.vo.ProductionCalendarVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @ApiResource({"smis/calendar"}) @Api(value = "生产日历", tags = {"生产日历"}) @RestController public class CalendarController extends BladeController { private final ICalendarService calendarService; public CalendarController(ICalendarService calendarService) { this.calendarService = calendarService; } @PreAuth @PostResource @ApiOperation("新建生产日历") public R saveCalendar(@Validated @RequestBody CalendarSaveVO calendarSaveVO) { return R.data(ProductionCalendarConvert.INSTANCE.convert(this.calendarService.saveCalendar(calendarSaveVO))); } @PostResource({"/sync"}) @ApiOperation("新建全年的生产日历") @Transactional(rollbackFor = {Exception.class}) @PreAuth public ProductionCalendarVO syncCalendar(@Validated @RequestBody CalendarSaveVO calendarSaveVO) { return ProductionCalendarConvert.INSTANCE.convert(this.calendarService.saveYearCalendar(calendarSaveVO)); } @PutResource @ApiOperation("编辑生产日历日期") @Transactional(rollbackFor = {Exception.class}) @PreAuth public R updateCalendar(@Validated @RequestBody CalendarUpdateVO calendarUpdateVO) { return R.data(ProductionCalendarConvert.INSTANCE.convert(this.calendarService.updateCalendar(calendarUpdateVO))); } @PostResource({"/copy"}) @ApiOperation("复制生产日历") public R copyCalendar(@Validated @RequestBody CalendarCopyVO calendarCopyVO) { return R.data(ProductionCalendarConvert.INSTANCE.convert(this.calendarService.copyCalendar(calendarCopyVO))); } @PreAuth @PutResource({"/rename"}) @ApiOperation("生产日历重命名") public R rename(String name, String id, Integer status) { ProductionCalendar productionCalendar = new ProductionCalendar(); productionCalendar.setId(Long.valueOf(id)); productionCalendar.setName(name); this.calendarService.updateById(productionCalendar); return R.data(ProductionCalendarConvert.INSTANCE.convert(productionCalendar)); } @PreAuth @PostResource({"/page"}) @ApiOperation(value = "分页查询生产日历", notes = "传入分页条件") public R> getPageCalendar(Query query, @Validated @RequestBody CalendarSearchVO calendarSearchVO) { return Optional.>ofNullable(this.calendarService.page(Condition.getPage(query), Wrappers.query().lambda() .eq(ProductionCalendar::getTenantId, AuthUtil.getTenantId()) .in(ProductionCalendar::getStatus, calendarSearchVO.getStatusList()) .orderByDesc(ProductionCalendar::getCreateTime))) .map(calendar -> { IPage page = new Page<>(calendar.getCurrent(), calendar.getSize(), calendar.getTotal()); page.setRecords(ProductionCalendarConvert.INSTANCE.convert(calendar.getRecords())); return R.data(page); }).orElse(R.data(new Page<>())); /* return (R) Optional.ofNullable(this.calendarService.page(Condition.getPage(query), (Wrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> { return v0.getTenantId(); }, AuthUtil.getTenantId())).in((v0) -> { return v0.getStatus(); }, calendarSearchVO.getStatusList())).orderByDesc((v0) -> { return v0.getCreateTime(); }))).map(calendar -> { Page page = new Page(calendar.getCurrent(), calendar.getSize(), calendar.getTotal()); page.setRecords(ProductionCalendarConvert.INSTANCE.convert(calendar.getRecords())); return R.data(page); }).orElse(R.data(new Page()));*/ } @GetResource({"/list"}) @ApiOperation(value = "生产日历列表", notes = "生产日历列表") public R> listCalendars() { return R.data(ProductionCalendarConvert.INSTANCE.convert(this.calendarService .list(Wrappers.query().lambda().eq(ProductionCalendar::getTenantId, AuthUtil.getTenantId()) .eq(ProductionCalendar::getStatus, 1).orderByDesc(ProductionCalendar::getCreateTime)))); } @PreAuth @GetResource({"/{id}"}) @ApiOperation(value = "查询生产日历详情", notes = "传入id") public R getCalendarDetail(@PathVariable String id) { return R.data(this.calendarService.getCalendar(Long.valueOf(id))); } @PreAuth @DeleteResource({"/{id}"}) @ApiOperation(value = "删除生产日历", notes = "传入id") public R deleteCalendar(@PathVariable String id) { return R.data(this.calendarService.deleteCalendar(Long.valueOf(id))); } @GetResource({"/expire/info"}) @ApiOperation(value = "查询快过期生产日历提示", notes = "查询快过期生产日历提示") public R expireCalendarInfo() { return R.data(this.calendarService.expireCalendarInfo()); } @PostResource({"/associate-workstation"}) @ApiOperation(value = "生产日历关联工位", notes = "生产日历关联工位") public R associateWorkstation(@RequestBody CalendarAssociateWorkstationVO calendarAssociateWorkstationVO) { return R.data(this.calendarService.associateWorkstation(calendarAssociateWorkstationVO)); } }