123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- package co.dc.aptiv.service;
- import co.dc.aptiv.AptivApp;
- import co.dc.commons.basedao.CommonBaseDao;
- import co.dc.commons.utils.DateTimeUtil;
- import co.dc.aptiv.ScanFrame;
- import co.dc.aptiv.pojo.BillDetailPojo;
- import co.dc.aptiv.pojo.MaterielPojo;
- import org.apache.commons.dbutils.handlers.MapHandler;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.sql.SQLException;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * @describe: 二维码生成
- * @author: liuxinglong
- * @version: 2018/4/18 19:50
- */
- @Service("qrCodesService")
- public class QrCodeService {
- private ScanFrame scanFrame;
- @Resource(name = "commonBaseDao")
- private CommonBaseDao baseDao;
- private static final Log log = LogFactory.getLog(QrCodeService.class);
- protected String createDateTime = null;
- boolean isReCode = false;
- /**
- * 根据物料Id生成二维码
- *
- * @param materielId 物料Id
- * @return QR Code
- */
- public String generateQRCode(Long materielId) {
- createDateTime = DateTimeUtil.getDateTimeString();
- //当前日期
- String nowDate = createDateTime.substring(0, 10);
- //物料最后生产日期
- String lastDate = AptivApp.billDetailService.getLastDate(materielId);
- MaterielPojo materielPojo = AptivApp.materielService.findById(materielId);
- if (materielPojo == null) {
- log.info("物料不存在,无法生成码");
- return null;
- }
- /*lastDate == null || (nowDate - lastDate > 0) = 重置计数*/
- if (lastDate == null || (DateTimeUtil.compareDay(nowDate, lastDate) > 0)) {
- //重置计数
- materielPojo.setMaxNum(1);
- AptivApp.materielService.updateMaterielpojo(materielPojo);
- }
- //每天计数不能超过9999
- /*if (materielPojo.getMaxNum() > 9999) {
- return null;
- }*/
- String maxNum = materielPojo.getMaxNum() + "";
- //最大序号不足4位进行补位
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < 4 - maxNum.length(); i++) {
- sb.append("0");
- }
- maxNum = sb.toString() + maxNum;
- //更新物料序号
- AptivApp.materielService.updateMaterielpojoMaxNum(materielId);
- //物料编号+生产日期+(补位+最大序号)
- String code = materielPojo.getCpn() + " " + nowDate.replace("-", "").substring(2, 8) + maxNum;
- log.info("生成码 =" + code);
- return code;
- }
- /**
- * 将码发送到激光机
- */
- public int sendQrCode() {
- // if (AptivApp.flag && AptivApp.printStatus) {
- if (AptivApp.flag) {
- // AptivApp.printStatus = false;
- String code = generateQRCode(AptivApp.nowMaterielPojo.getId()).trim();
- if (code == null) {
- return 2;
- }
- AptivApp.qrCode = code;
- BillDetailPojo billDetailPojo = baseDao.findByParam(BillDetailPojo.class, "qrCode", AptivApp.qrCode);
- //不是重码才发往激光机打印,是重码提示管理员
- if (billDetailPojo == null) {
- getScanFrame().loadCode();
- //获取码并发送到激光机
- int status = AptivApp.printMina.sendByte(AptivApp.ccu.String2ASCII(AptivApp.nowMaterielPojo.getCpn() + AptivApp.nowMaterielPojo.getType() + AptivApp.qrCode));
- if (status > 0) {
- return status;
- }
- } else {
- log.error("生产出重码 =" + AptivApp.qrCode);
- getScanFrame().alertMsg(1, "生产出重码,请停止打印并联系管理员");
- }
- }
- return -1;
- }
- /**
- * 从采集器接收码并保存
- *
- * @param str
- */
- public void receiveQrCode(String str) {
- //设置扫描状态为不可扫描
- // AptivApp.scanStatus = false;
- //采集器未采到码
- if ("ERROR".equals(str)) {
- log.info("生产模式:采集器未采集到码");
- }
- //检查重码
- BillDetailPojo billDetailPojo = baseDao.findByParam(BillDetailPojo.class, "qrCode", str);
- boolean reCodeORFailed = billDetailPojo != null || (AptivApp.qrCode != null && !AptivApp.qrCode.equals(str));
- //重码或不合格返给采集器错误信号
- if (reCodeORFailed) {
- sendErrorCommand(billDetailPojo != null ? "生产模式:检测到重码!" : "生产模式:采集器采集到不合格的码");
- }
- //保存详情
- BillDetailPojo bdp = AptivApp.billDetailService.addBillDetail(AptivApp.billPojo.getId(), AptivApp.nowMaterielPojo.getId(), AptivApp.qrCode, str);
- getScanFrame().loadjtable1(bdp);
- //更新单据统计数据
- AptivApp.billService.updateBillStatistics(AptivApp.billPojo.getId(), bdp);
- log.info("成功保存码" + str);
- //设置打印状态为可打印
- // AptivApp.printStatus = true;
- //打印状态且非联机模式,重新发码
- if (AptivApp.flag && !getScanFrame().onLine) {
- int codeFlag = sendQrCode();
- if (codeFlag != 1) {
- log.info("发送码给激光机异常");
- getScanFrame().alertMsg(1, "生产码异常,请停止打印并联系管理员!");
- }
- }
- }
- /**
- * 统计当前日期打印总数
- *
- * @return
- */
- public Map<String, Object> countDayData() {
- String date = DateTimeUtil.getDateString();
- Map<String, Object> map = new HashMap<String, Object>(3);
- try {
- String sql = "SELECT SUM(number),sum(qualifiedNum),sum(UnqualifiedNum) FROM bill WHERE createTime BETWEEN '" + date + " 00:00:00' AND '" + date + " 23:59:59';";
- map = baseDao.query(sql, new MapHandler());
- log.info("统计当前日期打印总数" + map.toString());
- } catch (SQLException e) {
- log.error("统计当前日期打印总数异常:" + e);
- }
- return map;
- }
- public ScanFrame getScanFrame() {
- return scanFrame;
- }
- public void setScanFrame(ScanFrame scanFrame) {
- this.scanFrame = scanFrame;
- }
- /**
- * 检查重码
- * 判断是不是我们产的码
- * 不是我们产的码返给采集器错误信号
- * 是我们生产的那肯定是重码
- *
- * @return
- */
- public void checkReCode(String str) {
- //采到的码去找当前订单详情
- BillDetailPojo billDetailPojo = baseDao.findByParam(BillDetailPojo.class, "qrCode", str);
- sendErrorCommand(billDetailPojo == null ? "点检模式:检测到不是程序生产的码!" : "点检模式:检测到重码!");
- isReCode = billDetailPojo == null;
- javax.swing.SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- getScanFrame().alertMsg(1, isReCode ? "检测到不是程序生产的码!" : "检测到重码!");
- }
- });
- }
- /**
- * 重置激光机的数据,以实现打印完就清空的效果
- * 目前不理想,二空格仍然会被识别成二维码,需要优化方案
- */
- public void resetLaserMachine() {
- //此处的33个空格是用来清空激光机上打过的最后一条数据
- AptivApp.printMina.sendByte(AptivApp.ccu.String2ASCII(" "));
- log.info("清空激光机保留的最后一条数据");
- }
- /**
- * 重码时返给采集器错误信号
- */
- public void sendErrorCommand(String errorMsg) {
- AptivApp.collectorMina.send("R");
- log.info(errorMsg);
- }
- }
|