add 驱动代码

This commit is contained in:
zhoujj
2025-01-07 09:27:33 +08:00
parent 9a824161a3
commit 78a3ce6a5e
17 changed files with 2586 additions and 10 deletions

View File

@@ -421,10 +421,16 @@ public class CartonLabelingMachineDeviceDriver extends AbstractOpcDeviceDriver i
String psdigits = null;
Integer psdigits1 = 0;
if (customer.contains("晶科")) {
psletters = bottle_number.substring(0, 18);
psdigits = bottle_number.substring(18, 23);
psletters = bottle_number.substring(0, 20);
psdigits = bottle_number.substring(20, 23);
psdigits1 = Integer.parseInt(psdigits) - fbottle_number1;
if(psdigits1>100){
psdigits=String.valueOf(psdigits1);
}else if(psdigits1>=10){
psdigits="0"+ psdigits1;
}else if(psdigits1>0&&psdigits1<10){
psdigits="00"+ psdigits1;
}
}
if (customer.contains("晶澳")) {
psletters = bottle_number.substring(0, bottle_number.length() - 5);
@@ -459,12 +465,12 @@ public class CartonLabelingMachineDeviceDriver extends AbstractOpcDeviceDriver i
JSONObject options = printElement.getJSONObject("options");
if (options.containsKey("testData")) {
if (options.get("title").equals("晶科二维码")) {
String number1 = psletters + psdigits1;
String number1 = psletters + psdigits;
options.put("testData", number1);
options.put("title", "");
printElement.put("options", options);
} else if (options.get("testData").equals("瓶号")) {
String number1 = psletters + psdigits1;
String number1 = psletters + psdigits;
options.put("title", number1);
printElement.put("options", options);
} else if (options.get("testData").equals("晶澳瓶号")) {

View File

@@ -0,0 +1,82 @@
package org.nl.system.controller.material;
import cn.dev33.satoken.annotation.SaIgnore;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.system.service.material.MdBaseMaterialService;
import org.nl.system.service.material.dto.MdBaseMaterial;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@MultipartConfig
@RequestMapping("/api/mdBaseMaterial")
public class MaterialController {
@Autowired
MdBaseMaterialService materialService;
@GetMapping
@Log("查询物料基础信息")
//@SaCheckPermission("@el.check('mdBaseMaterial:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page){
return new ResponseEntity<>(TableDataInfo.build(materialService.queryAll(whereJson,page)), HttpStatus.OK);
}
@PostMapping
@Log("新增物料基础信息")
//@SaCheckPermission("@el.check('mdBaseMaterial:add')")
public ResponseEntity<Object> create(@Validated @RequestBody MdBaseMaterial entity){
materialService.create(entity);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改物料基础信息")
public ResponseEntity<Object> update(@Validated @RequestBody MdBaseMaterial entity){
materialService.update(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除物料基础信息")
//@SaCheckPermission("@el.check('mdBaseMaterial:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
materialService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/excelImport")
@Log("excel导入")
@SaIgnore
public ResponseEntity<Object> excelImport(@RequestParam("file") MultipartFile file) {
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
materialService.excelImport(file, request);
return new ResponseEntity<>(HttpStatus.OK);
}
@Log("导出眉山通威报表")
@GetMapping(value = "/doExport")
public void doExport(HttpServletResponse response) throws IOException {
materialService.doExport(response);
}
@Log("导出晶科报表")
@GetMapping(value = "/doExport1")
public void doExport1(HttpServletResponse response) throws IOException {
materialService.doExport1(response);
}
}

View File

@@ -0,0 +1,57 @@
package org.nl.system.service.material;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.system.service.material.dto.MdBaseMaterial;
import org.nl.system.service.tickets.dto.TicketsDto;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface MdBaseMaterialService extends IService<MdBaseMaterial> {
/**
* 查询数据分页
* @param whereJson 条件
* @param pageable 分页参数
* @return IPage<MdBaseMaterial>
*/
IPage<MdBaseMaterial> queryAll(Map whereJson, PageQuery pageable);
/**
* 创建
* @param entity /
*/
void create(MdBaseMaterial entity);
/**
* 编辑
* @param entity /
*/
void update(MdBaseMaterial entity);
/**
* 多选删除
* @param ids /
*/
void deleteAll(Set<String> ids);
/**
* excel导入
* @param file
* @param request
*/
void excelImport(MultipartFile file, HttpServletRequest request);
void doExport(HttpServletResponse response) throws IOException;
void doExport1(HttpServletResponse response) throws IOException;
}

View File

@@ -0,0 +1,116 @@
package org.nl.system.service.material.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("md_base_material")
public class MdBaseMaterial {
/**
* 物料标识
*/
@TableId(type = IdType.NONE)
private String material_id;
/**
* 客户
*/
private String customer;
/**
* 大型号
*/
private String large_model;
/**
* 小型号
*/
private String small_model;
/**
* 实发型号
*/
private String production_materials;
/**
* 实发批次
*/
private String actual_batch;
/**
* 批次号
*
*/
private String batch_number;
/**
* 库存数量
*
*/
private String inventory_qty;
/**
* 当天生产
*
*/
private String product_qty;
/**
* 重量
*
*/
private String weight;
/**
* 瓶身号
*
*/
private String bottle_number;
/**
* 纸箱号
*
*/
private String carton_number;
/**
* 纸箱装瓶数量
*
*/
private String carton_qty;
/**
* 总罐数
*
*/
private String sum_qty;
/**
* 备注
*/
private String remark;
/**
* 是否启用
*/
private Boolean is_used;
/**
* 是否删除
*/
private Boolean is_delete;
/**
* 修改者
*/
private String update_name;
/**
* 创建者
*/
private String create_name;
/**
* 送货单号
*/
private String shdnumber;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private String create_time;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private String update_time;
}

View File

@@ -0,0 +1,29 @@
package org.nl.system.service.material.dto;
import lombok.*;
import lombok.experimental.Accessors;
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class MdBaseMaterialDto {
private String material_id;
private String customer;
private String large_model;
private String small_model;
private String remark;
private String production_materials;
private String actual_batch;
private String batch_number;
private String inventory_qty;
private String product_qty;
private String weight;
private String bottle_number;
private String carton_number;
private String carton_qty;
private String sum_qty;
private String shdnumber;
}

View File

@@ -0,0 +1,15 @@
package org.nl.system.service.material.dto.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.system.service.material.dto.MdBaseMaterial;
import java.util.List;
public interface MdBaseMaterialMapper extends BaseMapper<MdBaseMaterial> {
//判断批次号和实发批次是否重复
MdBaseMaterial isbatch(String batch_number,String actual_batch);
//眉山通威物料信息
List<MdBaseMaterial> mstwmaterials();
//晶科物料信息
List<MdBaseMaterial> jkmaterials();
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.system.service.material.dto.mapper.MdBaseMaterialMapper">
<select id="isbatch" resultType="org.nl.system.service.material.dto.MdBaseMaterial">
SELECT *
FROM `md_base_material`
WHERE batch_number= #{batch_number}
AND actual_batch= #{actual_batch}
</select>
<select id="mstwmaterials" resultType="org.nl.system.service.material.dto.MdBaseMaterial">
SELECT *
FROM `md_base_material`
WHERE customer= '眉山通威'
</select>
<select id="jkmaterials" resultType="org.nl.system.service.material.dto.MdBaseMaterial">
SELECT *
FROM `md_base_material`
WHERE customer LIKE ('%晶科%')
</select>
</mapper>

View File

@@ -0,0 +1,359 @@
package org.nl.system.service.material.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson.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.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.domain.Device;
import org.nl.acs.utils.ConvertUtil;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.FileUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.language.LangProcess;
import org.nl.system.service.material.MdBaseMaterialService;
import org.nl.system.service.material.dto.MdBaseMaterial;
import org.nl.system.service.material.dto.MdBaseMaterialDto;
import org.nl.system.service.material.dto.mapper.MdBaseMaterialMapper;
import org.nl.system.service.tickets.dto.TicketsDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Service
public class MdBaseMaterialServiceImpl extends ServiceImpl<MdBaseMaterialMapper, MdBaseMaterial> implements MdBaseMaterialService {
@Autowired
private MdBaseMaterialMapper mdBaseMaterialMapper;
@Override
public IPage<MdBaseMaterial> queryAll(Map whereJson, PageQuery page) {
Boolean is_used = ObjectUtil.isNotEmpty(whereJson.get("is_used"))
? Boolean.valueOf(whereJson.get("is_used").toString()) : null;
String customer = ObjectUtil.isNotEmpty(whereJson.get("customer"))
? whereJson.get("customer").toString() : null;
String production_materials = ObjectUtil.isNotEmpty(whereJson.get("production_materials"))
? whereJson.get("production_materials").toString() : null;
String actual_batch = ObjectUtil.isNotEmpty(whereJson.get("actual_batch"))
? whereJson.get("actual_batch").toString() : null;
String large_model = ObjectUtil.isNotEmpty(whereJson.get("large_model"))
? whereJson.get("large_model").toString() : null;
String small_model=ObjectUtil.isNotEmpty(whereJson.get("small_model"))
? whereJson.get("small_model").toString() :null;
String batch_number=ObjectUtil.isNotEmpty(whereJson.get("batch_number"))
? whereJson.get("batch_number").toString() :null;
LambdaQueryWrapper<MdBaseMaterial> lam = new LambdaQueryWrapper<>();
lam.like(ObjectUtil.isNotEmpty(customer), MdBaseMaterial::getCustomer, customer)
.eq(ObjectUtil.isNotEmpty(large_model), MdBaseMaterial::getLarge_model, large_model)
.eq(ObjectUtil.isNotEmpty(production_materials), MdBaseMaterial::getProduction_materials, production_materials)
.eq(ObjectUtil.isNotEmpty(actual_batch), MdBaseMaterial::getActual_batch, actual_batch)
.eq(ObjectUtil.isNotEmpty(batch_number), MdBaseMaterial::getBatch_number, batch_number)
.eq(ObjectUtil.isNotEmpty(is_used), MdBaseMaterial::getIs_used, is_used)
.eq(ObjectUtil.isNotEmpty(small_model), MdBaseMaterial::getSmall_model, small_model);
IPage<MdBaseMaterial> pages = new Page<>(page.getPage() + 1, page.getSize());
mdBaseMaterialMapper.selectPage(pages, lam);
return pages;
}
@Override
public void create(MdBaseMaterial entity) {
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setMaterial_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setCreate_name(nickName);
entity.setCreate_time(now);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
mdBaseMaterialMapper.insert(entity);
}
@Override
public void update(MdBaseMaterial entity) {
MdBaseMaterial dto = mdBaseMaterialMapper.selectById(entity.getMaterial_id());
if (dto == null) {
throw new BadRequestException("被删除或无权限,操作失败!");
}
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
mdBaseMaterialMapper.updateById(entity);
}
@Override
public void deleteAll(Set<String> ids) {
// 真删除
mdBaseMaterialMapper.deleteBatchIds(ids);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void excelImport(MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
throw new BadRequestException(LangProcess.msg("error_nullPoint"));
}
Long currentUserId = Long.valueOf(SecurityUtils.getCurrentUserId());
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
// 1.获取上传文件输入流
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
// WQLObject wo = WQLObject.getWQLObject("acs_device");
// 调用用 hutool 方法读取数据 默认调用第一个sheet
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
// 从第二行开始获取数据 excelReader.read的结果是一个2纬的list外层是行内层是行对应的所有列
List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());
// 循环获取的数据
for (int i = 0; i < read.size(); i++) {
List list = read.get(i);
JSONObject param = new JSONObject();
String customer = list.get(1).toString();
if(StrUtil.isBlank(customer)){
continue;
}
String production_materials = list.get(2).toString();
String actual_batch = list.get(3).toString();
String inventory_qty=list.get(4).toString();
String product_qty=list.get(5).toString();
String large_model = list.get(9).toString();
String small_model = list.get(10).toString();
String batch_number = list.get(11).toString();
String weight = list.get(12).toString();
String remark = list.get(14).toString();
String bottle_number=null;
String carton_number=null;
String shdnumber=list.get(17).toString();;
try {
bottle_number = list.get(18).toString();
}catch (Exception var17){
throw new BadRequestException("当前客户"+list.get(1).toString()+"所在行瓶盖号为空");
}
try {
carton_number = list.get(19).toString();
}catch (Exception var17){
throw new BadRequestException("当前客户"+list.get(1).toString()+"所在行纸箱号为空");
}
String carton_qty=list.get(21).toString();
String sum_qty=list.get(20).toString();
MdBaseMaterial mdBaseMaterial=new MdBaseMaterial();
// mdBaseMaterial=mdBaseMaterialMapper.isbatch(batch_number,actual_batch);
// if(mdBaseMaterial!=null){
// continue;
// }
param.put("material_id", IdUtil.getSnowflake(1, 1).nextId());
param.put("customer",customer);
param.put("production_materials",production_materials);
param.put("actual_batch",actual_batch);
param.put("inventory_qty",inventory_qty);
param.put("product_qty",product_qty);
param.put("large_model",large_model);
param.put("small_model",small_model);
param.put("batch_number",batch_number);
param.put("weight",weight);
param.put("remark",remark);
param.put("shdnumber",shdnumber);
param.put("bottle_number",bottle_number);
param.put("carton_number",carton_number);
param.put("carton_qty",carton_qty);
param.put("sum_qty",sum_qty);
MdBaseMaterial entity = ConvertUtil.convert(param, MdBaseMaterial.class);
mdBaseMaterialMapper.insert(entity);
}
}
@Override
public void doExport(HttpServletResponse response) throws IOException {
List<MdBaseMaterial> mstwmaterials=mdBaseMaterialMapper.mstwmaterials();
LocalDate currentDate = LocalDate.now();
List<Map<String, Object>> list = new ArrayList<>();
for(MdBaseMaterial MdBaseMaterial:mstwmaterials){
//该批次数量
Integer pznum=Integer.parseInt(MdBaseMaterial.getSum_qty());
if(pznum==0){
continue;
}
Integer carton_qty=Integer.parseInt(MdBaseMaterial.getCarton_qty());
Integer real_carton_qty=0;
Integer real_carton_number=0;//当前箱号
// Integer zxnumber=pznum/carton_qty;
String bottle_number=MdBaseMaterial.getBottle_number();
String carton_number=MdBaseMaterial.getCarton_number();
String large_model=MdBaseMaterial.getLarge_model();
String small_model=MdBaseMaterial.getSmall_model();
String batch_number=MdBaseMaterial.getBatch_number();
Integer weishu=MdBaseMaterial.getSum_qty().length();
String psletters = bottle_number.substring(0,4);
String psdigits = bottle_number.substring(4,15);
String year=bottle_number.substring(3,5);
String month=bottle_number.substring(5,7);
String day=bottle_number.substring(7,9);
String zxletters = carton_number.replaceAll("\\d+$", ""); // 匹配并去掉末尾的数字
String zxdigits = extractNumberAfterLastLetter(carton_number); // 匹配并取出末尾的数字部分
//总纸箱数
Integer sum_carton1 = (pznum+carton_qty-1)/carton_qty;
for(int i=0;i<pznum;i++){
Map<String, Object> map = new LinkedHashMap<>();
if(real_carton_qty<carton_qty){
real_carton_qty++;
}else{
real_carton_qty=1;
real_carton_number++;
}
Integer real_zxdigits2= Integer.parseInt(zxdigits)+real_carton_number;
Integer real_zxdigits= Integer.parseInt(zxdigits)+real_carton_number-sum_carton1+1;
String real_zxdigits1=null;
if(real_zxdigits<=9){
real_zxdigits1="0"+String.valueOf(real_zxdigits);
}else{
real_zxdigits1=String.valueOf(real_zxdigits);
}
map.put("箱号",zxletters+real_zxdigits1);
// Integer real_psdigits=Integer.parseInt(psdigits)+i-pznum+1;
Long real_psdigits=Long.valueOf(psdigits)+i-pznum+1;
map.put("单枚号/瓶号/包号",psletters+real_psdigits);
map.put("规格型号",large_model+"-"+small_model);
map.put("批号",small_model+"-"+batch_number);
map.put("数量","2");
map.put("供应商","帝科");
map.put("生产日期yyyy/MM/dd","20"+year+"/"+month+"/"+day);
Integer month1=Integer.parseInt(month);
month1=month1+6;
if(month1>12){
month1=month1-12;
}
map.put("有效日期yyyy/MM/dd","20"+year+"/"+month+"/"+day);
// 获取当前日期
LocalDate currentDate1 = LocalDate.now();
// 定义所需的日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
// 格式化当前日期
String formattedDate = currentDate1.format(formatter);
map.put("发货日期yyyy/MM/dd",formattedDate);
list.add(map);
}
}
FileUtil.downloadExcel(list, response);
}
@Override
public void doExport1(HttpServletResponse response) throws IOException {
List<MdBaseMaterial> jkmaterials=mdBaseMaterialMapper.jkmaterials();
LocalDate currentDate = LocalDate.now();
List<Map<String, Object>> list = new ArrayList<>();
for(MdBaseMaterial MdBaseMaterial:jkmaterials){
Integer pzweight=Integer.parseInt(MdBaseMaterial.getWeight());
Integer pznum=Integer.parseInt(MdBaseMaterial.getSum_qty());
if(pznum==0){
continue;
}
Integer carton_qty=Integer.parseInt(MdBaseMaterial.getCarton_qty());
Integer real_carton_qty=0;
Integer real_carton_number=0;//当前箱号
//单重
Integer wt=0;
//整箱总重
Integer wtsum=0;
if(pzweight.equals(pznum)){
wt=1;
wtsum=wt*carton_qty;
}else{
wt=2;
wtsum=wt*carton_qty;
}
// Integer zxnumber=pznum/carton_qty;
String bottle_number=MdBaseMaterial.getBottle_number();
String carton_number=MdBaseMaterial.getCarton_number();
String large_model=MdBaseMaterial.getLarge_model();
String small_model=MdBaseMaterial.getSmall_model();
String batch_number=MdBaseMaterial.getBatch_number();
String customer=MdBaseMaterial.getCustomer();
String psletters = bottle_number.substring(0,20);
String psdigits = bottle_number.substring(20,23);
String zxletters = carton_number.substring(0,18);
String zx1 = carton_number.substring(18,20);
String zx2 = carton_number.substring(20,23);
String zxdigits = carton_number.substring(23,33);
//总纸箱数
Integer sum_carton1 = (pznum+carton_qty-1)/carton_qty;
for(int i=0;i<pznum;i++){
Map<String, Object> map = new LinkedHashMap<>();
if(real_carton_qty<carton_qty){
real_carton_qty++;
}else{
real_carton_qty=1;
real_carton_number++;
}
Long real_zxdigits= Long.valueOf(zxdigits)+real_carton_number-sum_carton1+1;
String real_zxdigits1=String.valueOf(real_zxdigits);
if(i>(sum_carton1-1)*carton_qty-1) {
map.put("托号(必填)", zxletters + zx1+zx2+real_zxdigits1);
map.put("箱号(必填)", zxletters + zx1+zx2+real_zxdigits1);
}else {
if(wtsum>9) {
map.put("托号(必填)", zxletters + wtsum + zx2 + real_zxdigits1);
map.put("箱号(必填)", zxletters + wtsum + zx2 + real_zxdigits1);
}else{
map.put("托号(必填)", zxletters + "0" + wtsum + zx2 + real_zxdigits1);
map.put("箱号(必填)", zxletters + "0" + wtsum + zx2 + real_zxdigits1);
}
}
Integer real_psdigits=Integer.parseInt(psdigits)+i-pznum+1;
if(real_psdigits>=100){
map.put("包号(选填)",psletters+real_psdigits);
} else if(real_psdigits>=10){
map.put("包号(选填)",psletters+"0"+real_psdigits);
}else if(real_psdigits>0){
map.put("包号(选填)",psletters+"00"+real_psdigits);
}
if(wt==1){
map.put("包实装货物数","1");
}else if(wt==2){
if(i==pznum-1&&pzweight % 2 == 1 ){
map.put("包实装货物数","1");
}
else{
map.put("包实装货物数","2");
}
}
map.put("批号",small_model+"-"+batch_number);
map.put("发运数量",String.valueOf(pzweight));
map.put("客户",customer);
list.add(map);
}
}
FileUtil.downloadExcel(list, response);
}
public static String extractNumberAfterLastLetter(String input) {
// 正则表达式:匹配最后一个字母后面的数字
Pattern pattern = Pattern.compile("[a-zA-Z]([0-9]+)$");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
return matcher.group(1); // 返回匹配的数字部分
}
return ""; // 如果没有匹配到数字,返回空字符串
}
}

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<included>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!--<define name="DEVICECODE" class="org.nl.common.logging.DeviceCodeDir"/>-->
<!-- 按照每天生成日志文件 -->
<appender name="FILE_ComPortUtil" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/ComPortUtil/${DEVICECODE}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
<maxFileSize>200MB</maxFileSize>
<!--所有日志最多占多大容量-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- <logger name="org.nl.start.Init" level="info" additivity="false">
<appender-ref ref="FILE3"/>
</logger>-->
<!-- 打印sql -->
<logger name="org.nl.common.utils.ComPortUtil" level="info" additivity="false">
<appender-ref ref="FILE_ComPortUtil"/>
</logger>
</included>