SysDictItemController.java 6.5 KB
package com.skua.modules.system.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.skua.common.constant.CacheConstant;
import com.skua.core.api.vo.Result;
import com.skua.core.query.QueryGenerator;
import com.skua.modules.system.entity.SysDictItem;
import com.skua.modules.system.service.ISysDictItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 *  前端控制器
 */
@RestController
@RequestMapping("/sys/dictItem")
@Slf4j
public class SysDictItemController {

	@Autowired
	private ISysDictItemService sysDictItemService;
	/**
	 * @功能:查询字典数据
	 * @param sysDictItem
	 * @param pageNo
	 * @param pageSize
	 * @param req
	 * @return
	 */
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public Result<IPage<SysDictItem>> queryPageList(SysDictItem sysDictItem, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
													@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
		Result<IPage<SysDictItem>> result = new Result<IPage<SysDictItem>>();
		QueryWrapper<SysDictItem> queryWrapper = QueryGenerator.initQueryWrapper(sysDictItem, req.getParameterMap());
		queryWrapper.orderByAsc("sort_order");
		Page<SysDictItem> page = new Page<SysDictItem>(pageNo, pageSize);
		IPage<SysDictItem> pageList = sysDictItemService.page(page, queryWrapper);
		result.setSuccess(true);
		result.setResult(pageList);
		return result;
	}
	
	/**
	 * @功能:新增
	 * @param
	 * @return
	 */
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	@CacheEvict(value= CacheConstant.DICT_CACHE, allEntries=true)
	public Result<SysDictItem> add(@RequestBody SysDictItem sysDictItem) {
		Result<SysDictItem> result = new Result<SysDictItem>();
		try {
			//设备缺陷管理的需求
			if ("fbfd617b12f35deae56346724d1c155b".equals(sysDictItem.getDictId())){
				sysDictItem.setItemValue(sysDictItem.getItemText());
			}
			QueryWrapper<SysDictItem> sysDictItemQueryWrapper = new QueryWrapper<>();
			sysDictItemQueryWrapper.eq("dict_id",sysDictItem.getDictId());
			sysDictItemQueryWrapper.orderByDesc("sort_order");
			sysDictItemQueryWrapper.last("limit 1");
			SysDictItem serviceOne = sysDictItemService.getOne(sysDictItemQueryWrapper);
			if (serviceOne!=null) {
				sysDictItem.setSortOrder(serviceOne.getSortOrder() + 1);
			}else{
				sysDictItem.setSortOrder(1);
			}
			sysDictItem.setCreateTime(new Date());
			sysDictItemService.save(sysDictItem);
			result.success("保存成功!");
		} catch (Exception e) {
			log.error(e.getMessage(),e);
			result.error500("操作失败");
		}
		return result;
	}
	
	/**
	 * @功能:编辑
	 * @param sysDictItem
	 * @return
	 */
	@RequestMapping(value = "/edit", method = RequestMethod.PUT)
	@CacheEvict(value=CacheConstant.DICT_CACHE, allEntries=true)
	public Result<SysDictItem> edit(@RequestBody SysDictItem sysDictItem) {
		Result<SysDictItem> result = new Result<SysDictItem>();
		SysDictItem sysdict = sysDictItemService.getById(sysDictItem.getId());
		if(sysdict==null) {
			result.error500("未找到对应实体");
		}else {
			sysDictItem.setUpdateTime(new Date());
			boolean ok = sysDictItemService.updateById(sysDictItem);
			//TODO 返回false说明什么?
			if(ok) {
				result.success("编辑成功!");
			}
		}
		return result;
	}
	/**
	 * @return void
	 * @Description 交换排序
	 * @Date 2021-05-08 16:53
	 * @Param [sysDictItem2, sysDictItem1]
	 **/
	private void exchangeSort(SysDictItem sysDictItem2, SysDictItem sysDictItem1) {
		Integer tmp = sysDictItem2.getSortOrder();
		sysDictItem2.setSortOrder(sysDictItem1.getSortOrder());
		sysDictItem1.setSortOrder(tmp);
		// sysDictItemService.updateBatchById(Lists.newArrayList(sysDictItem1, sysDictItem2));
	}
	/**
	 * @return
	 * @功能:新增
	 */
	@RequestMapping(value = "/orderBy", method = RequestMethod.POST)
	public Result<SysDictItem> orderBy(@RequestBody SysDictItem sysDictItem) {
		Result<SysDictItem> result = new Result<SysDictItem>();
		try {
			String id = sysDictItem.getId();
			QueryWrapper<SysDictItem> queryWrapper = new QueryWrapper<>();
			queryWrapper.orderByAsc("sort_order");
			queryWrapper.eq("dict_id", sysDictItem.getDictId());
			List<SysDictItem> list = sysDictItemService.list(queryWrapper);

			AtomicInteger index = new AtomicInteger(1);
			list.forEach(item -> item.setSortOrder(index.getAndIncrement()));
			for (int i = 0; i < list.size(); i++) {
				SysDictItem sysDictItem1 = list.get(i);
				if (id.equals(sysDictItem1.getId())) {
					if (sysDictItem.getCreateBy().equals("up")) {
						exchangeSort(list.get(i - 1), sysDictItem1);
					} else if (sysDictItem.getCreateBy().equals("down")) {
						exchangeSort(list.get(i + 1), sysDictItem1);
					}
				}
			}
			sysDictItemService.updateBatchById(list);
			result.success("保存成功!");
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			result.error500("操作失败");
		}
		return result;
	}
	/**
	 * @功能:删除字典数据
	 * @param id
	 * @return
	 */
	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
	@CacheEvict(value=CacheConstant.DICT_CACHE, allEntries=true)
	public Result<SysDictItem> delete(@RequestParam(name="id",required=true) String id) {
		Result<SysDictItem> result = new Result<SysDictItem>();
		SysDictItem joinSystem = sysDictItemService.getById(id);
		if(joinSystem==null) {
			result.error500("未找到对应实体");
		}else {
			boolean ok = sysDictItemService.removeById(id);
			if(ok) {
				result.success("删除成功!");
			}
		}
		return result;
	}
	
	/**
	 * @功能:批量删除字典数据
	 * @param ids
	 * @return
	 */
	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
	@CacheEvict(value=CacheConstant.DICT_CACHE, allEntries=true)
	public Result<SysDictItem> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
		Result<SysDictItem> result = new Result<SysDictItem>();
		if(ids==null || "".equals(ids.trim())) {
			result.error500("参数不识别!");
		}else {
			this.sysDictItemService.removeByIds(Arrays.asList(ids.split(",")));
			result.success("删除成功!");
		}
		return result;
	}
}