无关风月
2025-02-14 11ec1c23a9f47ed70b124e413e33e3696897390f
bug修改
4个文件已修改
1个文件已添加
395 ■■■■ 已修改文件
common/src/main/java/com/jilongda/common/Ticket/TAddOptometryVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/jilongda/common/Ticket/TOrderGoodsPrintVO.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/jilongda/common/Ticket/TicketUtil.java 262 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/controller/TOrderController.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
optometrist/src/main/java/com/jilongda/optometrist/model/TTicket.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/jilongda/common/Ticket/TAddOptometryVO.java
@@ -15,6 +15,8 @@
    private Integer id;
    @ApiModelProperty(value = "验光单详情")
    private List<TOptometryDetailVO> optometryDetailVOS;
    @ApiModelProperty(value = "商品列表")
    private List<TOrderGoodsPrintVO> orderGoods;
    @ApiModelProperty(value = "门店名称")
    private String shopName;
    @ApiModelProperty(value = "验光师名称")
@@ -25,4 +27,8 @@
    private String phone;
    @ApiModelProperty(value = "小票机编号")
    private String sn;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "加工编号")
    private String machiningCode;
}
common/src/main/java/com/jilongda/common/Ticket/TOrderGoodsPrintVO.java
New file
@@ -0,0 +1,74 @@
package com.jilongda.common.Ticket;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
/**
 * <p>
 * 销售订单表
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="TOrderGoods对象", description="销售订单商品详情表")
public class TOrderGoodsPrintVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "订单id")
    private Integer orderId;
    @ApiModelProperty(value = "色号")
    private String color;
    @ApiModelProperty(value = "镜片右 球镜+柱镜 逗号拼接 字段为空 客户自带")
    private String rLens;
    @ApiModelProperty(value = "镜片左 球镜+柱镜 逗号拼接 字段为空 客户自带")
    private String lLens;
    @ApiModelProperty(value = "1球 2非球面 3双非")
    private Integer type;
    @ApiModelProperty(value = "折射率")
    private String refractiveIndex;
    @ApiModelProperty(value = "品牌名称")
    private String brandName;
    @ApiModelProperty(value = "镜片-系列名称")
    private String seriesName;
    @ApiModelProperty(value = "镜架-型号名称")
    private String modelName;
    @ApiModelProperty(value = "镜架型号id 前端忽略")
    private Integer modelId;
    @ApiModelProperty(value = "类型 1镜架 2镜片")
    private Integer status;
    @ApiModelProperty(value = "商品价格")
    private BigDecimal goodsMoney;
    @ApiModelProperty(value = "系统成本价")
    private BigDecimal cost;
    @ApiModelProperty(value = "核算成本价")
    private BigDecimal constConfirm;
    @ApiModelProperty(value = "镜片右 球镜+柱镜")
    private String rightLens;
    @ApiModelProperty(value = "镜片左 球镜+柱镜")
    private String leftLens;
    @ApiModelProperty(value = "材质")
    private String material;
}
common/src/main/java/com/jilongda/common/Ticket/TicketUtil.java
@@ -51,58 +51,58 @@
            List<TOptometryDetailVO> temp = new ArrayList<>();
            TOptometryDetailVO t1 = new TOptometryDetailVO();
            t1.setType(3);
            t1.setBallMirror(-1.00D);
            t1.setColumnMirror(-0.10D);
            t1.setAxis("30");
            t1.setPupilDistance("33");
//            t1.setBallMirror(-1.00D);
//            t1.setColumnMirror(-0.10D);
//            t1.setAxis("30");
//            t1.setPupilDistance("33");
            t1.setStatus(1);
            temp.add(t1);
            TOptometryDetailVO t2 = new TOptometryDetailVO();
            t2.setType(3);
            t2.setBallMirror(-1.00D);
            t2.setColumnMirror(-0.10D);
            t2.setAxis("30");
            t2.setPupilDistance("33");
//            t2.setBallMirror(-1.00D);
//            t2.setColumnMirror(-0.10D);
//            t2.setAxis("30");
//            t2.setPupilDistance("33");
            t2.setStatus(2);
            temp.add(t2);
            TOptometryDetailVO t3 = new TOptometryDetailVO();
            t3.setType(2);
            t3.setBallMirror(-1.00D);
            t3.setColumnMirror(-0.10D);
            t3.setAxis("30");
            t3.setPupilDistance("33");
            t3.setCorrect("1.0");
//            t3.setBallMirror(-1.00D);
//            t3.setColumnMirror(-0.10D);
//            t3.setAxis("30");
//            t3.setPupilDistance("33");
//            t3.setCorrect("1.0");
            t3.setStatus(1);
            temp.add(t3);
            TOptometryDetailVO t4 =  new TOptometryDetailVO();
            t4.setType(2);
            t4.setBallMirror(-1.00D);
            t4.setColumnMirror(-0.10D);
            t4.setAxis("30");
            t4.setPupilDistance("33");
            t4.setCorrect("1.0");
//            t4.setBallMirror(-1.00D);
//            t4.setColumnMirror(-0.10D);
//            t4.setAxis("30");
//            t4.setPupilDistance("33");
//            t4.setCorrect("1.0");
            t4.setStatus(2);
            temp.add(t4);
            TOptometryDetailVO t5 = new TOptometryDetailVO();
            t5.setType(1);
            t5.setBallMirror(-1.00D);
            t5.setColumnMirror(-0.10D);
            t5.setAxis("30");
            t5.setAddS("50");
            t5.setPupilHeight("50");
            t5.setPupilDistance("33");
            t5.setCorrect("1.0");
//            t5.setBallMirror(-1.00D);
//            t5.setColumnMirror(-0.10D);
//            t5.setAxis("30");
//            t5.setAddS("50");
//            t5.setPupilHeight("50");
//            t5.setPupilDistance("33");
//            t5.setCorrect("1.0");
            t5.setStatus(1);
            temp.add(t5);
            TOptometryDetailVO t6 = new TOptometryDetailVO();
            t6.setType(1);
            t6.setBallMirror(-1.00D);
            t6.setColumnMirror(-0.10D);
            t6.setAxis("30");
            t6.setAddS("50");
            t6.setPupilHeight("50");
            t6.setPupilDistance("33");
            t6.setCorrect("1.0");
//            t6.setBallMirror(-1.00D);
//            t6.setColumnMirror(-0.10D);
//            t6.setAxis("30");
//            t6.setAddS("50");
//            t6.setPupilHeight("50");
//            t6.setPupilDistance("33");
//            t6.setCorrect("1.0");
            t6.setStatus(2);
            temp.add(t6);
@@ -340,31 +340,33 @@
                    Comparator.comparingInt(TOptometryDetailVO::getType)
                            .thenComparingInt(TOptometryDetailVO::getStatus).reversed()
            );
            for (TOptometryDetailVO s : optometryDetailVOS) {
                switch (s.getType()){
                    case 3:
                        if (s.getStatus()==2){
                            content.append("<BOLD>旧镜信息<BR>");
                            content.append("R:<BR>");
                            content.append("度数:"+s.getBallMirror()+" 散光:"+s.getColumnMirror()+" 轴位:"+s.getAxis()+"<BR>");
                            content.append("瞳距:"+s.getPupilDistance()+"<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+"<BR>");
                        }else if (s.getStatus()==1){
                            content.append("L:<BR>");
                            content.append("度数:"+s.getBallMirror()+" 散光:"+s.getColumnMirror()+" 轴位:"+s.getAxis()+"<BR>");
                            content.append("瞳距:"+s.getPupilDistance()+"<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+"<BR>");
                            content.append("--------------------------------<BR>");
                        }
                        break;
                    case 2:
                        if (s.getStatus()==2){
                            content.append("完全矫正<BR>");
                            content.append("R:<BR>");
                            content.append("度数:"+s.getBallMirror()+" 散光:"+s.getColumnMirror()+" 轴位:"+s.getAxis()+"<BR>");
                            content.append("瞳距:"+s.getPupilDistance()+" 矫正:"+s.getCorrect()+"<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+" 矫正:"+(s.getCorrect()==null?"-":s.getCorrect())+"<BR>");
                        }else if (s.getStatus()==1){
                            content.append("L:<BR>");
                            content.append("度数:"+s.getBallMirror()+" 散光:"+s.getColumnMirror()+" 轴位:"+s.getAxis()+"<BR>");
                            content.append("瞳距:"+s.getPupilDistance()+" 矫正:"+s.getCorrect()+"<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+" 矫正:"+(s.getCorrect()==null?"-":s.getCorrect())+"<BR>");
                            content.append("--------------------------------<BR>");
                        }
                        break;
@@ -372,14 +374,14 @@
                        if (s.getStatus()==2){
                            content.append("配镜处方<BR>");
                            content.append("R:<BR>");
                            content.append("度数:"+s.getBallMirror()+" 散光:"+s.getColumnMirror()+" 轴位:"+s.getAxis()+"<BR>");
                            content.append("ADD:"+s.getAddS()+" 瞳距:"+s.getPupilDistance()+" 瞳高:"+s.getPupilHeight()+"<BR>");
                            content.append("矫正:"+s.getCorrect()+"<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("ADD:"+(s.getAddS()==null?"-":s.getAddS())+" 瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+" 瞳高:"+(s.getPupilHeight()==null?"-":s.getPupilHeight())+"<BR>");
                            content.append("矫正:"+(s.getCorrect()==null?"-":s.getCorrect())+"<BR>");
                        }else if (s.getStatus()==1){
                            content.append("L:<BR>");
                            content.append("度数:"+s.getBallMirror()+" 散光:"+s.getColumnMirror()+" 轴位:"+s.getAxis()+"<BR>");
                            content.append("ADD:"+s.getAddS()+" 瞳距:"+s.getPupilDistance()+" 瞳高:"+s.getPupilHeight()+"<BR>");
                            content.append("矫正:"+s.getCorrect()+"<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("ADD:"+(s.getAddS()==null?"-":s.getAddS())+" 瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+" 瞳高:"+(s.getPupilHeight()==null?"-":s.getPupilHeight())+"<BR>");
                            content.append("矫正:"+(s.getCorrect()==null?"-":s.getCorrect())+"<BR>");
                            content.append("--------------------------------<BR>");
                        }
                        break;
@@ -387,15 +389,15 @@
            }
            content.append("</BOLD>");
           //通过POST请求,发送打印信息到服务器
            RequestConfig requestConfig = RequestConfig.custom()
                    .setSocketTimeout(30000)//读取超时
            RequestConfig requestConfig = RequestConfig.custom()
                    .setSocketTimeout(30000)//读取超时
                    .setConnectTimeout(30000)//连接超时
                    .build();
            CloseableHttpClient httpClient = HttpClients.custom()
                     .setDefaultRequestConfig(requestConfig)
                     .build();
                     .build();
            HttpPost post = new HttpPost(URL);
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("user",USER));
@@ -406,7 +408,7 @@
            nvps.add(new BasicNameValuePair("sn",dto.getSn()));
            nvps.add(new BasicNameValuePair("content", content.toString()));
            nvps.add(new BasicNameValuePair("times","1"));//打印联数
            CloseableHttpResponse response = null;
            String result = null;
            try
@@ -415,7 +417,7 @@
               response = httpClient.execute(post);
                  int statecode = response.getStatusLine().getStatusCode();
                  if(statecode == 200){
                    HttpEntity httpentity = response.getEntity();
                    HttpEntity httpentity = response.getEntity();
                    if (httpentity != null){
                        //服务器返回的JSON字符串,建议要当做日志记录起来
                        result = EntityUtils.toString(httpentity);
@@ -446,7 +448,159 @@
               }
           }
            return unescapeUnicode(result);
        }
        public static String printMatch(TAddOptometryVO dto){
            //标签说明:
            //单标签:
            //"<BR>"为换行,"<CUT>"为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
            //"<LOGO>"为打印LOGO指令(前提是预先在机器内置LOGO图片),"<PLUGIN>"为钱箱或者外置音响指令
            //成对标签:
            //"<CB></CB>"为居中放大一倍,"<B></B>"为放大一倍,"<C></C>"为居中,<L></L>字体变高一倍
            //<W></W>字体变宽一倍,"<QR></QR>"为二维码,"<BOLD></BOLD>"为字体加粗,"<RIGHT></RIGHT>"为右对齐
            //拼凑订单内容时可参考如下格式
            //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
            StringBuilder content;
            content=new StringBuilder("<BOLD>");
            content.append("隼目加工单<BR>");
            content.append(dto.getShopName()).append("<BR>");
            content.append("订单时间:").append(dto.getTime()).append("<BR>");
            content.append("--------------------------------<BR>");
            content.append("加工编号:").append("<BR>");
            content.append("<CB>");
            content.append(dto.getMachiningCode()).append("</CB>").append("<BR>");
            content.append("--------------------------------<BR>");
            List<TOptometryDetailVO> optometryDetailVOS = dto.getOptometryDetailVOS();
            // 使用 List.sort 和 Comparator 进行多字段倒序排序
            optometryDetailVOS.sort(
                    Comparator.comparingInt(TOptometryDetailVO::getType)
                            .thenComparingInt(TOptometryDetailVO::getStatus).reversed()
            );
            for (TOptometryDetailVO s : optometryDetailVOS) {
                switch (s.getType()){
                    case 1:
                        if (s.getStatus()==2){
                            content.append("配镜处方<BR>");
                            content.append("R:<BR>");
//                            (s.getAddS()==null?"-":s.getAddS())
//                            (s.getPupilDistance()==null?"-":s.getPupilDistance())
//
//                            (s.getCorrect()==null?"-":s.getCorrect())
//                            (s.getBallMirror()==null?"-":s.getBallMirror())
//                            (s.getColumnMirror()==null?"-":s.getColumnMirror())
//                            (s.getAxis()==null?"-":s.getAxis())
//                            (s.getAddS()==null?"-":s.getAddS())
//                            (s.getPupilDistance()==null?"-":s.getPupilDistance())
//                            (s.getPupilHeight()==null?"-":s.getPupilHeight())
//                            (s.getCorrect()==null?"-":s.getCorrect())
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("ADD:"+(s.getAddS()==null?"-":s.getAddS())+" 瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+" 瞳高:"+(s.getPupilHeight()==null?"-":s.getPupilHeight())+"<BR>");
                            content.append("矫正:"+(s.getCorrect()==null?"-":s.getCorrect())+"<BR>");
                        }else if (s.getStatus()==1){
                            content.append("L:<BR>");
                            content.append("度数:"+(s.getBallMirror()==null?"-":s.getBallMirror())+" 散光:"+(s.getColumnMirror()==null?"-":s.getColumnMirror())+" 轴位:"+(s.getAxis()==null?"-":s.getAxis())+"<BR>");
                            content.append("ADD:"+(s.getAddS()==null?"-":s.getAddS())+" 瞳距:"+(s.getPupilDistance()==null?"-":s.getPupilDistance())+" 瞳高:"+(s.getPupilHeight()==null?"-":s.getPupilHeight())+"<BR>");
                            content.append("矫正:"+(s.getCorrect()==null?"-":s.getCorrect())+"<BR>");
                            content.append("--------------------------------<BR>");
                        }
                        break;
                }
            }
            content.append("订单详情:").append("<BR>");
            List<TOrderGoodsPrintVO> orderGoods = dto.getOrderGoods();
            List<TOrderGoodsPrintVO> tOrderGoodsPrintVOS = new ArrayList<>();
            for (TOrderGoodsPrintVO orderGood : orderGoods) {
                if (orderGood.getModelId()!=null){
                    tOrderGoodsPrintVOS.add(orderGood);
                }
            }
            for (TOrderGoodsPrintVO orderGood : orderGoods) {
                if (orderGood.getRLens()!=null){
                    tOrderGoodsPrintVOS.add(orderGood);
                }
            }
            for (TOrderGoodsPrintVO orderGood : orderGoods) {
                if (orderGood.getLLens()!=null){
                    tOrderGoodsPrintVOS.add(orderGood);
                }
            }
            for (TOrderGoodsPrintVO tOrderGoodsPrintVO : tOrderGoodsPrintVOS) {
                if (tOrderGoodsPrintVO.getModelId()!=null){
                    content.append("镜架:").append(tOrderGoodsPrintVO.getBrandName()+"-").append(tOrderGoodsPrintVO.getMaterial()+"-").append(tOrderGoodsPrintVO.getModelName()).append("<BR>");
                }
                if (tOrderGoodsPrintVO.getRLens()!=null){
                    content.append("右眼镜片:").append(tOrderGoodsPrintVO.getBrandName()+"-").append(tOrderGoodsPrintVO.getSeriesName()+"-").append(tOrderGoodsPrintVO.getRefractiveIndex()).append("<BR>");
                }
                if (tOrderGoodsPrintVO.getModelId()!=null){
                    content.append("左眼镜片:").append(tOrderGoodsPrintVO.getBrandName()+"-").append(tOrderGoodsPrintVO.getSeriesName()+"-").append(tOrderGoodsPrintVO.getRefractiveIndex()).append("<BR>");
                }
            }
            content.append("客户电话:").append(dto.getPhone()).append("<BR>");
            content.append("备注:").append(dto.getRemark()==null?"-":dto.getRemark()).append("<BR>");
            content.append("</BOLD>");
           //通过POST请求,发送打印信息到服务器
            RequestConfig requestConfig = RequestConfig.custom()
                    .setSocketTimeout(30000)//读取超时
                    .setConnectTimeout(30000)//连接超时
                    .build();
            CloseableHttpClient httpClient = HttpClients.custom()
                     .setDefaultRequestConfig(requestConfig)
                     .build();
            HttpPost post = new HttpPost(URL);
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("user",USER));
            String STIME = String.valueOf(System.currentTimeMillis()/1000);
            nvps.add(new BasicNameValuePair("stime",STIME));
            nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
            nvps.add(new BasicNameValuePair("apiname","Open_printMsg"));//固定值,不需要修改
            nvps.add(new BasicNameValuePair("sn",dto.getSn()));
            nvps.add(new BasicNameValuePair("content", content.toString()));
            nvps.add(new BasicNameValuePair("times","1"));//打印联数
            CloseableHttpResponse response = null;
            String result = null;
            try
            {
               post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
               response = httpClient.execute(post);
                  int statecode = response.getStatusLine().getStatusCode();
                  if(statecode == 200){
                    HttpEntity httpentity = response.getEntity();
                    if (httpentity != null){
                        //服务器返回的JSON字符串,建议要当做日志记录起来
                        result = EntityUtils.toString(httpentity);
                    }
               }
           }
           catch (Exception e)
           {
               e.printStackTrace();
           }
           finally{
               try {
                   if(response!=null){
                       response.close();
                   }
               } catch (IOException e) {
                   e.printStackTrace();
               }
               try {
                   post.abort();
               } catch (Exception e) {
                   e.printStackTrace();
               }
               try {
                   httpClient.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
            return unescapeUnicode(result);
        }
        
        
manage/src/main/java/com/jilongda/manage/controller/TOrderController.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jilongda.common.Ticket.TAddOptometryVO;
import com.jilongda.common.Ticket.TOrderGoodsPrintVO;
import com.jilongda.common.Ticket.TicketUtil;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.authority.model.SecUser;
@@ -14,12 +17,10 @@
import com.jilongda.manage.service.*;
import com.jilongda.manage.utils.LoginInfoUtil;
import com.jilongda.manage.utils.OssUploadUtil;
import com.jilongda.manage.vo.TModelVO;
import com.jilongda.manage.vo.TOptometryVO;
import com.jilongda.manage.vo.TOrderListVO;
import com.jilongda.manage.vo.TOrderVO;
import com.jilongda.manage.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -28,6 +29,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -178,7 +180,8 @@
        return ApiResult.success(tCouponReceives);
    }
    @Autowired
    private TTicketService tTicketService;
    @ApiOperation(value = "添加订单")
    @PostMapping(value = "/addOrder")
    public ApiResult addOrder(@RequestBody TOrderDTO dto) {
@@ -228,7 +231,7 @@
                        .eq(split.length>=2,TLensGoods::getColumnMirror, split[1])
                        .one();
                if (one!=null){
                    if (one.getTotal()-1<0){
                    if (one.getTotal()-1<0 && lensSeries.getType()==1 ){
                        return ApiResult.failed("库存不足");
                    }
                    // 减少对应库存
@@ -369,6 +372,42 @@
        orderGoodsService.saveBatch(orderGoods);
        lensGoodsService.updateBatchById(tLensGoods);
        frameGoodsService.updateBatchById(tFrameGoods);
        TAddOptometryVO tAddOptometryVO = new TAddOptometryVO();
        TTicket tTicket = tTicketService.lambdaQuery().eq(TTicket::getStoreId, dto.getStoreId())
                .eq(TTicket::getType,1)
                .eq(TTicket::getStatus, 1).list().stream().findFirst().orElse(null);
        if (tTicket==null){
            return ApiResult.failed("当前门店未绑定小票机");
        }
        tAddOptometryVO.setSn(tTicket.getCloudId()+"");
        tAddOptometryVO.setPhone(dto.getPhone());
        List<TOrderGoods> orderGoods1 = dto.getOrderGoods();
        ArrayList<TOrderGoodsPrintVO> tOrderGoodsPrintVOS = new ArrayList<>();
        // 复制
        for (TOrderGoods orderGood : orderGoods1) {
            TOrderGoodsPrintVO tOrderGoodsPrintVO = new TOrderGoodsPrintVO();
            BeanUtils.copyProperties(orderGood,tOrderGoodsPrintVO);
            if (orderGood.getModelId()!=null){
                TModel byId = modelService.getById(orderGood.getModelId());
                if (byId!=null){
                    TMaterial byId1 = materialService.getById(byId.getMaterialId());
                    if (byId1!=null){
                        tOrderGoodsPrintVO.setMaterial(byId1.getName());
                    }
                }
            }
            tOrderGoodsPrintVOS.add(tOrderGoodsPrintVO);
        }
        tAddOptometryVO.setOrderGoods(tOrderGoodsPrintVOS);
        tAddOptometryVO.setRemark(dto.getRemark());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = simpleDateFormat.format(new Date());
        tAddOptometryVO.setTime(format);
        tAddOptometryVO.setMachiningCode(dto.getMachiningCode());
        if (dto.getIsMachining()==1){
            // 打印加工单
            TicketUtil.printMatch(tAddOptometryVO);
        }
        return ApiResult.success(dto.getId());
    }
optometrist/src/main/java/com/jilongda/optometrist/model/TTicket.java
@@ -33,7 +33,7 @@
    @ApiModelProperty(value = "小票机名称")
    @TableField("name")
    private Integer name;
    private String name;
    @ApiModelProperty(value = "类型 1验光单 2加工单")
    @TableField("type")