Merge remote-tracking branch 'origin/master'

master
Yangwl 8 months ago
commit fe1cfe6eb4

@ -5,9 +5,18 @@ import java.math.BigDecimal;
public class QuantityDto {
private Long quantityFeedbackSum;
private BigDecimal workTime;
private Long useMan;
private BigDecimal useMan;
private String workorderCode;
private String machineCode;
private BigDecimal totalWorkTime;
public BigDecimal getTotalWorkTime() {
return totalWorkTime;
}
public void setTotalWorkTime(BigDecimal totalWorkTime) {
this.totalWorkTime = totalWorkTime;
}
public Long getQuantityFeedbackSum() {
return quantityFeedbackSum;
@ -25,11 +34,11 @@ public class QuantityDto {
this.workTime = workTime;
}
public Long getUseMan() {
public BigDecimal getUseMan() {
return useMan;
}
public void setUseMan(Long useMan) {
public void setUseMan(BigDecimal useMan) {
this.useMan = useMan;
}

@ -10,6 +10,8 @@ import java.util.Date;
public class MesDailyReportVo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Excel(name = "工厂编码")
private String factoryCode;
// 车间
@Excel(name = "车间编码")
private String workshopCode;
@ -27,8 +29,13 @@ public class MesDailyReportVo extends BaseEntity {
private String equipmentCode;
@Excel(name = "组别")
private String equipmentName;
@Excel(name = "品类")
private String prodType;//分类
@Excel(name = "组长")
private String teamLeaderName;//组长
@Excel(name = "工单号")
private String workorderCode;
// 工时
private BigDecimal unitWorkingHours;
private String workorderCodeSap;
@ -36,45 +43,40 @@ public class MesDailyReportVo extends BaseEntity {
private String productCode;//产品编码
@Excel(name = "产品名称")
private String productName;//产品名称
@Excel(name = "规格")
private Long spec;//规格
@Excel(name = "单位(件)")
private String unit;
@Excel(name = "计划产量(件)")
private Long quantitySplit;
@Excel(name = "实际产量(件)")
private String quantityFeedback;//实际产量(箱)
@Excel(name = "产量(PC)")
private String quantityAct;// 产量(盒)
@Excel(name = "订单完成率(%)")
private String completeRate;// 订单完成率
// 标准效率
@Excel(name = "产线标准效率(PC/H)")
private BigDecimal efficiency;
//组别
private String teamCode;
private String teamDesc;
@Excel(name = "品类")
private String prodType;//分类
@Excel(name = "组长")
private String teamLeaderName;//组长
//计划产量
// 标准用人
@Excel(name = "标准用人")
private Long useMan;
// 标准效率
@Excel(name = "产线标准效率")
private BigDecimal efficiency;
@Excel(name = "工单号")
private String workorderCode;
private BigDecimal useMan;
private String workorderName;
private String quantity;//计划产量(箱)
@Excel(name = "规格")
private Long spec;//规格
@Excel(name = "单位")
private String unit;
@Excel(name = "计划产量")
private Long quantitySplit;
@Excel(name = "实际产量")
private String quantityFeedback;//实际产量(箱)
@Excel(name = "产量")
private String quantityAct;// 产量(盒)
@Excel(name = "产线标准效率")
private String completeRate;// 订单完成率
@Excel(name = "实际用人")
private String manStandard;//实际用人
@Excel(name = "标准工时")
private String workTimeStandard;//工时-标准
@Excel(name = "实际工时")
private BigDecimal workTime;//工时-实际
@Excel(name = "产线效率")
@Excel(name = "产线效率(%)")
private String productivity;//工时-产线效率
@Excel(name = "总工时")
private String totalWorkTime;
@ -95,8 +97,6 @@ public class MesDailyReportVo extends BaseEntity {
private String equipmentTypeCode;
private String machineCode;
@Excel(name = "工厂编码")
private String factoryCode;
private BigDecimal reportRate;
public BigDecimal getReportRate() {
@ -393,11 +393,11 @@ public class MesDailyReportVo extends BaseEntity {
this.quantitySplit = quantitySplit;
}
public Long getUseMan() {
public BigDecimal getUseMan() {
return useMan;
}
public void setUseMan(Long useMan) {
public void setUseMan(BigDecimal useMan) {
this.useMan = useMan;
}

@ -180,7 +180,7 @@ public interface MesReportWorkMapper {
QuantityDto getRealQuantity(QuantityDto quantityDto);
List<QuantityDto> getSumQuantity(QuantityDto quantityDto);
QuantityDto getSumQuantity(QuantityDto quantityDto);
//当月产线产量汇总
List<Map> getmonthProductionSut(MesMonthReportVo mesMonthReportVo);

@ -425,8 +425,7 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
quantityDto.setWorkorderCode(workorderCode);
quantityDto.setMachineCode(machineCode);
QuantityDto parentMesReport = mesReportWorkMapper.getRealQuantity(quantityDto);
List<QuantityDto> sonMesReportList = mesReportWorkMapper.getSumQuantity(quantityDto);
QuantityDto sonMesReport = sonMesReportList.stream().max(Comparator.comparingLong(QuantityDto::getUseMan)).orElse(null);
QuantityDto sonMesReport = mesReportWorkMapper.getSumQuantity(quantityDto);
// 产量
Long sumQua = 0L;
@ -435,7 +434,7 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
// 实际工时
BigDecimal workTime = BigDecimal.ZERO;
// 实际用人
Long useMan = 0L;
BigDecimal useMan = BigDecimal.ZERO;
if (sonMesReport != null && sonMesReport != null) {
sumQua = sonMesReport.getQuantityFeedbackSum();
realQua = parentMesReport.getQuantityFeedbackSum();
@ -465,9 +464,8 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
.divide(workTime,2,BigDecimal.ROUND_HALF_UP);
dto.setProductivity(productivity.toString()+"%");
// 总工时 实际用人*实际工时
BigDecimal totalWorkTime = new BigDecimal(useMan)
.multiply(workTime);
dto.setTotalWorkTime(totalWorkTime.toString());
dto.setTotalWorkTime(sonMesReport.getTotalWorkTime().toString());
// 标准人均效率 实际产量/标准用人/标准工时
BigDecimal manAvgStandard = new BigDecimal(realQua)
.divide(new BigDecimal(dto.getManStandard()),4,BigDecimal.ROUND_HALF_UP)
@ -475,7 +473,7 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
dto.setManAvgStandard(manAvgStandard.toString());
// 实际人均效率 实际产量/总工时
BigDecimal manAvgActual = new BigDecimal(realQua)
.divide(totalWorkTime,2,BigDecimal.ROUND_HALF_UP);
.divide(sonMesReport.getTotalWorkTime(),2,BigDecimal.ROUND_HALF_UP);
dto.setManAvgActual(manAvgActual.toString());
// 人均效率达成率 实际人均效率/标准人均效率
BigDecimal manAvgDo = manAvgActual

@ -709,16 +709,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select sum(quantity_feedback) quantityFeedbackSum
from mes_report_work
where workorder_code = #{workorderCode} and del_flag = '0' and machine_code = #{machineCode}
and upload_status = '1'
</select>
<select id="getSumQuantity" resultType="com.op.mes.domain.dto.QuantityDto">
select
sum(quantity_feedback) quantityFeedbackSum,
sum(work_time) workTime,
use_man useMan
ROUND(sum(work_time*use_man)/sum(work_time), 2) useMan,
sum(work_time*use_man) totalWorkTime
from mes_report_work
where parent_order = #{workorderCode} and del_flag = '0' and machine_code = #{machineCode}
group by use_man
and upload_status = '1'
</select>
<select id="selectMesReportWorkList_S" parameterType="MesReportWork" resultMap="MesReportWorkResult">

@ -145,7 +145,7 @@ public class OpenController extends BaseController {
}
/**
* ===============ZL0010- :"workflowId": 26235=============
* ===============ZL0010- :"workflowId": 113454=============
* <p>
* <p>
* SQR CQ OEMCM LLLB 01MATNR MAKTX suppliernum

@ -133,6 +133,10 @@ public class ProOrderController extends BaseController {
return proOrderService.getWorkOrderList(id);
}
@GetMapping(value = "/getWorkOrderListCG/{id}")
public AjaxResult getWorkOrderListCG(@PathVariable("id") String id) {
return proOrderService.getWorkOrderListCG(id);
}
/**
*
@ -330,8 +334,26 @@ public class ProOrderController extends BaseController {
return R.ok();
}
@GetMapping("/getCanProductLine")
public List<ProOrder> getCanProductLine() {
return proOrderService.getCanProductLine();
@PostMapping("/getCanProductLine")
public ProOrder getCanProductLine(@RequestBody ProOrder proOrder) {
return proOrderService.getCanProductLine(proOrder);
}
/**辅助排产**/
@PostMapping("/autoSplitOrder")
public R autoSplitOrder(@RequestBody ProOrder proOrder) {
return proOrderService.autoSplitOrder(proOrder);
}
/**辅助排产取消**/
@PostMapping("/autoSplitOrderCancel")
public R autoSplitOrderCancel(@RequestBody ProOrder proOrder) {
return proOrderService.autoSplitOrderCancel(proOrder);
}
/**辅助排产提交**/
@PostMapping("/autoSplitOrderOk")
public R autoSplitOrderOk(@RequestBody ProOrder proOrder) {
return proOrderService.autoSplitOrderOk(proOrder);
}
}

@ -1,11 +1,31 @@
package com.op.plan.domain;
import java.math.BigDecimal;
// 订单-物料实体类
public class BaseProduct {
private String productId;
private String productCode;
private String productDescZh;
private String mtart;
private BigDecimal batchQuaStandar;
private BigDecimal umrez;
public BigDecimal getBatchQuaStandar() {
return batchQuaStandar;
}
public void setBatchQuaStandar(BigDecimal batchQuaStandar) {
this.batchQuaStandar = batchQuaStandar;
}
public BigDecimal getUmrez() {
return umrez;
}
public void setUmrez(BigDecimal umrez) {
this.umrez = umrez;
}
@Override
public String toString() {

@ -6,6 +6,24 @@ public class ProLine {
private String label;
private String lineCode;
private String lineName;
private Long efficiency;
private String dh;
public Long getEfficiency() {
return efficiency;
}
public void setEfficiency(Long efficiency) {
this.efficiency = efficiency;
}
public String getDh() {
return dh;
}
public void setDh(String dh) {
this.dh = dh;
}
public String getLineCode() {
return lineCode;

@ -1,6 +1,8 @@
package com.op.plan.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
@ -65,6 +67,78 @@ public class ProOrder extends TreeEntity {
private String productDate;
private String lineCode;
private String lineName;
private List<ProOrder> lineList;
private List<String> recommendLineList;//推荐线体
private Integer useMan;
private BigDecimal efficiency;
private String[] lineCodes;
private String routeCode;
private Integer endFlag;
private String belongWorkOrder;
public String getBelongWorkOrder() {
return belongWorkOrder;
}
public void setBelongWorkOrder(String belongWorkOrder) {
this.belongWorkOrder = belongWorkOrder;
}
public Integer getEndFlag() {
return endFlag;
}
public void setEndFlag(Integer endFlag) {
this.endFlag = endFlag;
}
public String getRouteCode() {
return routeCode;
}
public void setRouteCode(String routeCode) {
this.routeCode = routeCode;
}
public String[] getLineCodes() {
return lineCodes;
}
public void setLineCodes(String[] lineCodes) {
this.lineCodes = lineCodes;
}
public Integer getUseMan() {
return useMan;
}
public void setUseMan(Integer useMan) {
this.useMan = useMan;
}
public BigDecimal getEfficiency() {
return efficiency;
}
public void setEfficiency(BigDecimal efficiency) {
this.efficiency = efficiency;
}
public List<ProOrder> getLineList() {
return lineList;
}
public void setLineList(List<ProOrder> lineList) {
this.lineList = lineList;
}
public List<String> getRecommendLineList() {
return recommendLineList;
}
public void setRecommendLineList(List<String> recommendLineList) {
this.recommendLineList = recommendLineList;
}
public String getLineCode() {
return lineCode;

@ -1,5 +1,8 @@
package com.op.plan.domain.dto;
import com.op.plan.domain.ProOrder;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -105,6 +108,124 @@ public class ProOrderDTO {
private Integer sortNo;
private String bomBo;
private String syncUser;
private String productDate;
private String lineCode;
private String lineName;
private List<ProOrder> lineList;
private List<String> recommendLineList;//推荐线体
private Integer useMan;
private BigDecimal efficiency;
private String[] lineCodes;
private String routeCode;
private Integer endFlag;
private String belongWorkOrder;
public String getBomBo() {
return bomBo;
}
public void setBomBo(String bomBo) {
this.bomBo = bomBo;
}
public String getSyncUser() {
return syncUser;
}
public void setSyncUser(String syncUser) {
this.syncUser = syncUser;
}
public String getProductDate() {
return productDate;
}
public void setProductDate(String productDate) {
this.productDate = productDate;
}
public String getLineCode() {
return lineCode;
}
public void setLineCode(String lineCode) {
this.lineCode = lineCode;
}
public String getLineName() {
return lineName;
}
public void setLineName(String lineName) {
this.lineName = lineName;
}
public List<ProOrder> getLineList() {
return lineList;
}
public void setLineList(List<ProOrder> lineList) {
this.lineList = lineList;
}
public List<String> getRecommendLineList() {
return recommendLineList;
}
public void setRecommendLineList(List<String> recommendLineList) {
this.recommendLineList = recommendLineList;
}
public Integer getUseMan() {
return useMan;
}
public void setUseMan(Integer useMan) {
this.useMan = useMan;
}
public BigDecimal getEfficiency() {
return efficiency;
}
public void setEfficiency(BigDecimal efficiency) {
this.efficiency = efficiency;
}
public String[] getLineCodes() {
return lineCodes;
}
public void setLineCodes(String[] lineCodes) {
this.lineCodes = lineCodes;
}
public String getRouteCode() {
return routeCode;
}
public void setRouteCode(String routeCode) {
this.routeCode = routeCode;
}
public Integer getEndFlag() {
return endFlag;
}
public void setEndFlag(Integer endFlag) {
this.endFlag = endFlag;
}
public String getBelongWorkOrder() {
return belongWorkOrder;
}
public void setBelongWorkOrder(String belongWorkOrder) {
this.belongWorkOrder = belongWorkOrder;
}
public Integer getCarNum() {
return carNum;
}

@ -238,4 +238,18 @@ public interface ProOrderMapper {
int updateCloseOrderBatchById(@Param("orderIds")String[] orderIds);
List<ProOrder> getCanProductLine();
List<ProOrder> getSelectLineLevel1(ProOrder proOrder);
List<ProOrderWorkorderBatch> selectBatchCodesByIdCG(String workorderId);
int deleteAutoSplitWork(String orderCode);
int deleteAutoSplitWorkBatch(String orderCode);
int updateAutoSplitWorkBatch(String orderCode);
int updateAutoSplitWork(String orderCode);
int updateAutoSplitOrder(String orderCode);
}

@ -89,4 +89,6 @@ public interface ProOrderWorkorderBatchMapper {
List<String> checkBatchCodeByWorkOrderIds(@Param("workorderIds")String[] workorderIds,@Param("newbatchs") List<String> newbatchs);
List<ProLine> getProdLineList();
int insertWorkorderBatchs(@Param("list") List<ProOrderWorkorderBatch> workBatchs);
}

@ -9,6 +9,7 @@ import com.op.system.api.domain.dto.MesPrepareDetailDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -216,5 +217,19 @@ public interface ProOrderWorkorderMapper {
int updateMesReportWorkBatch(MesReportWorkBatchDTO mesReportWorkBatchDTO);
int updateCheckTaskBatch(CheckTaskBatchDTO checkTaskBatchDTO);
ProLine getLineProductInfo(ProOrder proOrder);
String getProcessCode(String routeCode);
int insertWorkorders(@Param("list") List<ProOrderWorkorder> workorders);
BaseProduct getProductInfo(ProOrder proOrder);
BigDecimal getQuaRatio(String productCode);
List<ProOrderWorkorder> selectFirWorkOrderCG(String id);
List<ProOrderWorkorder> selectChildWorkOrderCG(String workorderCode);
}

@ -146,5 +146,13 @@ public interface IProOrderService {
String checkRepeatBatchCodes(SplitOrderDTO splitOrderDTO);
List<ProOrder> getCanProductLine();
ProOrder getCanProductLine(ProOrder proOrder);
R autoSplitOrder(ProOrder proOrder);
AjaxResult getWorkOrderListCG(String id);
R autoSplitOrderCancel(ProOrder proOrder);
R autoSplitOrderOk(ProOrder proOrder);
}

@ -416,6 +416,99 @@ public class ProOrderServiceImpl implements IProOrderService {
}
}
/**辅助排产结果查看**/
@Override
@DS("#header.poolName")
public AjaxResult getWorkOrderListCG(String id) {
// 通过订单id查询所有母工单信息list
List<ProOrderWorkorder> proOrderWorkorderList = proOrderWorkorderMapper.selectFirWorkOrderCG(id);
for (ProOrderWorkorder proOrderWorkorder : proOrderWorkorderList) {
formatProOrderWorkorderCG(proOrderWorkorder);
}
return success(proOrderWorkorderList);
}
@Override
@DS("#header.poolName")
public R autoSplitOrderCancel(ProOrder proOrder) {
ProOrder order = proOrder;
/**pro_order_workorder_batch**/
int n = proOrderMapper.deleteAutoSplitWorkBatch(proOrder.getOrderCode());
logger.info("n:"+n);
/**pro_order_workorder**/
int m = proOrderMapper.deleteAutoSplitWork(proOrder.getOrderCode());
logger.info("m:"+m);
return R.ok();
}
@Override
@DS("#header.poolName")
public R autoSplitOrderOk(ProOrder proOrder) {
ProOrder order = proOrder;
/**pro_order_workorder_batch**/
int n = proOrderMapper.updateAutoSplitWorkBatch(proOrder.getOrderCode());
logger.info("n:"+n);
/**pro_order_workorder**/
int m = proOrderMapper.updateAutoSplitWork(proOrder.getOrderCode());
logger.info("m:"+m);
/**pro_order**/
int s = proOrderMapper.updateAutoSplitOrder(proOrder.getOrderCode());
logger.info("s:"+s);
return R.ok();
}
/**
*
*
* @param proOrderWorkorder
*/
private void formatProOrderWorkorderCG(ProOrderWorkorder proOrderWorkorder) {
StringBuilder prodLineName = new StringBuilder("");
StringBuilder equipCods = new StringBuilder("'");
JSONArray codeArray = JSONArray.parseArray(proOrderWorkorder.getProdLineCode());
for(int c=0;c<codeArray.size();c++){
equipCods.append(codeArray.getJSONArray(c).getString(1));
equipCods.append("','");
}
Map<String,CascaderDTO> equipMap = proOrderMapper.getEquipInfoByCodes(equipCods.substring(1));//设备字典
for (int c = 0; c < codeArray.size(); c++) {
String equipCode = codeArray.getJSONArray(c).getString(1);
prodLineName.append(equipMap.get(equipCode).getLabel() + ",");
}
proOrderWorkorder.setProdLineCode(prodLineName.toString());
// 通过工单id查询批次号
List<ProOrderWorkorderBatch> batchCodeList = proOrderMapper.selectBatchCodesByIdCG(proOrderWorkorder.getWorkorderId());
List<StringBuilder> batchCodes = new ArrayList<>();
List<StringBuilder> batchNums = new ArrayList<>();
// 格式化数据
for (ProOrderWorkorderBatch batchCode : batchCodeList) {
batchCodes.add(new StringBuilder(batchCode.getBatchCode()).append(";"));
batchNums.add(new StringBuilder(batchCode.getBatchQuantity()+"").append(";"));
}
proOrderWorkorder.setBatchCodeList(batchCodes);
proOrderWorkorder.setBatchNumList(batchNums);
// 通过母工单workorder_id查询子工单
List<ProOrderWorkorder> childWorkorders = proOrderWorkorderMapper.selectChildWorkOrderCG(proOrderWorkorder.getWorkorderCode());
if (!childWorkorders.isEmpty()) {
for (ProOrderWorkorder childWorkorder : childWorkorders) {
formatProOrderWorkorderCG(childWorkorder); // 递归处理子工单
}
proOrderWorkorder.setChildren(childWorkorders); // 设置子工单列表
}
}
/**
*
*
@ -1220,15 +1313,246 @@ public class ProOrderServiceImpl implements IProOrderService {
@Override
@DS("#header.poolName")
public List<ProOrder> getCanProductLine() {
return proOrderMapper.getCanProductLine();
public ProOrder getCanProductLine(ProOrder proOrder) {
ProOrder dto = new ProOrder();
//所有线体
List<ProOrder> lineList = proOrderMapper.getCanProductLine();
dto.setLineList(lineList);
//推荐线体
List<String> recommendLineList = getRecommendLines(proOrder);
dto.setRecommendLineList(recommendLineList);
return dto;
}
@Override
@DS("#header.poolName")
public R autoSplitOrder(ProOrder proOrder) {
Date nowTime = DateUtils.getNowDate();//公共时间
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String key = "#header.poolName";
proOrder.setFactoryCode(request.getHeader(key.substring(8)).replace("ds_",""));
proOrder.setCreateTime(nowTime);
//订单总量
proOrder.setQuantitySplit(proOrder.getQuantitySplit()==null?0L:proOrder.getQuantitySplit());
Long orderQua = proOrder.getQuantity()-proOrder.getQuantitySplit();
//有几个设备就有几个工单
for(int i=0;i<proOrder.getLineCodes().length;i++){
if(orderQua == 0L){
logger.info("线体产能满足生产");
break;
}
List<ProOrderWorkorder> workorders = new ArrayList<>();
proOrder.setLineCode(proOrder.getLineCodes()[i]);
ProLine plineInfo = proOrderWorkorderMapper.getLineProductInfo(proOrder);//线体母单产品产能和线体代码
if(plineInfo==null){
logger.error("线体"+proOrder.getLineCodes()[i]+"产能"+plineInfo.getEfficiency()+"无法生产");
break;
}
Long efficiency = plineInfo.getEfficiency();
if(efficiency < orderQua){
proOrder.setQuantitySplit(efficiency);
}else{
proOrder.setQuantitySplit(orderQua);
}
orderQua = orderQua - proOrder.getQuantitySplit();//消耗订单总数量
if(CollectionUtils.isEmpty(proOrder.getChildren())){//1层订单
proOrder.setEndFlag(1);
}
int endCode = getEndCode(proOrder.getId());
String belongWorkOrder = proOrder.getOrderCode()+"-"+endCode;
proOrder.setBelongWorkOrder(belongWorkOrder);
proOrder.setWorkerOrder(belongWorkOrder);
proOrder.setParentOrder("0");
ProOrderWorkorder pworkOrder = getWorkOrderByOrder(proOrder,proOrder);//TODO;
//父级
workorders.add(pworkOrder);
/**pro_order_workorder_batch**/
String parentWorkOrder = belongWorkOrder;
ProOrder order = proOrder;
while(!CollectionUtils.isEmpty(order.getChildren())){
// 解决方案就是将list再次转为json串然后由json串再转为list
String s = JSON.toJSONString(order.getChildren());
List<ProOrder> oragainzation = JSON.parseArray(s, ProOrder.class);
ProOrder sonOrder = oragainzation.get(0);
sonOrder.setBelongWorkOrder(belongWorkOrder);
String sworkOrderCode = sonOrder.getOrderCode()+"-"+(++endCode);
sonOrder.setBelongWorkOrder(belongWorkOrder);
sonOrder.setWorkerOrder(sworkOrderCode);
sonOrder.setParentOrder(parentWorkOrder);
sonOrder.setQuantitySplit(sonOrder.getQuantity());
if(CollectionUtils.isEmpty(sonOrder.getChildren())){
sonOrder.setEndFlag(1);
}
ProOrderWorkorder sworkOrder = getWorkOrderByOrder(sonOrder,proOrder);//TODO;
workorders.add(sworkOrder);
order = sonOrder;
parentWorkOrder = sworkOrderCode;
}
/**pro_order_workorder**/
if(!CollectionUtils.isEmpty(workorders)){
//计算子单拆分数量
for(int wm=0;wm<workorders.size();wm++){
BigDecimal wquaRatio = null;
if(wm != 0){//子单需要折算数量
wquaRatio = new BigDecimal(workorders.get(wm).getQuantitySplit())
.divide(new BigDecimal(workorders.get(0).getQuantitySplit()),2,BigDecimal.ROUND_UP);//proOrderWorkorderMapper.getQuaRatio(workorders.get(m-1).getProductCode());
workorders.get(wm).setQuantitySplit(wquaRatio.multiply(new BigDecimal(workorders.get(0).getQuantitySplit()))
.longValue());
}
}
int pm = proOrderWorkorderMapper.insertWorkorders(workorders);
System.out.println("pm:"+pm);
}
/**拆批次**/
proOrder.setProdSpc(plineInfo.getDh());//借用字段
List<ProOrderWorkorderBatch> workorderBatches0 = getBatchList(proOrder);//TODO;
List<ProOrderWorkorderBatch> workBatchs = new ArrayList<>();
for(int m=0;m<workorders.size();m++){
ProOrderWorkorder work = workorders.get(m);
ProOrderWorkorderBatch wBatch = null;
BigDecimal quaRatio = null;
if(m != 0){//子单需要折算数量
quaRatio = new BigDecimal(workorders.get(m).getQuantitySplit())
.divide(new BigDecimal(workorders.get(0).getQuantitySplit()),2,BigDecimal.ROUND_UP);//proOrderWorkorderMapper.getQuaRatio(workorders.get(m-1).getProductCode());
}
for(ProOrderWorkorderBatch workBatch:workorderBatches0){
wBatch = new ProOrderWorkorderBatch();
wBatch.setBatchId(IdUtils.fastSimpleUUID());
wBatch.setCreateBy(SecurityUtils.getUsername());
wBatch.setCreateTime(proOrder.getCreateTime());
if(m != 0 && quaRatio!=null){//母单的数量已有
wBatch.setBatchQuantity(quaRatio.multiply(new BigDecimal(workBatch.getBatchQuantity())).longValue());
}else{
wBatch.setBatchQuantity(workBatch.getBatchQuantity());
}
wBatch.setWorkorderId(work.getWorkorderId());
wBatch.setBatchCode(workBatch.getBatchCode());
workBatchs.add(wBatch);
}
}
/**pro_order_workorder_batch**/
if(!CollectionUtils.isEmpty(workBatchs)) {
int pn = proOrderWorkorderBatchMapper.insertWorkorderBatchs(workBatchs);
System.out.println("pn:"+pn);
}
}
return R.ok();
}
/**
*
* @param proOrder
* @param pOrder
* @return
*/
protected ProOrderWorkorder getWorkOrderByOrder(ProOrder proOrder,ProOrder pOrder){
ProOrderWorkorder workOrder = new ProOrderWorkorder();
workOrder.setWorkorderId(IdUtils.fastSimpleUUID());
workOrder.setWorkorderCode(proOrder.getWorkerOrder());
workOrder.setBelongWorkOrder(proOrder.getBelongWorkOrder());
workOrder.setOrderId(proOrder.getId());
workOrder.setOrderCode(proOrder.getOrderCode());
workOrder.setProductCode(proOrder.getProdCode());
workOrder.setProductName(proOrder.getProdDesc());
workOrder.setUnit(proOrder.getUnit());
workOrder.setQuantitySplit(proOrder.getQuantitySplit());
workOrder.setRouteCode(pOrder.getRouteCode());
String gxCode = "CP";//proOrderWorkorderMapper.getProcessCode(proOrder.getRouteCode());
String[][] lineCodeArray = {{gxCode,pOrder.getLineCode()}};
workOrder.setProdLineCode(JSONArray.toJSONString(lineCodeArray));
workOrder.setProductDate(DateUtils.dateTime("yyyy-MM-dd",pOrder.getProductDate()));
//workOrder.setShiftId();
workOrder.setParentOrder(proOrder.getParentOrder());
workOrder.setStatus("w0");
workOrder.setCreateBy(SecurityUtils.getUsername());
workOrder.setCreateTime(pOrder.getCreateTime());
workOrder.setProdType(proOrder.getOrderType());
workOrder.setFactoryCode(pOrder.getFactoryCode());
workOrder.setEndFlag(proOrder.getEndFlag());
workOrder.setSortNo(pOrder.getSortNo());
return workOrder;
}
//靠母单先生成批次模板
protected List<ProOrderWorkorderBatch> getBatchList(ProOrder proOrder){
List<ProOrderWorkorderBatch> workorderBatches = new ArrayList<>();
Long pworkOrderQua = proOrder.getQuantitySplit();//母工单数量
BaseProduct batchQua0 = proOrderWorkorderMapper.getProductInfo(proOrder);//母单标准批次产能和几合一
ProOrderWorkorderBatch workBatch = null;
while(pworkOrderQua>0){
workBatch = new ProOrderWorkorderBatch();
workBatch.setCreateBy(SecurityUtils.getUsername());
workBatch.setCreateTime(proOrder.getCreateTime());
if(batchQua0.getBatchQuaStandar().longValue()<= pworkOrderQua){
workBatch.setBatchQuantity(batchQua0.getBatchQuaStandar().longValue());
}else{
workBatch.setBatchQuantity(pworkOrderQua);
}
workorderBatches.add(workBatch);
pworkOrderQua = pworkOrderQua - batchQua0.getBatchQuaStandar().longValue();
}
//获取批次号集合
List<String> batchCodes = StringUtils.batchAutoCreate(proOrder.getFactoryCode(),
proOrder.getProdSpc(),
DateUtils.dateTime("yyyy-MM-dd",proOrder.getProductDate()),
proOrder.getAtrr2().substring(proOrder.getAtrr2().length()-1),
"0",workorderBatches.size());
for(int n=0;n<workorderBatches.size();n++){
workorderBatches.get(n).setBatchCode(batchCodes.get(n));
}
return workorderBatches;
}
/**
* 线
* 1线
* 2线
* @param proOrder
*/
protected List<String> getRecommendLines(ProOrder proOrder){
List<String> lines = new ArrayList<>();
List<ProOrder> proLines = proOrderMapper.getSelectLineLevel1(proOrder);
//订单总量
proOrder.setQuantitySplit(proOrder.getQuantitySplit()==null?0L:proOrder.getQuantitySplit());
BigDecimal orderQuality = new BigDecimal(proOrder.getQuantity()).subtract(new BigDecimal(proOrder.getQuantitySplit()));
BigDecimal consumeQuality = BigDecimal.ZERO;
for(ProOrder pline:proLines){
lines.add(pline.getLineCode());
consumeQuality = consumeQuality.add(pline.getEfficiency());
if(consumeQuality.compareTo(orderQuality)>=0){
break;
}
}
return lines;
}
public static void main(String args[]){
String arrayStr = "[[\"GX01\",\"LG1\"],[\"GX01\",\"LG2\"],[\"GX02\",\"S1\"],[\"GX02\",\"S2\"],[\"GX03\",\"HF01\"],[\"GX04\",\"SPJ01\"]]";
JSONArray jsonArray = JSONArray.parseArray(arrayStr);
for(int c=0;c<jsonArray.size();c++){
System.out.println(jsonArray.getJSONArray(c).getString(1));
// String arrayStr = "[[\"GX01\",\"LG1\"],[\"GX01\",\"LG2\"],[\"GX02\",\"S1\"],[\"GX02\",\"S2\"],[\"GX03\",\"HF01\"],[\"GX04\",\"SPJ01\"]]";
// JSONArray jsonArray = JSONArray.parseArray(arrayStr);
// for(int c=0;c<jsonArray.size();c++){
// System.out.println(jsonArray.getJSONArray(c).getString(1));
// }
// BigDecimal a = new BigDecimal("100");
// BigDecimal b = new BigDecimal("100");
// System.out.println(a.compareTo(b));
int m=1;
while(m<3){
++m;
}
System.out.println(m);
}
}

@ -123,12 +123,18 @@
SELECT powb.batch_code batchCode,
powb.batch_quantity batchQuantity
FROM pro_order_workorder_batch powb
LEFT JOIN pro_order_workorder pow
ON powb.workorder_id = pow.workorder_id
WHERE pow.workorder_id = #{workorderId} and powb.del_flag = '0'
LEFT JOIN pro_order_workorder pow ON powb.workorder_id = pow.workorder_id
WHERE pow.workorder_id = #{workorderId} and powb.del_flag = '0' and pow.del_flag = '0'
order by powb.batch_code
</select>
<select id="selectBatchCodesByIdCG" resultType="com.op.plan.domain.ProOrderWorkorderBatch">
SELECT powb.batch_code batchCode,
powb.batch_quantity batchQuantity
FROM pro_order_workorder_batch powb
LEFT JOIN pro_order_workorder pow ON powb.workorder_id = pow.workorder_id
WHERE pow.workorder_id = #{workorderId} and powb.del_flag = '2' and pow.del_flag = '2'
order by powb.batch_code
</select>
<select id="selectPackageLine" resultType="com.op.plan.domain.ProLine">
SELECT equipment_id AS 'key', equipment_name AS 'label'
FROM base_equipment
@ -207,6 +213,21 @@
where equ.equipment_type_code = 'equ_type_bzx'
and equ.del_flag = '0' and equ.equipment_status = '1'
</select>
<select id="getSelectLineLevel1" resultType="com.op.plan.domain.ProOrder">
select mlp.line_code lineCode,
mlp.use_man useMan,
mlp.efficiency efficiency,
pt.n
from mes_line_product mlp
left join (
select count(0) n,line_code
from mes_line_product where del_flag='0'
GROUP BY line_code
)pt on mlp.line_code = pt.line_code
where mlp.del_flag = '0' and product_code = #{prodCode}
order by mlp.use_man desc,pt.n desc
</select>
<insert id="insertProOrder" parameterType="ProOrder">
insert into pro_order
@ -395,6 +416,25 @@
#{id}
</foreach>
</update>
<update id="updateAutoSplitWorkBatch">
update pro_order_workorder_batch set del_flag = '0'
where workorder_id in(select workorder_id from pro_order_workorder
where del_flag= '2' and belong_work_order like concat(#{orderCode},'-%'))
and del_flag='2'
</update>
<update id="updateAutoSplitWork">
update pro_order_workorder set del_flag = '0'
where del_flag= '2' and belong_work_order like concat(#{orderCode},'-%')
</update>
<update id="updateAutoSplitOrder">
update pro_order
set status = 'o2',
quantity_split = quantity
where del_flag= '0' and order_code in(
select order_code from pro_order_workorder
where del_flag= '0' and belong_work_order like concat(#{orderCode},'-%')
)
</update>
<delete id="deleteProOrderById" parameterType="String">
update pro_order
@ -410,4 +450,13 @@
#{id}
</foreach>
</delete>
<delete id="deleteAutoSplitWork">
delete from pro_order_workorder where del_flag= '2' and belong_work_order like concat(#{orderCode},'-%')
</delete>
<delete id="deleteAutoSplitWorkBatch">
delete from pro_order_workorder_batch
where workorder_id in(select workorder_id from pro_order_workorder
where del_flag= '2' and belong_work_order like concat(#{orderCode},'-%'))
and del_flag='2'
</delete>
</mapper>

@ -125,6 +125,18 @@
<if test="factoryCode != null">#{factoryCode},</if>
</trim>
</insert>
<insert id="insertWorkorderBatchs">
INSERT INTO pro_order_workorder_batch (
batch_id,workorder_id,batch_code,batch_quantity,status,
create_by,create_time,factory_code,del_flag
)VALUES
<foreach collection="list" item="d" index="index" separator=",">
(
#{d.batchId},#{d.workorderId},#{d.batchCode},#{d.batchQuantity},'0',
#{d.createBy},#{d.createTime}, #{d.factoryCode},'2'
)
</foreach>
</insert>
<update id="updateProOrderWorkorderBatch" parameterType="ProOrderWorkorderBatch">
update pro_order_workorder_batch

@ -212,12 +212,22 @@
and del_flag = '0'
</select>
<select id="selectFirWorkOrderCG" parameterType="String" resultMap="ProOrderWorkorderResult">
<include refid="selectProOrderWorkorderVo"/>
where order_id = #{id}
and del_flag = '2'
</select>
<select id="selectChildWorkOrder" parameterType="String" resultMap="ProOrderWorkorderResult">
<include refid="selectProOrderWorkorderVo"/>
WHERE parent_order = #{workorderCode}
and del_flag = '0'
</select>
<select id="selectChildWorkOrderCG" parameterType="String" resultMap="ProOrderWorkorderResult">
<include refid="selectProOrderWorkorderVo"/>
WHERE parent_order = #{workorderCode}
and del_flag = '2'
</select>
<select id="selectWorkOrderByCode" resultMap="ProOrderWorkorderResult">
<include refid="selectProOrderWorkorderVo"/>
where workorder_code = #{workorderCode}
@ -637,6 +647,30 @@
where pow.belong_work_order = #{workorderCode} and pow.del_flag = '0'
order by pow.workorder_code_sap desc
</select>
<select id="getLineProductInfo" resultType="com.op.plan.domain.ProLine">
select mlp.efficiency efficiency,
bp.dh
from mes_line_product mlp
left join base_equipment bp on mlp.line_code = bp.equipment_code
where mlp.del_flag = '0' and product_code = #{prodCode}
and mlp.line_code = #{lineCode} and bp.del_flag = '0'
</select>
<select id="getProcessCode" resultType="java.lang.String">
select prp.process_code from pro_route_process prp
left join pro_route pr on prp.route_id = pr.route_id
where pr.route_code = #{routeCode}
</select>
<select id="getProductInfo" resultType="com.op.plan.domain.BaseProduct">
select umrez,
mvgr5_nm batchQuaStandar
from base_product
where del_flag = '0' and product_code = #{prodCode}
</select>
<select id="getQuaRatio" resultType="java.math.BigDecimal">
select umrez
from base_product
where del_flag = '0' and product_code = #{prodCode}
</select>
<insert id="createPrepareDetails">
insert into mes_prepare_detail
@ -738,6 +772,24 @@
</foreach>
</insert>
<insert id="insertWorkorders">
INSERT INTO pro_order_workorder (
workorder_id,workorder_code,order_id,order_code,product_code,
product_name,unit,quantity_split,route_code,prod_line_code,
product_date,parent_order, status,create_by,create_time,
prod_type,factory_code,end_flag,del_flag,sort_no,
belong_work_order
)VALUES
<foreach collection="list" item="d" index="index" separator=",">
(
#{d.workorderId},#{d.workorderCode},#{d.orderId},#{d.orderCode},#{d.productCode},
#{d.productName},#{d.unit},#{d.quantitySplit},#{d.routeCode},#{d.prodLineCode},
#{d.productDate},#{d.parentOrder},#{d.status},#{d.createBy},#{d.createTime},
#{d.prodType}, #{d.factoryCode},#{d.endFlag},'2',#{d.sortNo},
#{d.belongWorkOrder}
)
</foreach>
</insert>
<update id="updateProOrderWorkorder" parameterType="ProOrderWorkorder">
update pro_order_workorder

@ -1,12 +1,16 @@
package com.op.quality.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import com.op.quality.domain.QcCheckProject;
import com.op.quality.domain.QcMaterialGroup;
import com.op.quality.domain.QcProjectType;
import com.op.common.core.domain.ExcelCol;
import com.op.common.core.utils.poi.ExcelMapUtil;
import com.op.quality.domain.*;
import com.op.quality.service.IQcMaterialGroupService;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -19,12 +23,12 @@ import org.springframework.web.bind.annotation.RestController;
import com.op.common.log.annotation.Log;
import com.op.common.log.enums.BusinessType;
import com.op.common.security.annotation.RequiresPermissions;
import com.op.quality.domain.QcCheckTypeProject;
import com.op.quality.service.IQcCheckTypeProjectService;
import com.op.common.core.web.controller.BaseController;
import com.op.common.core.web.domain.AjaxResult;
import com.op.common.core.utils.poi.ExcelUtil;
import com.op.common.core.web.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* Controller
@ -127,4 +131,78 @@ public class QcCheckTypeProjectController extends BaseController {
List<QcProjectType> list = qcCheckTypeProjectService.getProjectOptions(qcCheckProject);
return list;
}
@PostMapping("/importTemplate")
@Log(title = "生成订单模板", businessType = BusinessType.EXPORT)
public void importTemplate(HttpServletResponse response) throws IOException {
ArrayList<ExcelCol> excelCols = new ArrayList<>();
excelCols.add(new ExcelCol("线体编码", "lineCode", 20));
excelCols.add(new ExcelCol("产品编码", "productCode", 20));
excelCols.add(new ExcelCol("产品名称", "productName", 20));
excelCols.add(new ExcelCol("标准用人", "useMan", 20));
excelCols.add(new ExcelCol("标准效率", "efficiency", 20));
excelCols.add(new ExcelCol("标准工时", "attr1", 20));
String titleName = "线体产品信息导入";
SXSSFWorkbook workbook = null;
try {
//设置响应头
response.setHeader("Content-disposition",
"attachment; filename=" + titleName);
response.setContentType("application/octet-stream;charset=UTF-8");
ServletOutputStream outputStream = response.getOutputStream();
//调用工具类
workbook = ExcelMapUtil.initWorkbook(titleName, null, excelCols, null);
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (workbook != null) {
workbook.dispose();
}
}
}
@PostMapping("/importMaterailTemplate")
public void importMaterailTemplate(HttpServletResponse response) throws IOException {
ArrayList<ExcelCol> excelCols = new ArrayList<>();
excelCols.add(new ExcelCol("质检物料组名称", "groupName", 50));
excelCols.add(new ExcelCol("物料编码", "materialCode", 50));
excelCols.add(new ExcelCol("物料名称", "materialName", 50));
String titleName = "质检物料组物料信息导入";
SXSSFWorkbook workbook = null;
try {
//设置响应头
response.setHeader("Content-disposition",
"attachment; filename=" + titleName);
response.setContentType("application/octet-stream;charset=UTF-8");
ServletOutputStream outputStream = response.getOutputStream();
//调用工具类
workbook = ExcelMapUtil.initWorkbook(titleName, null, excelCols, null);
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (workbook != null) {
workbook.dispose();
}
}
}
/**
*
*
* @param file
* @return
* @throws Exception
*/
@Log(title = "导入线体产品信息", businessType = BusinessType.IMPORT)
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file) throws Exception {
// 创建接收对象
ExcelUtil<QcMaterialGroupDetail> util = new ExcelUtil<>(QcMaterialGroupDetail.class);
// 接收表格信息
List<QcMaterialGroupDetail> orderList = util.importExcel(file.getInputStream());
return qcCheckTypeProjectService.importOrder(orderList);
}
}

@ -26,10 +26,13 @@ public class QcMaterialGroupDetail extends BaseEntity {
private String groupId;
//物料组编码
private String groupCode;
//物料组名称
@Excel(name = "质检物料组名称")
private String groupName;
/**
*
*/
@Excel(name = "物料")
@Excel(name = "物料编码")
private String materialCode;
/**
@ -50,6 +53,14 @@ public class QcMaterialGroupDetail extends BaseEntity {
@Excel(name = "工厂编码")
private String factoryCode;
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
/**
* 10
*/

@ -105,6 +105,24 @@ public class QcStaticTable extends BaseEntity {
private List<HashMap> dxData;
private List<HashMap> details;
private String[] projectNoArray;
private BigDecimal upperDiff;
private BigDecimal downDiff;
public BigDecimal getUpperDiff() {
return upperDiff;
}
public void setUpperDiff(BigDecimal upperDiff) {
this.upperDiff = upperDiff;
}
public BigDecimal getDownDiff() {
return downDiff;
}
public void setDownDiff(BigDecimal downDiff) {
this.downDiff = downDiff;
}
public String getShiftId() {
return shiftId;

@ -3,10 +3,7 @@ package com.op.quality.mapper;
import java.util.List;
import java.util.Map;
import com.op.quality.domain.QcCheckProject;
import com.op.quality.domain.QcCheckTaskDetail;
import com.op.quality.domain.QcCheckTypeProject;
import com.op.quality.domain.QcProjectType;
import com.op.quality.domain.*;
import com.op.system.api.domain.SysDictData;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
@ -84,4 +81,6 @@ public interface QcCheckTypeProjectMapper {
List<QcProjectType> getProjectOptions(QcCheckProject qcCheckProject);
QcProjectType getProductGroup(String materialCode);
QcMaterialGroupDetail selectExist(QcMaterialGroupDetail materialGroupDetail);
}

@ -66,4 +66,6 @@ public interface QcMaterialGroupMapper {
public List<QcMaterialGroup> getMaterialChildrenList(QcMaterialGroup qcMaterialGroup);
public List<QcMaterialGroup> validationData(String id);
String selectGroupIdByName(String groupName);
}

@ -77,4 +77,6 @@ public interface QcStaticTableMapper {
List<QcStaticTable> getDLTableTitle(QcStaticTable qcStaticTable);
List<QcStaticTable> getProjectList(String checkType);
QcStaticTable getUpAndDown(QcStaticTable qcStaticTable);
}

@ -2,8 +2,10 @@ package com.op.quality.service;
import java.util.List;
import com.op.common.core.web.domain.AjaxResult;
import com.op.quality.domain.QcCheckProject;
import com.op.quality.domain.QcCheckTypeProject;
import com.op.quality.domain.QcMaterialGroupDetail;
import com.op.quality.domain.QcProjectType;
/**
@ -71,4 +73,6 @@ public interface IQcCheckTypeProjectService {
int submitProjects(List<QcCheckTypeProject> typeProjects);
List<QcProjectType> getProjectOptions(QcCheckProject qcCheckProject);
AjaxResult importOrder(List<QcMaterialGroupDetail> orderList);
}

@ -7,10 +7,15 @@ import java.util.Map;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.op.common.core.utils.DateUtils;
import com.op.common.core.utils.ServletUtils;
import com.op.common.core.utils.uuid.IdUtils;
import com.op.common.core.web.domain.AjaxResult;
import com.op.common.security.utils.SecurityUtils;
import com.op.quality.domain.QcCheckProject;
import com.op.quality.domain.QcMaterialGroupDetail;
import com.op.quality.domain.QcProjectType;
import com.op.quality.mapper.QcMaterialGroupDetailMapper;
import com.op.quality.mapper.QcMaterialGroupMapper;
import com.op.system.api.domain.SysDictData;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -18,11 +23,15 @@ import org.springframework.stereotype.Service;
import com.op.quality.mapper.QcCheckTypeProjectMapper;
import com.op.quality.domain.QcCheckTypeProject;
import com.op.quality.service.IQcCheckTypeProjectService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import static com.op.common.core.web.domain.AjaxResult.error;
import static com.op.common.core.web.domain.AjaxResult.success;
/**
* Service
*
@ -34,6 +43,12 @@ public class QcCheckTypeProjectServiceImpl implements IQcCheckTypeProjectService
@Autowired
private QcCheckTypeProjectMapper qcCheckTypeProjectMapper;
@Autowired
private QcMaterialGroupDetailMapper qcMaterialGroupDetailMapper;
@Autowired
private QcMaterialGroupMapper qcMaterialGroupMapper;
/**
*
*
@ -162,5 +177,87 @@ public class QcCheckTypeProjectServiceImpl implements IQcCheckTypeProjectService
return qcCheckTypeProjectMapper.getProjectOptions(qcCheckProject);
}
@Override
@DS("#header.poolName")
@Transactional
public AjaxResult importOrder(List<QcMaterialGroupDetail> mgDetails) {
String GroupId = qcMaterialGroupMapper.selectGroupIdByName(mgDetails.get(0).getGroupName());
if(StringUtils.isBlank(GroupId)){
return error("没有找到对应的质检物料组");
}
for(QcMaterialGroupDetail mgDetail:mgDetails){
String factoryCode = ServletUtils.getRequest().getHeader("PoolName").replace("ds_","");
mgDetail.setFactoryCode(factoryCode);
mgDetail.setCreateBy(SecurityUtils.getUsername());
mgDetail.setCreateTime(DateUtils.getNowDate());
mgDetail.setGroupId(GroupId);
}
// 数据校验
AjaxResult checkResult = checkImportOrder(mgDetails);
// 如果数据校验成功
if (checkResult.isSuccess()) {
String info = syncImportFunc(mgDetails);
return success("信息导入完成。其中导入失败订单:"+info);
}else{
return checkResult;
}
}
/**
*
*
* @param mgDetails
*/
public AjaxResult checkImportOrder(List<QcMaterialGroupDetail> mgDetails) {
// 传入对象不能为空
if (mgDetails.size() == 0 || com.op.common.core.utils.StringUtils.isNull(mgDetails)) {
return error(500, "信息不能为空!信息导入失败!");
}
// 循环遍历校验数据是否为空
for (QcMaterialGroupDetail mesLine : mgDetails) {
// 物料组名称
if (!StringUtils.isNotBlank(mesLine.getGroupName())) {
return error(500, "物料组名称不能为空!信息导入失败!");
}
// 物料号
if (!StringUtils.isNotBlank(mesLine.getMaterialCode())) {
return error(500, "物料编码不能为空!信息导入失败!");
}
// 物料名称
if (!StringUtils.isNotBlank(mesLine.getMaterialName())) {
return error(500, "物料名称不能为空!信息导入失败!");
}
}
return success();
}
public String syncImportFunc(List<QcMaterialGroupDetail> mesLineList){
String failOrder = "";
for (QcMaterialGroupDetail mesLine:mesLineList) {
String msg = syncFunc(mesLine);
if(StringUtils.isNotBlank(msg)){
failOrder += msg+",";
}
}
return failOrder;
}
@Transactional(rollbackFor = Exception.class)
public String syncFunc(QcMaterialGroupDetail materialGroupDetail){
String failOrder = "";
Date nowDate = DateUtils.getNowDate();
QcMaterialGroupDetail orderExit = qcCheckTypeProjectMapper.selectExist(materialGroupDetail);
if (orderExit==null) {//不存在就插入
materialGroupDetail.setId(IdUtils.fastSimpleUUID());
materialGroupDetail.setCreateTime(nowDate);
qcMaterialGroupDetailMapper.insertQcMaterialGroupDetail(materialGroupDetail);
}
return failOrder;
}
}

@ -154,7 +154,7 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
public List<OAInfo> getOAInfoList(QcCheckUnqualified qcCheckUnqualified) {
logger.info("查看流程Id"+ qcCheckUnqualified.getTaskId());
AjaxResult oaR = remoteOpenService.GetOaNodeInfo(qcCheckUnqualified.getTaskId());
logger.info("流程Id 26235:"+ JSONObject.toJSONString(oaR));
logger.info("流程Id 113454:"+ JSONObject.toJSONString(oaR));
List<OAInfo> infoList = new ArrayList<>();
if((int)oaR.get("code")==200){
infoList=JSONArray.parseArray(oaR.get("msg").toString(),OAInfo.class);
@ -173,7 +173,7 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
* \"MAKTX\":\"榄菊加大盘强力型蚊香(60装)现货纸箱(2201)\",\"suppliernum\":\"0000102951\",
* \"supplier\":\"广东高顺印刷包装有限公司\",\"CHARG\":\"null\",\"comeQty\":\"1117\",
* \"DW\":\"ST\",\"JYBH\":\"202404180042\",\"BJY\":\"202404180042\",\"WLLY\":\"2\",
* \"memo\":\"不合格\",\"PZGLBZG\":\"不合格\"}","user":"999999","requestLevel":0,"workflowId":26235}
* \"memo\":\"不合格\",\"PZGLBZG\":\"不合格\"}","user":"999999","requestLevel":0,"workflowId":113454}
*/
private AjaxResult createLLOA(QcCheckUnqualified task){
@ -184,7 +184,7 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
paramMap.put("user",task.getUser());//提交人工号
paramMap.put("requestLevel",0);//流程紧急度
paramMap.put("requestName","ZL0010-来料检验不合格控制流程");//流程名称
paramMap.put("workflowId",26235);//该流程对应的唯- workFlowld
paramMap.put("workflowId",113454);//该流程对应的唯- workFlowld
StringBuffer mainObject = new StringBuffer();
mainObject.append("{");
@ -206,9 +206,9 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
mainObject.append("}");
paramMap.put("mainObject",mainObject.toString());
logger.info("流程Id 26235:"+ JSONObject.toJSONString(paramMap));
logger.info("流程Id 113454:"+ JSONObject.toJSONString(paramMap));
AjaxResult oaR = remoteOpenService.OAInspection(paramMap);
logger.info("流程Id 26235:"+ JSONObject.toJSONString(oaR));
logger.info("流程Id 113454:"+ JSONObject.toJSONString(oaR));
return oaR;
}
/*OA
@ -274,7 +274,7 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
"user": "999999",
"requestLevel": "0", 0
"requestName": "ZL0030-品质异常流程-智能制造-2024-01-17产品名称:榄菊高级型蚊香(60装)",
"workflowId": "26256",
"workflowId": "113455",
"mainObject": "{
"CPMC":"榄菊高级型蚊香(60装)", *
"CPBM":"10101000115", *
@ -307,7 +307,7 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
paramMap.put("user",SecurityUtils.getUsername());//提交人工号
paramMap.put("requestLevel",0);//流程紧急度
paramMap.put("requestName","ZL0030-品质异常流程-智能制造-"+DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",detailInfo.getIncomeTime())+"(产品名称:"+detailInfo.getMaterialName()+"");//流程名称
paramMap.put("workflowId",26256);//该流程对应的唯- workFlowld
paramMap.put("workflowId",113455);//该流程对应的唯- workFlowld
StringBuffer mainObject = new StringBuffer();
mainObject.append("{");
@ -333,9 +333,9 @@ public class QcCheckUnqualifiedServiceImpl implements IQcCheckUnqualifiedService
mainObject.append("}");
paramMap.put("mainObject",mainObject.toString());
logger.info("流程Id 26256:"+ JSONObject.toJSONString(paramMap));
logger.info("流程Id 113455:"+ JSONObject.toJSONString(paramMap));
AjaxResult oaR = remoteOpenService.OAInspection(paramMap);
logger.info("流程Id 26256:"+ JSONObject.toJSONString(oaR));
logger.info("流程Id 113455:"+ JSONObject.toJSONString(oaR));
return oaR;
}
}

@ -541,6 +541,20 @@ public class QcStaticTableServiceImpl implements IQcStaticTableService {
dxData.add(result);
}
dto.setDxData(dxData);
//给折线图取上下限制
if(qcStaticTable.getProjectNoArray()!=null){
qcStaticTable.setProjectNo(qcStaticTable.getProjectNoArray()[0]);
QcStaticTable upandown = qcStaticTableMapper.getUpAndDown(qcStaticTable);
if(upandown!=null){
dto.setUpperDiff(upandown.getUpperDiff());
dto.setDownDiff(upandown.getDownDiff());
}else{
dto.setUpperDiff(BigDecimal.ZERO);
dto.setDownDiff(BigDecimal.ZERO);
}
}
return dto;
}

@ -436,8 +436,8 @@
left join base_equipment be on be.equipment_code = pow.workorder_name and be.equipment_type_code = 'equ_type_bzx'
where pow.del_flag = '0'
and pow.status = #{status} and pow.parent_order = '0'
and (pow.product_date = CONVERT(varchar(10),GETDATE(), 120)
or pow.product_date = CONVERT(varchar(10),DATEADD(DAY, -1, GETDATE()), 120))
<!--and (pow.product_date = CONVERT(varchar(10),GETDATE(), 120)-->
and pow.product_date >= CONVERT(varchar(10),DATEADD(DAY, -1, GETDATE()), 120)
</select>
<select id="getOrderWorksW3" resultType="com.op.quality.domain.QcCheckTaskProduce">
select top 1

@ -315,4 +315,8 @@
where bp.product_code like concat('%',#{materialCode},'%')
and bp.del_flag = '0'
</select>
<select id="selectExist" resultType="com.op.quality.domain.QcMaterialGroupDetail">
select material_name from qc_material_group_detail
where group_id = #{groupId} and material_code = #{materialCode} and del_flag = '0'
</select>
</mapper>

@ -196,7 +196,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into qc_check_task(
record_id,check_no,income_batch_no,order_no,
material_code,material_name,quality,unit,
supplier_code,supplier_name,income_time,
supplier_code,supplier_name,income_time,check_loc,
check_status,
create_by,create_time,factory_code,del_flag,
check_type,noOk_quality,sample_quality,type_code,order_type
@ -204,7 +204,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
#{recordId},concat(check_no,FORMAT(GETDATE(),'HHmmss')),income_batch_no ,order_no ,
material_code,material_name,quality ,unit ,
supplier_code,supplier_name,income_time,
supplier_code,supplier_name,income_time,check_loc,
'0',
#{createBy},#{createTime},factory_code,del_flag,
check_type,noOk_quality,sample_quality,type_code ,'reCheckCS'

@ -127,4 +127,7 @@
from qc_check_type_project
where group_id = #{id}
</select>
<select id="selectGroupIdByName" resultType="java.lang.String">
select id from qc_material_group where group_name = #{groupName} and del_flag = '0'
</select>
</mapper>

@ -394,4 +394,10 @@
where qctp.type_id = #{checkType} and qctp.property_code = '1'
and qctp.material_code is null and qcp.rule_name is not null
</select>
<select id="getUpAndDown" resultType="com.op.quality.domain.QcStaticTable">
select ISNULL(upper_diff,0) upperDiff,
ISNULL(down_diff, 0) downDiff
from qc_check_type_project where project_id = #{projectNo}
and type_id = #{checkType}
</select>
</mapper>

Loading…
Cancel
Save