Commit b81df619 sunke

切换SAP,修改数据库Facility和Company

出库时如果与库位中条码不一致,不清空库位
fixed: 看板展示库位数时包含屏蔽库位
1 个父辈 dfc95b96
......@@ -3,6 +3,7 @@ package com.myproject.dao.mongo;
import com.mongodb.DBObject;
import com.myproject.bean.BaseMongoBean;
import com.myproject.bean.search.PageList;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
......@@ -58,4 +59,6 @@ public interface IMongoDao {
PageList findByQuery(Query query, PageList pageList);
MongoTemplate getMongoTemplate();
}
......@@ -216,7 +216,7 @@ public class StoragePosDaoImpl extends AbstractMongoDao implements IStoragePosDa
@Override
public List<PlateSizeBean> getStoragePosUsage(String storageId){
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(Criteria.where("storageId").is(storageId).and("enabled").is(true)),
Aggregation.match(Criteria.where("storageId").is(storageId)/*.and("enabled").is(true)*/),
Aggregation.group("w","h","used").count().as("count"),
Aggregation.project("count").and("plateSize").previousOperation()
);
......
......@@ -2,29 +2,27 @@ package com.myproject.webapp.controller.qisda;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.myproject.bean.qisda.*;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.StoragePos;
import com.myproject.bean.update.qisda.DNInfo;
import com.myproject.bean.update.qisda.DNItem;
import com.myproject.bean.update.qisda.OutInfo;
import com.myproject.bean.update.qisda.OutItem;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.bean.update.qisda.*;
import com.myproject.dao.mongo.IBarcodeDao;
import com.myproject.dao.mongo.IStoragePosDao;
import com.myproject.dao.mongo.qisda.IDNInfoDao;
import com.myproject.dao.mongo.qisda.IDNItemDao;
import com.myproject.dao.mongo.qisda.IOutInfoDao;
import com.myproject.dao.mongo.qisda.IOutItemDao;
import com.myproject.dao.mongo.qisda.*;
import com.myproject.exception.ApiException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.util.QisdaApi;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.qisda.util.OutInfoCache;
import com.myproject.webapp.controller.storage.BaseController;
import com.myproject.webapp.controller.webService.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
......@@ -40,15 +38,14 @@ import java.util.concurrent.ConcurrentHashMap;
public class QisdaController extends BaseController {
@Autowired
private DataCache dataCache;
private ICacheInfoDao cacheInfoDao;
@Autowired
private ITaskService taskService;
@Autowired
protected IBarcodeManager barcodeManager;
@Autowired
private IDataLogDao dataLogDao;
protected IBarcodeDao barcodeDao;
@Autowired
private IDNInfoDao dNInfoDao;
@Autowired
......@@ -66,6 +63,184 @@ public class QisdaController extends BaseController {
@Autowired
private IStoragePosDao storagePosDao;
private static String facilityMapping = "SL-BACHS=2111-SBACHS;" +
"CL-BACHS=2111-SBACHS;" +
"S9-BACHS=2111-SBACHS;" +
"C9-BACHS=2111-SBACHS;" +
"SJ-BACHS=2161-SBACHS;" +
"CJ-BACHS=2161-SBACHS;" +
"SM-BACHS=2112-SBACHS;" +
"CM-BACHS=2112-SBACHS;" +
"SH-BACHS=2151-SBACHS;" +
"CH-BACHS=2151-SBACHS;" +
"SQ-BACHS=2161-SBACHS;" +
"CQ-BACHS=2161-SBACHS;" +
"SD-BACHS=2161-SBACHS;" +
"CD-BACHS=2161-SBACHS;" +
"SC-BACHS=2162-SBACHS;" +
"CC-BACHS=2162-SBACHS;" +
"SS-BACHS=2121-SBACHS;" +
"CS-BACHS=2121-SBACHS;" +
"SP-BACHS=2125-SBACHS;" +
"CP-BACHS=2125-SBACHS;" +
"S5-BACHS=2191-SBACHS;" +
"C5-BACHS=2191-SBACHS;" +
"ST-BACHS=2115-SBACHS;" +
"CT-BACHS=2115-SBACHS;" +
"SI-BACHS=21C1-SBACHS;" +
"CI-BACHS=21C1-SBACHS;" +
"SY-BACHS=2116-SBACHS;" +
"CY-BACHS=2116-SBACHS;" +
"S8-BACHES=2212-SBACHES;" +
"C8-BACHES=2212-SBACHES;" +
"SG-BACHES=2219-SBACHES;" +
"CG-BACHES=2219-SBACHES;" +
"SU-BACHES=2226-SBACHES;" +
"CU-BACHES=2226-SBACHES;" +
"SJ-BACHOS=23B2-SBACHOS;" +
"CJ-BACHOS=23B2-SBACHOS;" +
"SL-BACHOS=23A1-SBACHOS;" +
"CL-BACHOS=23A1-SBACHOS;" +
"SF-BACHOS=2324-SBACHOS;" +
"CF-BACHOS=2324-SBACHOS;" +
"SW-BACHOS=2323-SBACHOS;" +
"CW-BACHOS=2323-SBACHOS;" +
"SR-BACHOS=23C1-SBACHOS;" +
"CR-BACHOS=23C1-SBACHOS;" +
"SE-BACHOS=2322-SBACHOS;" +
"CE-BACHOS=2322-SBACHOS;" +
"SB-BACHOS=232A-SBACHOS;" +
"CB-BACHOS=232A-SBACHOS;" +
"SA-BACHOS=2331-SBACHOS;" +
"CA-BACHOS=2331-SBACHOS;" +
"SZ-BACHOS=2391-SBACHOS;" +
"CZ-BACHOS=2391-SBACHOS;" +
"S4-BACHOS=23B1-SBACHOS;" +
"C4-BACHOS=23B1-SBACHOS;" +
"S9-BACHOS=23A1-SBACHOS;" +
"C9-BACHOS=23A1-SBACHOS;" +
"SN-BACHOS=23B6-SBACHOS;" +
"CN-BACHOS=23B6-SBACHOS;" +
"SU-BACHOS=2326-SBACHOS;" +
"CU-BACHOS=2326-SBACHOS;" +
"S7-BACHOS=2326-SBACHOS;" +
"C7-BACHOS=2326-SBACHOS;" +
"S3-QCPS=2453-SQCPS;" +
"C3-QCPS=2453-SQCPS;" +
"SK-QCPS=2452-SQCPS;" +
"CK-QCPS=2452-SQCPS;" +
"S6-QCPS=24C2-SQCPS;" +
"C6-QCPS=24C2-SQCPS";
private Set<String> getFacility(Boolean useNewFacility){
Set<String> facilitySet = Sets.newHashSet();
String[] facilityToCahnge = facilityMapping.split(";");
for (String item : facilityToCahnge) {
String[] itemArr = item.split("=");
String oldFacility = itemArr[0];
String newFacility = itemArr[1];
if(useNewFacility){
facilitySet.add(newFacility);
}else{
facilitySet.add(oldFacility);
}
}
return facilitySet;
}
private boolean useNewFacility(){
CacheInfo cacheInfo = cacheInfoDao.getCacheInfo("facility.new");
if(cacheInfo != null){
return Boolean.valueOf(cacheInfo.getCacheValue().toString());
}
return false;
}
private void updateDBFacility(){
String[] facilityToCahnge = facilityMapping.split(";");
for (String item : facilityToCahnge) {
String[] itemArr = item.split("=");
String oldItem = itemArr[0];
String newItem = itemArr[1];
String[] oldItemArr = oldItem.split("-");
String oldCompany = oldItemArr[1];
String oldFacility = oldItemArr[0];
String[] newItemArr = newItem.split("-");
String newCompany = newItemArr[1];
String newFacility = newItemArr[0];
log.info("更新数据库数据的"+oldItem +"为" + newItem);
Criteria barcodeCriteria = Criteria.where("appendInfo.company").is(oldCompany).and("appendInfo.facility").is(oldFacility);
Query barcodeQuery = Query.query(barcodeCriteria);
long barcodeCount = barcodeDao.countByQuery(barcodeQuery);
if(barcodeCount > 0){
log.info("更新Barcode的"+barcodeCount+"条数据"+oldItem +"为" + newItem);
Update barcodeUpdate = Update.update("appendInfo.company",newCompany).set("appendInfo.facility",newFacility);;
barcodeDao.updateMulti(barcodeQuery, barcodeUpdate);
}
Criteria posCriteria = Criteria.where("barcode.appendInfo.company").is(oldCompany).and("barcode.appendInfo.facility").is(oldFacility);
Query posQuery = Query.query(posCriteria);
long posCount = storagePosDao.countByQuery(posQuery);
if(posCount > 0){
log.info("更新StoragePos的"+posCount+"条数据"+oldItem +"为" + newItem);
Update posUpdate = Update.update("barcode.appendInfo.company",newCompany).set("barcode.appendInfo.facility",newFacility);
storagePosDao.updateMulti(posQuery,posUpdate);
}
}
}
/**
* 备份
*/
private <T> void backupTable(Class<T> entityClass){
MongoTemplate mongoTemplate = barcodeDao.getMongoTemplate();
String tableToBackup = mongoTemplate.getCollectionName(entityClass);
String backupTable = "old_"+ tableToBackup;
long count = mongoTemplate.count(new Query(), backupTable);
if(count > 0){
log.info(tableToBackup + "数据已备份,跳过");
return;
}
int page = 1;
int pageSize = 10000;
long total = 0;
log.info("开始备份"+tableToBackup+"到"+backupTable);
while(true){
Query query = new Query();
Pageable pageable = new PageRequest(page, pageSize);
query.with(pageable);
List<T> items = mongoTemplate.find(query,entityClass);
if(items.isEmpty()){
break;
}
mongoTemplate.insert(items,backupTable);
total = total + items.size();
page++;
log.info("已备份:"+ total +"条"+tableToBackup+"到"+backupTable);
}
log.info("备份"+tableToBackup+"到"+backupTable+"完成,共备份:"+total);
}
@RequestMapping("/qisda/toSap")
@ResponseBody
public String toSap(HttpServletRequest request){
log.info("开始切换SAP数据处理");
cacheInfoDao.updateCacheItem("facility.new",true);
backupTable(Barcode.class);
backupTable(StoragePos.class);
//更新
updateDBFacility();
log.info("数据备份及更新已完成,SAP切换完成");
return "数据备份及更新完成,切换SAP成功";
}
/**
* DN单收料
* @param request
......@@ -76,6 +251,9 @@ public class QisdaController extends BaseController {
//if(currentDnInfo != null){
//if(currentDnInfo.isDNIn())
//}
boolean useNewFacility = useNewFacility();
Set<String> facilitySet = getFacility(useNewFacility);
request.setAttribute("facilitySet",facilitySet);
return "qisda/dnIn";
}
......
......@@ -101,7 +101,7 @@ public class OutInfoCache {
OutInfo firstToExecuteOutInfo = findExecuteOrderHSerial(cachedOutInfos, excludeSerialList);
for (OutInfo unEndOutInfo : cachedOutInfos) {
//第一个可执行的在正常执行里判断,这里不判断
if(firstToExecuteOutInfo.gethSerial().equals(unEndOutInfo.gethSerial())){
if(firstToExecuteOutInfo != null && firstToExecuteOutInfo.gethSerial().equals(unEndOutInfo.gethSerial())){
continue;
}
//寻找未执行过的到达建议时间和必须出库时间的工单料(首盘或补料)
......
......@@ -97,24 +97,58 @@
<span class="input-group-addon"><fmt:message key="Facility"/></span>
<select class="form-control input-xlarge" data-placeholder="Select..." id="facility">
<option value=""></option>
<option value="S5-BACHS">S5-BACHS</option>
<option value="S9-BACHS">S9-BACHS</option>
<option value="SC-BACHS">SC-BACHS</option>
<option value="SI-BACHS">SI-BACHS</option>
<option value="SL-BACHS">SL-BACHS</option>
<option value="SP-BACHS">SP-BACHS</option>
<option value="SS-BACHS">SS-BACHS</option>
<option value="ST-BACHS">ST-BACHS</option>
<option value="S4-BACHOS">S4-BACHOS</option>
<option value="S7-BACHOS">S7-BACHOS</option>
<option value="S9-BACHOS">S9-BACHOS</option>
<option value="SB-BACHOS">SB-BACHOS</option>
<option value="SE-BACHOS">SE-BACHOS</option>
<option value="SJ-BACHOS">SJ-BACHOS</option>
<option value="SN-BACHOS">SN-BACHOS</option>
<option value="SU-BACHOS">SU-BACHOS</option>
<option value="SW-BACHOS">SW-BACHOS</option>
<option value="SZ-BACHOS">SZ-BACHOS</option>
<c:forEach items="${facilitySet}" var="facilityItem">
<option value="${facilityItem}">${facilityItem}</option>
</c:forEach>
<%--<option value="S5-BACHS">S5-BACHS</option>--%>
<%--<option value="S9-BACHS">S9-BACHS</option>--%>
<%--<option value="SC-BACHS">SC-BACHS</option>--%>
<%--<option value="SI-BACHS">SI-BACHS</option>--%>
<%--<option value="SL-BACHS">SL-BACHS</option>--%>
<%--<option value="SP-BACHS">SP-BACHS</option>--%>
<%--<option value="SS-BACHS">SS-BACHS</option>--%>
<%--<option value="ST-BACHS">ST-BACHS</option>--%>
<%--<option value="S4-BACHOS">S4-BACHOS</option>--%>
<%--<option value="S7-BACHOS">S7-BACHOS</option>--%>
<%--<option value="S9-BACHOS">S9-BACHOS</option>--%>
<%--<option value="SB-BACHOS">SB-BACHOS</option>--%>
<%--<option value="SE-BACHOS">SE-BACHOS</option>--%>
<%--<option value="SJ-BACHOS">SJ-BACHOS</option>--%>
<%--<option value="SN-BACHOS">SN-BACHOS</option>--%>
<%--<option value="SU-BACHOS">SU-BACHOS</option>--%>
<%--<option value="SW-BACHOS">SW-BACHOS</option>--%>
<%--<option value="SZ-BACHOS">SZ-BACHOS</option>--%>
<%--新的Facility--%>
<%--<option value="2111-TBACHS2">2111-TBACHS2</option>--%>
<%--<option value="2161-TBACHS2">2161-TBACHS2</option>--%>
<%--<option value="2112-TBACHS2">2112-TBACHS2</option>--%>
<%--<option value="2151-TBACHS2">2151-TBACHS2</option>--%>
<%--<option value="2162-TBACHS2">2162-TBACHS2</option>--%>
<%--<option value="2121-TBACHS2">2121-TBACHS2</option>--%>
<%--<option value="2125-TBACHS2">2125-TBACHS2</option>--%>
<%--<option value="2191-TBACHS2">2191-TBACHS2</option>--%>
<%--<option value="2115-TBACHS2">2115-TBACHS2</option>--%>
<%--<option value="21C1-TBACHS2">21C1-TBACHS2</option>--%>
<%--<option value="2116-TBACHS2">2116-TBACHS2</option>--%>
<%--<option value="2212-TBACHES2">2212-TBACHES2</option>--%>
<%--<option value="2219-TBACHES2">2219-TBACHES2</option>--%>
<%--<option value="2226-TBACHES2">2226-TBACHES2</option>--%>
<%--<option value="23B2-TBACHOS2">23B2-TBACHOS2</option>--%>
<%--<option value="23A1-TBACHOS2">23A1-TBACHOS2</option>--%>
<%--<option value="2324-TBACHOS2">2324-TBACHOS2</option>--%>
<%--<option value="2323-TBACHOS2">2323-TBACHOS2</option>--%>
<%--<option value="23C1-TBACHOS2">23C1-TBACHOS2</option>--%>
<%--<option value="2322-TBACHOS2">2322-TBACHOS2</option>--%>
<%--<option value="232A-TBACHOS2">232A-TBACHOS2</option>--%>
<%--<option value="2331-TBACHOS2">2331-TBACHOS2</option>--%>
<%--<option value="2391-TBACHOS2">2391-TBACHOS2</option>--%>
<%--<option value="23B1-TBACHOS2">23B1-TBACHOS2</option>--%>
<%--<option value="23B6-TBACHOS2">23B6-TBACHOS2</option>--%>
<%--<option value="2326-TBACHOS2">2326-TBACHOS2</option>--%>
<%--<option value="2453-TQCPS2">2453-TQCPS2</option>--%>
<%--<option value="2452-TQCPS2">2452-TQCPS2</option>--%>
<%--<option value="24C2-TQCPS2">24C2-TQCPS2</option>--%>
</select>
</div>
</div>
......
......@@ -378,6 +378,7 @@
var taskId = data[item].id;
var partNumber = data[item].partNumber;
var posStr = data[item].posStr;
var barcode = data[item].barcode
newTasks.push(taskId);
var options = {};
//入库
......@@ -387,7 +388,10 @@
options['icon']='fa fa-database';
if(data[item].type == 2){//出库
options['icon']='fa fa-sign-out';
showStr = "["+partNumber+"]${out_label}"+posStr;
showStr = partNumber + "["+barcode+"]${out_label}"+posStr;
}else{
options['closable'] = false;
//options['onClick']= modifyClick;
}
var status = data[item].status.toLowerCase();
......
......@@ -15,6 +15,25 @@
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">12-31</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021123116</h2>
<div class="timeline-content">
<ul>
<li>切换SAP,修改数据库Facility和Company</li>
<li>出库时如果与库位中条码不一致,不清空库位</li>
<li>fixed: 看板展示库位数时包含屏蔽库位</li>
</ul>
</div>
</div>
</li>
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">11-3</span>
</div>
<div class="timeline-icon">
......
......@@ -49,11 +49,11 @@
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-all:1.3" level="project" />
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-jcl:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-jcl:2.16.0" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.16.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.16.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.16.0" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.2.0.Beta1" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.27" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.1" level="project" />
......@@ -105,8 +105,8 @@
<orderEntry type="library" name="Maven: org.webjars:jquery:1.11.1" level="project" />
<orderEntry type="library" name="Maven: org.webjars:bootstrap-datepicker:1.3.1" level="project" />
<orderEntry type="library" name="Maven: org.webjars:bootswatch-spacelab:3.3.1+2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.logging.log4j:log4j-1.2-api:2.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.logging.log4j:log4j-web:2.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.logging.log4j:log4j-1.2-api:2.16.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.logging.log4j:log4j-web:2.16.0" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
<orderEntry type="library" name="Maven: javax.mail:mail:1.4.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:activation:1.1.1" level="project" />
......
......@@ -943,7 +943,7 @@
<javax-mail.version>1.4.1</javax-mail.version>
<javax-validation.version>1.0.0.GA</javax-validation.version>
<jboss-logging.version>3.2.0.Beta1</jboss-logging.version>
<jetty.version>9.2.1.v20140609</jetty.version>
<jetty.version>9.4.8.v20171121</jetty.version>
<jpa.version>2.1</jpa.version>
<json.version>20140107</json.version>
<jsp.version>2.1</jsp.version>
......@@ -970,5 +970,6 @@
<wicket-webjars.version>0.4.1</wicket-webjars.version>
<wro4j.version>1.7.5</wro4j.version>
<spring-data.version>1.8.0.RELEASE</spring-data.version>
<log4j2.version>2.16.0</log4j2.version>
</properties>
</project>
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!