package com.yuanchu.mom.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.common.PrintChina; import com.yuanchu.mom.dto.StoreDto; import com.yuanchu.mom.excel.StoreExcel; import com.yuanchu.mom.mapper.ProcurementSuppliesConsumablesMapper; import com.yuanchu.mom.mapper.ProcurementSuppliesStoreMapper; import com.yuanchu.mom.pojo.ProcurementSuppliesConsumables; import com.yuanchu.mom.pojo.ProcurementSuppliesList; import com.yuanchu.mom.pojo.ProcurementSuppliesStore; import com.yuanchu.mom.service.ProcurementSuppliesListService; import com.yuanchu.mom.service.ProcurementSuppliesStoreService; import com.yuanchu.mom.utils.QueryWrappers; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @Service @AllArgsConstructor public class ProcurementSuppliesStoreServiceImpl extends ServiceImpl implements ProcurementSuppliesStoreService { private GetLook getLook; private ProcurementSuppliesConsumablesMapper consumablesMapper; @Autowired private ProcurementSuppliesListService procurementSuppliesListService; @Override @Transactional(rollbackFor = Exception.class) public void addStore(Map map) { ProcurementSuppliesStore procurementSuppliesStore = JSONObject.parseObject(JSONObject.toJSONString(map.get("store")), ProcurementSuppliesStore.class); procurementSuppliesStore.setRegistrant(getLook.selectPowerByMethodAndUserId(null).get("userId")); procurementSuppliesStore.setRegistrantTime(LocalDate.now()); if (Objects.isNull(procurementSuppliesStore.getId())) { baseMapper.insert(procurementSuppliesStore); } else { baseMapper.updateById(procurementSuppliesStore); } List list = JSON.parseArray(JSONObject.toJSONString(map.get("consumables")), ProcurementSuppliesConsumables.class); for (ProcurementSuppliesConsumables consumables : list) { ProcurementSuppliesList one = procurementSuppliesListService.getOne(new QueryWrapper().lambda() .eq(ProcurementSuppliesList::getConsumablesName, consumables.getConsumablesName())); one.setCurrentAmount(one.getCurrentAmount() + consumables.getStoreNumber()); procurementSuppliesListService.updateById(one); } // 生成货号 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd"); if(!Objects.isNull(list) && list.size() > 0) { for (int i = 0; i < list.size(); i++) { list.get(i).setStoreId(procurementSuppliesStore.getId()); String itemNumber ="HCRK" + LocalDate.now().format(dateTimeFormatter) + String.format("%03d", i); list.get(i).setItemNumber(itemNumber); consumablesMapper.insert(list.get(i)); } } } @Override @Transactional(rollbackFor = Exception.class) public void updateStore(Map map) { ProcurementSuppliesStore procurementSuppliesStore = JSONObject.parseObject(JSONObject.toJSONString(map.get("store")), ProcurementSuppliesStore.class); baseMapper.updateById(procurementSuppliesStore); List list = JSON.parseArray(JSONObject.toJSONString(map.get("consumables")), ProcurementSuppliesConsumables.class); consumablesMapper.delete(new LambdaQueryWrapper() .eq(ProcurementSuppliesConsumables::getStoreId, procurementSuppliesStore.getId())); if(!Objects.isNull(list) && list.size() > 0) { for (int i = 0; i < list.size(); i++) { list.get(i).setId(null); list.get(i).setStoreId(procurementSuppliesStore.getId()); consumablesMapper.insert(list.get(i)); } } } @Override public void deleteStore(Integer id, Integer consumablesId) { consumablesMapper.deleteById(consumablesId); List consumables = consumablesMapper.selectList(new LambdaQueryWrapper() .eq(ProcurementSuppliesConsumables::getStoreId, id)); // 判断是否还有耗材 没有就将主表Store删除 if(CollectionUtils.isEmpty(consumables)) { baseMapper.deleteById(id); } } @Override public Map selectStoreList(Page page, StoreDto storeDto) { Map map = new HashMap<>(); map.put("head", PrintChina.printChina(StoreDto.class)); IPage iPage = baseMapper.selectStoreList(page, QueryWrappers.queryWrappers(storeDto)); map.put("body", iPage); return map; } /** * 导出excel * @param contentsId * @param response */ @Override public void exportExcel(Integer contentsId, HttpServletResponse response) throws IOException { List storeExcels = baseMapper.exportExcel(contentsId); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("UTF-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 String fileName = null; try { fileName = URLEncoder.encode("耗材入库", "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); WriteSheet writeSheet = EasyExcel.writerSheet(0, "耗材入库").head(StoreExcel.class).build(); excelWriter.write(storeExcels, writeSheet); excelWriter.finish(); } }