package com.tld.service.impl; import com.tld.mapper.WebPrintMapper; import com.tld.model.TldPrint; import com.tld.service.WebPrintService; import com.tld.util.DateUtil; import lombok.RequiredArgsConstructor; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @Service @RequiredArgsConstructor public class WebPrintServiceImpl implements WebPrintService { private final WebPrintMapper webPrintMapper; //redis锁 @Autowired private RedissonClient redissonClient; @Override public Map getSerial(TldPrint tldPrint, HttpServletRequest request) { Map map = new HashMap<>(); //redis并发锁 RLock lock = redissonClient.getLock(request.getHeader("userId")); lock.lock(); try{ tldPrint.setUserId(request.getHeader("userId")); tldPrint.setProducDate(DateUtil.dateConversion(tldPrint.getProducDate())); int count = webPrintMapper.getSerialCount(tldPrint); String serial = generateSerial((count + 1) + ""); String num = generateNum(tldPrint.getNum()); String materialCode = generateMaterialCode(tldPrint.getMaterialCode()); String supplierCode = generateSupplierCode(tldPrint.getSupplierId()); tldPrint.setNum(num); tldPrint.setSerial(serial); webPrintMapper.addPrint(tldPrint); String barCode = materialCode + supplierCode + tldPrint.getProducDate() + num + serial; map.put("data", barCode); map.put("msg", "200"); }catch (Exception e){ map.put("msg", "500"); map.put("errMsg", "失败"); e.printStackTrace(); } finally { //释放锁 lock.unlock(); } return map; } /** * 供应商编号生成 * @param code 参数 * @return 供应商编号 */ public String generateSupplierCode(String code){ StringBuilder stringBuilder = new StringBuilder(); for(int i = 0; i < 7 - code.length(); i++){ stringBuilder.append("#"); } stringBuilder.append(code); return stringBuilder.toString(); } /** * 物料编号生成 * @param code 参数 * @return 物料编号 */ public String generateMaterialCode(String code){ StringBuilder stringBuilder = new StringBuilder(); for(int i = 0; i < 16 - code.length(); i++){ stringBuilder.append("#"); } stringBuilder.append(code); return stringBuilder.toString(); } /** * 连番号生成 * @param count 参数 * @return 连番号 */ public String generateSerial(String count){ StringBuilder stringBuilder = new StringBuilder("1"); for(int i = 0; i < 5 - count.length(); i++){ stringBuilder.append("0"); } stringBuilder.append(count); return stringBuilder.toString(); } /** * 数量生成 * @param num 参数 * @return 数量 */ public String generateNum(String num){ StringBuilder stringBuilder = new StringBuilder(); for(int i = 0; i < 6 - num.length(); i++){ stringBuilder.append("#"); } stringBuilder.append(num); return stringBuilder.toString(); } }