/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.business.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.entity.Facility; import org.springblade.modules.business.entity.Shop; import org.springblade.modules.business.service.IFacilityService; import org.springblade.modules.business.service.IShopService; import org.springblade.modules.business.vo.FacilityVO; import org.springblade.modules.business.wrapper.FacilityWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.io.OutputStream; /** * 售货设备表 控制器 * * @author BladeX * @since 2024-07-16 */ @RestController @RequestMapping("/facility") @Api(value = "售货设备表", tags = "售货设备表接口") public class FacilityController extends BladeController { @Autowired private IFacilityService facilityService; @Autowired private IShopService shopService; @Value("${qrCode.domainUrl}") private String domainUrl; /** * 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入facility") public R detail(Facility facility) { Facility detail = facilityService.getOne(Condition.getQueryWrapper(facility)); return R.data(FacilityWrapper.build().entityVO(detail)); } /** * 分页 售货设备表 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入facility") public R> list(Facility facility, Query query) { IPage pages = facilityService.page(Condition.getPage(query), Condition.getQueryWrapper(facility)); IPage facilityVOIPage = FacilityWrapper.build().pageVO(pages); if (CollectionUtil.isNotEmpty(facilityVOIPage.getRecords())){ facilityVOIPage.getRecords().forEach(facilityVO -> { facilityVO.setQrCode(domainUrl + "?qrcode=" + facilityVO.getId()); }); } return R.data(facilityVOIPage); } /** * 自定义分页 售货设备表 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = "传入facility") public R> page(FacilityVO facility, Query query) { IPage pages = facilityService.selectFacilityPage(Condition.getPage(query), facility); return R.data(pages); } /** * 新增 售货设备表 */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入facility") public R save(@Valid @RequestBody Facility facility) { return R.status(facilityService.add(facility)); } /** * 修改 售货设备表 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入facility") public R update(@Valid @RequestBody Facility facility) { //设备编号校验 if (facilityService.lambdaQuery() .eq(Facility::getFacilityNo, facility.getFacilityNo()) .ne(Facility::getId, facility.getId()).count() > 0) { throw new ServiceException("设备编号已存在!"); } return R.status(facilityService.updateById(facility)); } /** * 新增或修改 售货设备表 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入facility") public R submit(@Valid @RequestBody Facility facility) { //查询设备门店所属商家 // if (facility.getShopId() != null) { // Facility facility1 = facilityService.getById(facility.getId()); // if (facility1 != null && !facility1.getMerchantId().equals(facility.getMerchantId())) { // throw new ServiceException("设备所属商家不能修改!"); // } // } //获取门店所属商家 Shop shop = shopService.getById(facility.getShopId()); facility.setMerchantId(shop.getMerchantId()); return R.status(facilityService.saveOrUpdate(facility)); } /** * 删除 售货设备表 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "逻辑删除", notes = "传入ids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(facilityService.removeByIds(Func.toLongList(ids))); } @GetMapping("/buildQrcode") @ApiOperationSupport(order = 5) @ApiOperation(value = "下载设备码", notes = "下载设备码") public void buildQrcode(HttpServletResponse response, String id) throws IOException { OutputStream osOut = response.getOutputStream(); QrConfig qrConfig = new QrConfig(); qrConfig.setWidth(600); qrConfig.setHeight(600); QrCodeUtil.generate(domainUrl + "?deviceId=" + id,qrConfig, "jpg", osOut); osOut.close(); } }