You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1209 lines
44 KiB

package com.ccl.tt.controller;
import com.ccl.tt.dao.BasicDao;
import com.ccl.tt.dao.FinalRollDao;
import com.ccl.tt.data.PartData;
import com.ccl.tt.entity.*;
import com.ccl.tt.repository.*;
import com.ccl.tt.service.MailSendService;
import com.ccl.tt.service.PrepressService;
import com.ccl.tt.utils.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.core.io.FileSystemResource;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.query.Param;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import javax.persistence.criteria.Predicate;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Controller
@RequestMapping("/prepress")
public class PrePressController {
private static Logger logger = LoggerFactory.getLogger(PrePressController.class);
@Autowired
private FinalRollDao finalRollDao;
@Autowired
private ShipmentRepository shipRepo;
@Autowired
private ProjectCodeRepository pjcRepo;
@Autowired
private MailSendService mailSendService;
@Value("${com.ftp.ftpHost}")
private String ftpHost;
@Value("${com.ftp.ftpPort}")
private Integer ftpPort;
@Value("${com.ftp.ftpUser}")
private String ftpUser;
@Value("${com.ftp.ftpPassword}")
private String ftpPassword;
@Value("${com.ftp.ftpDir}")
private String ftpDir;
@Autowired
private PrepressService prepressService;
@Value("${item.zipPath}")
private String zipPath;
@Autowired
private BasicDao basicDao;
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
@GetMapping("/")
public String prepressHome(){
return "sntracking/prepress";
}
/**
* 返工单页面
* @return
*/
@GetMapping("/rework")
public String prepressReworkHome(){
return "sntracking/prepress_rework";
}
@GetMapping("/query")
public String prepressQuery(){
return "sntracking/prepress_query";
}
/**
* IFS入库数量核实
* @return
*/
@GetMapping("/receiveQty")
public String receiveQty(){
return "sntracking/receiveQty";
}
/**
*
* @Title: serialInfo
* @Description: 查询信息页面
* @author lirui
* @date 2018年4月20日
* @param @return 参数
* @return String 返回类型
* @throws
*/
@GetMapping("/serialInfo")
public String serialInfo(){
return "/sntracking/serial_info";
}
/**
* 按SO的数量自动统计页面
* @return
*/
@GetMapping("/soOrderInfo")
public String soOrderInfo(){
return "/sntracking/so_order_info";
}
/**
*
* @Title: getSerialInfo
* @Description: TODO(这里用一句话描述这个方法的作用)
* @author lirui
* @date 2018年4月20日
* @param @param serialNo
* @param @return 参数
* @return Object 返回类型
* @throws
*/
@PostMapping("/serialInfo")
@ResponseBody
public Object getSerialInfo(String serialNo){
Map<String, Object> map = new HashMap<>();
List<SerialInfo> rows = finalRollDao.getSerialInfo(serialNo);
map.put("total", rows.size());
map.put("rows", rows);
return map;
}
@PostMapping("/missingReportData")
@ResponseBody
public Object missingReportData(String serialNo){
Map<String, Object> map = new HashMap<>();
List<SerialInfo> rows = finalRollDao.getSerialInfo(serialNo);
map.put("total", rows.size());
map.put("rows", rows);
return map;
}
@GetMapping("/downSerialInfo")
@ResponseBody
public Object downSerialInfo(@RequestParam("serilaNo") String serilaNo,
HttpServletResponse response) throws Exception {
String filename = "Serials Number"+serilaNo+""+DateUtils.getStringDate(new Date(), "yyyyMMddhhmmss")+".xlsx";
File files = new File(filename);
List<Map<String, Object>> serialInfo = finalRollDao.getSerialforExcel(serilaNo);
if(serialInfo==null ||serialInfo.isEmpty()){
return null;
}
OutExcel.converterMapToExcel(serialInfo, files,"Serials Number"+serilaNo+"",20);
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
response.setContentType("application/force-download;charset=UTF-8");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(filename.getBytes(), "iso8859-1"));
try {
fis = new FileInputStream(files);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
ServletOutputStream os = response.getOutputStream();
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
logger.info("Exception handling:"+e.getMessage());
}
//释放资源
finally {
if (bis != null) {
bis.close();
}
if (fis != null) {
fis.close();
}
}
return null;
}
/**
* 按SO的数量自动统计功能
* @param orderNo
* @return
*/
@PostMapping("/soOrderInfo")
@ResponseBody
public Object getSoOrderInfo(String orderNo){
Map<String, Object> map = new HashMap<>();
List<SoOutputStatistic> rows = finalRollDao.getSoOutputStatistic(orderNo);
map.put("total", rows.size());
map.put("rows", rows);
return map;
}
@GetMapping("/downSoOrderInfo")
@ResponseBody
public Object downSoOrderInfo(@RequestParam("orderNoSearch") String orderNoSearch,
HttpServletResponse response) throws Exception {
String filename = "Serials Number"+orderNoSearch+""+DateUtils.getStringDate(new Date(), "yyyyMMddhhmmss")+".xlsx";
File files = new File(filename);
List<Map<String, Object>> soOrderInfo = finalRollDao.getSoOrderforExcel(orderNoSearch);
if(soOrderInfo==null ||soOrderInfo.isEmpty()){
return null;
}
OutExcel.converterMapToExcel(soOrderInfo, files,"Serials Number"+orderNoSearch+"",20);
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
response.setContentType("application/force-download;charset=UTF-8");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(filename.getBytes(), "iso8859-1"));
try {
fis = new FileInputStream(files);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
ServletOutputStream os = response.getOutputStream();
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
logger.info("Exception handling:"+e.getMessage());
}
//释放资源
finally {
if (bis != null) {
bis.close();
}
if (fis != null) {
fis.close();
}
}
return null;
}
@Autowired
private SoInfoRepository soInfoRepo;
@Autowired
private SoRollRepository rollRepo;
@GetMapping("/all")
@ResponseBody
public Map soInfoJson(
@RequestParam(value = "orderNo", required = false) String orderNo,
@RequestParam(value = "createdDateFrom", required = false) String createdDateFrom,
@RequestParam(value = "createdDateTo", required = false) String createdDateTo,
@RequestParam(value = "statement", required = false) String statement,
@RequestParam(value = "page", required = false, defaultValue = "1") Integer currPage,
@RequestParam(value = "rows", required = false, defaultValue = "20") Integer rows,
@RequestParam(value = "sort", required = false, defaultValue = "id") String sortField,
@RequestParam(value = "order", required = false, defaultValue = "desc") String orderDirection
){
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Sort sort = new Sort("desc".equals(orderDirection)?Sort.Direction.DESC:Sort.Direction.ASC, sortField);
PageRequest pageRequest = new PageRequest(currPage-1, rows, sort);
Page<SoInfo> page = soInfoRepo.findAll((root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>();
predicateList.add(cb.like(root.get("isrework"), "N"));
if(StringUtils.hasText(orderNo)){
predicateList.add(cb.like(root.get("orderNo"), "%"+orderNo));
}
if(StringUtils.hasText(statement)){
predicateList.add(cb.equal(root.get("statement"), statement));
}
if(StringUtils.hasText(createdDateFrom)){
try {
predicateList.add(cb.greaterThanOrEqualTo(root.get("createdDate"), fmt.parse(createdDateFrom + " 00:00:00")));
} catch (Exception e) {
e.printStackTrace();
}
}
if(StringUtils.hasText(createdDateTo)){
try {
predicateList.add(cb.lessThan(root.get("createdDate"), fmt.parse(createdDateTo + " 23:59:59")));
} catch (Exception e) {
e.printStackTrace();
}
}
query.where(predicateList.toArray(new Predicate[]{}));
return null;
}, pageRequest);
Map map = new HashMap();
map.put("total", page.getTotalElements());
map.put("rows", page.getContent());
return map;
}
@GetMapping("/reworkAll")
@ResponseBody
public Map soInfoReworkJson(
@RequestParam(value = "orderNo", required = false) String orderNo,
@RequestParam(value = "createdDateFrom", required = false) String createdDateFrom,
@RequestParam(value = "createdDateTo", required = false) String createdDateTo,
@RequestParam(value = "statement", required = false) String statement,
@RequestParam(value = "page", required = false, defaultValue = "1") Integer currPage,
@RequestParam(value = "rows", required = false, defaultValue = "20") Integer rows,
@RequestParam(value = "sort", required = false, defaultValue = "id") String sortField,
@RequestParam(value = "order", required = false, defaultValue = "desc") String orderDirection
){
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Sort sort = new Sort("desc".equals(orderDirection)?Sort.Direction.DESC:Sort.Direction.ASC, sortField);
PageRequest pageRequest = new PageRequest(currPage-1, rows, sort);
Page<SoInfo> page = soInfoRepo.findAll((root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>();
predicateList.add(cb.like(root.get("isrework"), "Y"));
if(StringUtils.hasText(orderNo)){
predicateList.add(cb.like(root.get("orderNo"), "%"+orderNo));
}
if(StringUtils.hasText(statement)){
predicateList.add(cb.equal(root.get("statement"), statement));
}
if(StringUtils.hasText(createdDateFrom)){
try {
predicateList.add(cb.greaterThanOrEqualTo(root.get("createdDate"), fmt.parse(createdDateFrom + " 00:00:00")));
} catch (Exception e) {
e.printStackTrace();
}
}
if(StringUtils.hasText(createdDateTo)){
try {
predicateList.add(cb.lessThan(root.get("createdDate"), fmt.parse(createdDateTo + " 23:59:59")));
} catch (Exception e) {
e.printStackTrace();
}
}
query.where(predicateList.toArray(new Predicate[]{}));
return null;
}, pageRequest );
Map map = new HashMap();
map.put("total", page.getTotalElements());
map.put("rows", page.getContent());
return map;
}
@GetMapping("/orderrolls/{orderNo}")
@ResponseBody
public Map orderRolls(
@PathVariable(value = "orderNo") String orderNo,
@RequestParam(value = "page", required = false, defaultValue = "1") Integer currPage,
@RequestParam(value = "rows", required = false, defaultValue = "20") Integer rows,
@RequestParam(value = "sort", required = false, defaultValue = "id") String sortField,
@RequestParam(value = "order", required = false, defaultValue = "asc") String orderDirection
){
Sort sort = new Sort("desc".equals(orderDirection)?Sort.Direction.DESC:Sort.Direction.ASC, sortField);
PageRequest pageRequest = new PageRequest(currPage-1, rows, sort);
Page<SoRoll> page = rollRepo.findAll((root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>();
if(StringUtils.hasText(orderNo)){
predicateList.add(cb.equal(root.get("orderNo"), orderNo));
}
query.where(predicateList.toArray(new Predicate[]{}));
return null;
}, pageRequest );
Map map = new HashMap();
map.put("total", page.getTotalElements());
map.put("rows", page.getContent());
return map;
}
/**
* 生产订单导入
* @param soInfo
* @return
*/
@PostMapping("/soinfo/add")
@ResponseBody
public Map add(SoInfo soInfo){
Map ret = new HashMap();
//调用方法 进行工单的新增
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
try{
soInfo.setCreatedBy(authentication.getName());
soInfo.setCreatedDate(new Timestamp(System.currentTimeMillis()));
soInfo.setStatus(SoInfo.CREATED);
soInfo.setIsrework("N");
// soInfo.setFirstRollTime(new Date());
soInfo.validate();
//查询是否经过热覆合
String projectCode = soInfo.getProject();
ProjectCode projectData = pjcRepo.findOneByProjectCode(projectCode);
if(projectData==null){
throw new RuntimeException("项目号不存在请联系系统管理员!");
}
//设置参数
soInfo.setLaminationFlag(projectData.getLaminationFlag());
//查询长度是否符合要求
String apn = soInfo.getApn();
if(apn.length() != 11) {
throw new RuntimeException("Length of apn does not comply with the rules!");
}
String revNo = soInfo.getRevNo();
if(revNo.length() != 1) {
throw new RuntimeException("revNo长度不符规则!");
}
//添加全的客户料号
Map<String, Object> ifsOrder = jdbcTemplate.queryForMap(ifsOrderSql, soInfo.getOrderNo());
//获取字符串内容
String customerPartNoAll = String.valueOf(ifsOrder.get("customer_part_no"));
//设置参数
soInfo.setCustomerPartNoAll(customerPartNoAll);
soInfoRepo.save(soInfo);
ret.put("success", true);
}catch(DataIntegrityViolationException e){
ret.put("errorMsg", "Order No 不能重复");
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
/**
*
* @Title: addSoInfo
* @Description: 工单新增信息
* @author: LR
* @date 2024年6月19日 下午2:24:09
* @return: Object
* @throws
*/
@PostMapping("/soinfo/addSoInfo")
@ResponseBody
public Object addSoInfo(SoInfo soInfo){
Map<String, Object> resultMap = new HashMap<String, Object>();
try{
//获取ifs的工单信息
prepressService.addSoInfo(soInfo);
resultMap.put("msg", "Successfully!");
resultMap.put("success", true);
resultMap.put("code", 200);
}catch (Exception e){
resultMap.put("code", 400);
resultMap.put("success", false);
resultMap.put("msg", e.getMessage());
}
return resultMap;
}
/**
* 新增返工订单
* @param soInfo
* @return
*/
@PostMapping("/soinfo/addrework")
@ResponseBody
public Map addrework(SoInfo soInfo){
Map ret = new HashMap();
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
try{
soInfo.setCreatedBy(authentication.getName());
soInfo.setCreatedDate(new Timestamp(System.currentTimeMillis()));
soInfo.setStatus(SoInfo.CREATED);
soInfo.setIsrework("Y");
soInfo.setFirstRollTime(new Date());
soInfo.validate();
//查询是否经过热覆合
//设置参数
soInfo.setLaminationFlag("Y");
//添加全的客户料号
Map<String, Object> ifsOrder = jdbcTemplate.queryForMap(ifsOrderSql, soInfo.getOrderNo());
//获取字符串内容
String customerPartNoAll = String.valueOf(ifsOrder.get("customer_part_no"));
//设置参数
soInfo.setCustomerPartNoAll(customerPartNoAll);
soInfoRepo.save(soInfo);
ret.put("success", true);
}catch(DataIntegrityViolationException e){
ret.put("errorMsg", "Order No 不能重复");
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
@PostMapping("/soinfo/{id}/update")
@ResponseBody
public Map add(@PathVariable("id") Integer id, SoInfo soInfo){
Map ret = new HashMap();
try{
SoInfo dbSoInfo = soInfoRepo.findOne(id);
dbSoInfo.setOrderNo(soInfo.getOrderNo());
dbSoInfo.setPartNo(soInfo.getPartNo());
dbSoInfo.setPartDesc(soInfo.getPartDesc());
dbSoInfo.setLotSize(soInfo.getLotSize());
dbSoInfo.setInputLotSize(soInfo.getInputLotSize());
dbSoInfo.setNeedDate(soInfo.getNeedDate());
dbSoInfo.setNoOfCross(soInfo.getNoOfCross());
dbSoInfo.setSerialsDate(soInfo.getSerialsDate());
dbSoInfo.setApn(soInfo.getApn());
dbSoInfo.setRevNo(soInfo.getRevNo());
dbSoInfo.setCustomerPartNo(soInfo.getCustomerPartNo());
dbSoInfo.setProject(soInfo.getProject());
dbSoInfo.setStandardRollQty(soInfo.getStandardRollQty());
//查询是否经过热覆合
String projectCode = soInfo.getProject();
ProjectCode projectData = pjcRepo.findOneByProjectCode(projectCode);
//设置参数
soInfo.setLaminationFlag(projectData.getLaminationFlag());
dbSoInfo.validate();
soInfoRepo.save(dbSoInfo);
ret.put("success", true);
}catch(DataIntegrityViolationException e){
ret.put("errorMsg", "Order No 不能重复");
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
@PostMapping("/soinfo/{id}/delete")
@ResponseBody
public Map delete(@PathVariable Integer id){
Map ret = new HashMap();
try{
SoInfo dbSoInfo = soInfoRepo.findOne(id);
if (dbSoInfo == null){
throw new RuntimeException("订单未找到");
}
if (!SoInfo.CREATED.equals(dbSoInfo.getStatus())){
throw new RuntimeException("Order number not found");
}
soInfoRepo.delete(id);
ret.put("success", true);
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
@PostMapping("/soinfo/{id}/delsn")
@ResponseBody
@Transactional
public Map deleteSn(@PathVariable Integer id,Authentication authentication){
Map ret = new HashMap();
try{
SoInfo dbSoInfo = soInfoRepo.findOne(id);
if (dbSoInfo == null){
throw new RuntimeException("订单未找到");
}
List list = rollRepo.findByOrderNo(dbSoInfo.getOrderNo());
if (list != null && list.size() > 0){
throw new RuntimeException("已经存在卷信息,不能删除");
}
if (SoInfo.GENERATED.equals(dbSoInfo.getStatus())){
dbSoInfo.setStatus(SoInfo.CREATED);
}
dbSoInfo.setSerialsGenBy(null);
dbSoInfo.setSerialsGenDate(null);
soInfoRepo.save(dbSoInfo);
finalRollDao.deleteSNTemplateCopy(dbSoInfo);
ret.put("success", true);
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
@PostMapping("/soinfo/{id}/refreshSerials")
@ResponseBody
public Map refreshSerials(@PathVariable Integer id,Authentication authentication){
Map ret = new HashMap();
try{
SoInfo dbSoInfo = soInfoRepo.findOne(id);
if (dbSoInfo == null){
throw new RuntimeException("订单未找到");
}
dbSoInfo.setStatus(SoInfo.GENERATED);
List<SoInfo> copyList=finalRollDao.getSNTemplateCopy(dbSoInfo);
if (copyList.size()==0){
throw new RuntimeException("没有码包数据");
}
dbSoInfo.setSerialsGenBy(copyList.get(0).getSerialsGenBy());
dbSoInfo.setSerialsGenDate(copyList.get(0).getSerialsGenDate());
dbSoInfo.setSerialEnd(copyList.get(0).getSerialEnd());
dbSoInfo.setSerialStart(copyList.get(0).getSerialStart());
dbSoInfo.setSerialsTemplate(copyList.get(0).getSerialsTemplate());
soInfoRepo.save(dbSoInfo);
ret.put("success", true);
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
@GetMapping("/download/{filename}")
@ResponseBody
public FileSystemResource downloadFile(@PathVariable("filename") String filename, HttpServletResponse response){
response.setContentType("application/csv");
response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
File file = new File("snfiles"+File.separator + filename + ".csv");
return new FileSystemResource(file);
}
/**
*
* @Title: downloadFileZip
* @Description: 下载已经生成好的文件
* @author: LR
* @date 2024年7月29日 下午5:46:22
* @return: FileSystemResource
* @throws
*/
@GetMapping("/downloadFileZip/{fileName}")
@ResponseBody
public FileSystemResource downloadFileZip(@PathVariable("fileName") String fileName, HttpServletResponse response){
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".zip");
File sourceFile = new File(zipPath);
//判断是否存在不存在创建目录
if(!sourceFile.exists()) {
sourceFile.mkdirs();
}
File targetFile = new File(sourceFile, fileName + ".zip");
return new FileSystemResource(targetFile);
}
@GetMapping("/downloadFileZipMulit/{filename}")
@ResponseBody
public FileSystemResource downloadFileZipMulit(@PathVariable("filename") String filename, HttpServletResponse response){
SoInfo soInfo=soInfoRepo.findByOrderNo(filename);
String filenameNew=soInfo.getOrderNo()+"-"+soInfo.getPartNo()+"-"+soInfo.getApn()+"-"+soInfo.getRevNo();
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=" + filenameNew + ".zip");
File file = new File("snfiles"+File.separator + filenameNew + ".zip");
return new FileSystemResource(file);
}
@PostMapping("/uploadFTP")
@ResponseBody
@Transactional
public Map uploadFTP(@RequestParam("fileName[]") String[] fileName,
@Param("shipNo") String shipNo, HttpServletResponse response){
response.setContentType("application/csv");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".zip");
Shipment shipment = shipRepo.findByShipNo(shipNo);
Map ret = new HashMap();
String flag = shipment.getFtpUploadflag();
ret.put("msg", "");
if("Y".equals(flag)){
ret.put("errorMsg", true);
ret.put("data", "已上传");
logger.info("已上传");
return ret;
}
// Shipment shipment = shipRepo.findByShipNo(shipNo);
List<CustomerFtppath> list = new ArrayList<CustomerFtppath>();
if(shipment.getCustomerNo()!=null&&!"".equals(shipment.getCustomerNo())){
list = finalRollDao.findByNo(shipment.getCustomerNo());
}else{
ret.put("errorMsg", true);
ret.put("data", "用户编号为空");
logger.info("用户编号为空");
return ret;
}
if(null == list || list.size() ==0){
ret.put("errorMsg", true);
ret.put("data", "数据库数据为空");
logger.info("数据库数据为空");
return ret;
}else if(list.get(0).getFtpPath() == null || "".equals(list.get(0).getFtpPath())){
ret.put("errorMsg", true);
ret.put("data", "The data is null");
logger.info("The data is null");
return ret;
}
String path ="";//上传成功后的返回路径
String filePath = "";//上传成功后保存数据库路径
FTPManager mana = FTPManager.getInstance();
String host = ftpHost;//IP地址
Integer port = ftpPort;//端口号
String user = ftpUser; //用户名
String password = ftpPassword;//密码
String dir = ftpDir;//首路径
//设置
mana.setInfo(host, port, user, password, dir);
String bpath = "";
List<CustomerFtppath> findByNo=finalRollDao.findByNo(shipment.getCustomerNo());
if(findByNo.size()==0){
throw new RuntimeException("客户信息customer_ftppath未维护,请联系系统管理员!");
}
String ftpFlag=findByNo.get(0).getFtpFlag();
try {
for(int i = 0;i<fileName.length;i++){
if(!"C".equals(ftpFlag)) {
bpath = "snfiles" + File.separator + fileName[i] + ".csv";
path = mana.upLoad(list.get(0).getFtpPath(),fileName[i], bpath, true);
}else {
bpath = "snfiles" + File.separator + fileName[i] + ".txt";
path = mana.upLoadTXT(list.get(0).getFtpPath(),fileName[i], bpath, true);
}
}
} catch (Exception e) {
logger.info("FTP"+e.getMessage());
}
if(path=="The FTP folder does not exist"){
ret.put("errorMsg", true);
ret.put("data", "路径不存在请联系管理员");
logger.info(path+"501");
return ret;
}else if(path!=null){//成功情况
filePath = "ftp://"+host+":"+port+path;
ret.put("success", true);
ret.put("data", filePath);
shipment.setFtpPath(filePath);
shipment.setFtpUploadflag("Y");
shipRepo.save(shipment);
}else{
ret.put("errorMsg", true);
ret.put("data", "路径有问题请联系管理员");
logger.info(path+"510");
return ret;
}
//上传成功后发邮件
if("Y".equals(list.get(0).getEmailFlag())){
if("".equals(list.get(0).getEmailAddress())||list.get(0).getEmailAddress()==null){
ret.put("msg", "客户未设置邮箱地址!");
}else {
for(int i = 0;i<fileName.length;i++){
if((!"C".equals(ftpFlag)) ) {
bpath = "snfiles" + File.separator + fileName[i] + ".csv";
// path = mana.upLoad(list.get(0).getFtpPath(),fileName[i], bpath, true);
}else {
bpath = "snfiles" + File.separator + fileName[i] + ".txt";
// path = mana.upLoadTXT(list.get(0).getFtpPath(),fileName[i], bpath, true);
}
String titleEnd="";
if(fileName.length>1){
titleEnd+="-"+(i+1);
}
mailSendService.sendCustomerMail(list.get(0), bpath,titleEnd);
}
ret.put("msg", "邮件发送成功!");
}
}
return ret;
}
@Autowired
private SequenceRepository seqRepo;
private static Pattern apnRevPattern = Pattern.compile("Label,([0-9A-Za-z\\-]+)-(\\S{1}),");
//Matcher m = p.matcher("Label,826-02449-A,NA");
@PostMapping("/soinfo/{id}/gensn")
@Transactional
@ResponseBody
public Map genSn(@PathVariable Integer id){
Map ret = new HashMap();
try{
SoInfo dbSoInfo = soInfoRepo.findOne(id);
if (dbSoInfo == null){
ret.put("errorMsg", "Order not found.");
return ret;
}
if (dbSoInfo.getSerialsGenDate() != null){
ret.put("errorMsg", "Already generated");
return ret;
}
String snTemplate = genSerialTemplate(dbSoInfo);
if(snTemplate==null){
ret.put("errorMsg", "eeeecode not found");
return ret;
}
dbSoInfo.setSerialsTemplate(snTemplate);
//find existing
Sequence seq = seqRepo.findByTag(snTemplate);
if (seq == null){
seq = new Sequence();
seq.setTag(snTemplate);
seq.setSeq(0);
}
dbSoInfo.setSerialStart(seq.getSeq() + 1);
dbSoInfo.setSerialEnd(dbSoInfo.getSerialStart() + dbSoInfo.getInputLotSize() - 1);
//多排文件
generateSerialNumbers(dbSoInfo);
//单排文件
generateSerialNumbers_old(dbSoInfo);
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
dbSoInfo.setRolls(0);
dbSoInfo.setStatus(SoInfo.GENERATED);
dbSoInfo.setSerialsGenBy(authentication.getName());
dbSoInfo.setSerialsGenDate(new Timestamp(System.currentTimeMillis()));
finalRollDao.deleteSNTemplateCopy(dbSoInfo);
finalRollDao.saveSNTemplateCopy(dbSoInfo);
soInfoRepo.save(dbSoInfo);
seq.setSeq(dbSoInfo.getSerialEnd());
seqRepo.save(seq);
ret.put("success", true);
}catch(Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
/**
*
* @Title: genSerials
* @Description: 产生工单得码包新的方法
* @author: LR
* @date 2024年6月19日 下午2:46:03
* @return: Object
* @throws
*/
@PostMapping("/soinfo/{id}/genSerials")
@ResponseBody
public Object genSerials(@PathVariable Integer id){
Map<String, Object> resultMap = new HashMap<String, Object>();
try{
//获取ifs的工单信息
prepressService.genSerials(id);
resultMap.put("msg", "Successfully!");
resultMap.put("success", true);
}catch (Exception e){
resultMap.put("msg", e.getMessage());
}
return resultMap;
}
@Value("${eeeecode}")
private String appleEeeeCode;
private String genSerialTemplate(SoInfo soInfo) {
List<ProjectCode> list = pjcRepo.findByProjectCode(soInfo.getProject());
if(list.size()==0){
return null;
}
//查询生码的类型
String partNo = soInfo.getPartNo();
//查询物料的信息
PartData partData = basicDao.getPartDataByPartNo(partNo);
String codeType = partData.getCodeType();
Calendar cal = Calendar.getInstance();
cal.setTime(soInfo.getSerialsDate());
String platCode3 = "J4K";
String year1 = String.valueOf(cal.get(Calendar.YEAR) % 10);
String week2 = org.apache.commons.lang3.StringUtils.leftPad(String.valueOf(cal.get(Calendar.WEEK_OF_YEAR)), 2, '0');
String day1 = String.valueOf(cal.get(Calendar.DAY_OF_WEEK));
String code4 = "____";
String appleEEEE4 = list.get(0).getEeeecode();
String rev1 = soInfo.getRevNo();
String delimiter1 = "+";
String apn = soInfo.getApn();
String checkSum1 = "_";
String snLeft7 = platCode3 + year1 + week2 + day1;
String snMiddle5 = appleEEEE4 + rev1;
String snRight = delimiter1 + apn;
String snFormat = null;
if ("2024".equals(codeType)) {
snFormat = snLeft7 + code4 + snMiddle5 + checkSum1 + snRight;
}else if("2025".equals(codeType)) {
snFormat = snLeft7 + code4 + snMiddle5 + checkSum1;
}
return snFormat;
}
//20230427 阮琦修改 原版在下面
private void generateSerialNumbers(SoInfo soInfo) throws IOException {
if (soInfo.getSerialEnd() > 1336335) {
throw new RuntimeException("序列号["+soInfo.getSerialStart()+"-"+soInfo.getSerialEnd()+"], 数量超出最大值。");
}
long start = System.currentTimeMillis();
String fileName = soInfo.getOrderNo()+"-"+soInfo.getPartNo()+"-"+soInfo.getApn()+"-"+soInfo.getRevNo();
//start generate
FileOutputStream fos = new FileOutputStream( "snfiles" + File.separator + fileName + ".zip");
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);
ZipEntry entry = new ZipEntry(fileName + ".csv");
zos.putNextEntry(entry);
//查询当前物料的数据 获取编码的类型
String partNo = soInfo.getPartNo();
PartData part = basicDao.getPartDataByPartNo(partNo);
String codeType = part.getCodeType();
//把所有序列号收集起来放进一个list
List<SNData> allSn=new ArrayList<>();
StringBuilder template2 = new StringBuilder(soInfo.getSerialsTemplate());
int j=1;
for (int snIndex = soInfo.getSerialStart(); snIndex <= soInfo.getSerialEnd(); snIndex++) {
String currentSn = SerialUtil.getSerialNo(template2, snIndex, codeType);
SNData snData=new SNData();
snData.setSn(currentSn);
snData.setNumber(j);
allSn.add(snData);
j++;
}
int batchSize = (int) Math.ceil((double)allSn.size() / 4.0);
//分成四组
List<List<SNData>> groups = new ArrayList<>();
int startNum = 0;
while (startNum < allSn.size()) {
int endNum = Math.min(startNum + batchSize, allSn.size());
List<SNData> group=new ArrayList<>(allSn.subList(startNum, endNum));
//如果最后一列少几个序列号 空字符串补齐 一般不会出现
while (group.size() < batchSize) {
group.add(new SNData());
}
groups.add(group);
startNum = endNum;
}
zos.write(( soInfo.getApn()+"-"+soInfo.getRevNo()+"-1").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( "ID-1").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( soInfo.getApn()+"-"+soInfo.getRevNo()+"-2").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( "ID-2").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( soInfo.getApn()+"-"+soInfo.getRevNo()+"-3").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( "ID-3").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( soInfo.getApn()+"-"+soInfo.getRevNo()+"-4").getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( "ID-4" + "\r\n").getBytes("UTF-8"));
for (int i=0; i<batchSize; i++) {
zos.write(( groups.get(0).get(i).getSn()).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( String.valueOf(groups.get(0).get(i).getNumber()) ).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( groups.get(1).get(i).getSn()).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( String.valueOf(groups.get(1).get(i).getNumber()) ).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( groups.get(2).get(i).getSn()).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( String.valueOf(groups.get(2).get(i).getNumber()) ).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
//如果最后一列少几个,那么直接换行 实际业务估计不存在这样的情况
if(groups.get(3).get(i).getSn()==null){
zos.write(( "\r\n").getBytes("UTF-8"));
}else {
zos.write(( groups.get(3).get(i).getSn()).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( String.valueOf(groups.get(3).get(i).getNumber())+ "\r\n").getBytes("UTF-8"));
}
}
zos.flush();
zos.close();
bos.flush();
bos.close();
fos.flush();
fos.close();
long duration = System.currentTimeMillis() - start;
logger.info("Generated SN for order [{}], template={}, size={}, duration={}.",
soInfo.getOrderNo(), soInfo.getSerialsTemplate(), soInfo.getInputLotSize(), duration);
}
private void generateSerialNumbers_old(SoInfo soInfo) throws IOException {
if (soInfo.getSerialEnd() > 1336335) {
throw new RuntimeException("序列号["+soInfo.getSerialStart()+"-"+soInfo.getSerialEnd()+"], 数量超出最大值。");
}
long start = System.currentTimeMillis();
String fileName = soInfo.getOrderNo();
//start generate
FileOutputStream fos = new FileOutputStream( "snfiles" + File.separator + fileName + ".zip");
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);
ZipEntry entry = new ZipEntry(fileName + ".csv");
zos.putNextEntry(entry);
zos.write(( soInfo.getApn()).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( "ID" + "\r\n").getBytes("UTF-8"));
StringBuilder template = new StringBuilder(soInfo.getSerialsTemplate());
int i =0;
//查询当前物料的数据 获取编码的类型
String partNo = soInfo.getPartNo();
PartData part = basicDao.getPartDataByPartNo(partNo);
String codeType = part.getCodeType();
for (int snIndex = soInfo.getSerialStart(); snIndex <= soInfo.getSerialEnd(); snIndex++) {
i = i+1;
String currentSn = SerialUtil.getSerialNo(template, snIndex, codeType);
zos.write(( currentSn).getBytes("UTF-8"));
zos.write(( ",").getBytes("UTF-8"));
zos.write(( i + "\r\n").getBytes("UTF-8"));
}
zos.flush();
zos.close();
bos.flush();
bos.close();
fos.flush();
fos.close();
long duration = System.currentTimeMillis() - start;
logger.info("Generated SN for order [{}], template={}, size={}, duration={}.",
soInfo.getOrderNo(), soInfo.getSerialsTemplate(), soInfo.getInputLotSize(), duration);
}
@Autowired
SerialsTrackingService snTrackingService;
@PostMapping("/downloadTrace")
@ResponseBody
public Map downloadTrace(@RequestParam("orderNo") String orderNo){
Map ret = new HashMap();
try{
snTrackingService.trace(orderNo);
ret.put("fileName", "tracking"+orderNo);
ret.put("success", true);
}catch (Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
/**
*
* @Title: downloadSingleTrace
* @Description: 按照单排下载
* @param orderNo
* @return
* @return: Map
* @author LR
* @date: 2021-7-28 10:09:34
* @throws
*/
@PostMapping("/downloadSingleTrace")
@ResponseBody
public Map downloadSingleTrace(@RequestParam("orderNo") String orderNo){
Map ret = new HashMap();
try{
snTrackingService.downloadSingleTrace(orderNo);
ret.put("fileName", "tracking-single-"+orderNo);
ret.put("success", true);
}catch (Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
/**
* 仅导出未扫描(Trace)
* @param orderNo
* @return
*/
@PostMapping("/notScanTrace")
@ResponseBody
public Map notScanTrace(@RequestParam("orderNo") String orderNo){
Map ret = new HashMap();
try{
snTrackingService.notScanTrace(orderNo);
ret.put("fileName", "notScanTrace"+orderNo);
ret.put("success", true);
}catch (Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
/**
* 仅导出未扫描(Trace)
* @param orderNo
* @return
*/
@PostMapping("/exportMissSn")
@ResponseBody
public Map exportMissSn(@RequestParam("startQty") Integer startQty,@RequestParam("endQty") Integer endQty
,@RequestParam("orderNo") String orderNo,@RequestParam("serialNo") String serialNo){
Map ret = new HashMap();
try{
snTrackingService.exportMissSn(startQty,endQty,orderNo,serialNo);
ret.put("fileName", "missingReport"+orderNo);
ret.put("success", true);
}catch (Exception e){
ret.put("errorMsg", e.getMessage());
}
return ret;
}
// @Autowired
// IfsService ifsService;
@Value("${ifs.datasource.sql.order}")
String ifsOrderSql;
@Autowired
JdbcTemplate jdbcTemplate;
@PostMapping("/ifsOrder")
@ResponseBody
public Map getIfsOrder(@RequestParam("orderNo") String orderNo){
Map<String, Object> resultMap = new HashMap<String, Object>();
try{
//获取ifs的工单信息
Map<String, Object> resultRow = prepressService.getIfsOrder(orderNo);
resultMap.put("ifsOrder", resultRow);
resultMap.put("msg", "Successfully!");
resultMap.put("success", true);
}catch (Exception e){
resultMap.put("success", false);
resultMap.put("msg", e.getMessage());
}
return resultMap;
}
@GetMapping("/getReceiveQty")
@ResponseBody
public Object getReceiveQty(@RequestParam(value = "orderNo", required = false) String orderNo,
String startTime, String endTime,
@RequestParam(value = "page", required = false, defaultValue = "1") Integer currPage,
@RequestParam(value = "rows", required = false, defaultValue = "20") Integer rows,
@RequestParam(value = "sort", required = false, defaultValue = "id") String sortField,
@RequestParam(value = "order", required = false, defaultValue = "asc") String orderDirection){
Map<String, Object> map = new HashMap<>();
List<IFSReceiveQty> row = finalRollDao.getReceiveQty(orderNo, startTime, endTime);
map.put("total", row.size());
map.put("rows", row);
return map;
}
}