This commit is contained in:
2022-10-14 17:43:27 +08:00
26 changed files with 1639 additions and 162 deletions

View File

@@ -25,6 +25,7 @@
输入.workprocedure_id TYPEAS s_string
输入.is_produceuse TYPEAS s_string
输入.devicerecord_id TYPEAS s_string
输入.device_level TYPEAS s_string
输入.classIds TYPEAS f_string
输入.deptIds TYPEAS f_string
@@ -72,6 +73,9 @@
OPTION 输入.status <> ""
equipmentfile.status = 输入.status
ENDOPTION
OPTION 输入.device_level <> ""
equipmentfile.device_level = 输入.device_level
ENDOPTION
OPTION 输入.use_deptid <> ""
equipmentfile.use_deptid in 输入.deptIds
ENDOPTION

View File

@@ -33,7 +33,8 @@ public enum MaterOptTypeEnum {
SPARE(22, "23", "备品备件", "('1503644361789935616')", ""),
SBGZ(23, "24", "设备故障", "('1541964046385942528')", ""),
TJJ_AND_OTHER(24, "25", "添加剂和其他有色金属粉", "('1503644361697660928','1503644362838511616')", ""),
BJID(25, "26", "备品备件", "1503644361789935616", "");
BJID(25, "26", "备品备件", "1503644361789935616", ""),
THW_AND_GF_AND_TJJ(26, "27", "碳化钨、钴粉、添加剂", "('1503644361664106496','1503644362192588800','1503644361697660928')", "");

View File

@@ -0,0 +1,78 @@
package org.nl.wms.basedata.pdm.rest;
import com.alibaba.fastjson.JSONObject;
import oracle.ucp.proxy.annotation.Post;
import org.nl.wms.basedata.pdm.service.WastecchangeService;
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
import org.springframework.data.domain.Pageable;
import lombok.RequiredArgsConstructor;
import org.nl.annotation.Log;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
/**
* @author liuxy
* @date 2022-10-13
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "软废碳平衡修正维护管理")
@RequestMapping("/api/wastecchange")
@Slf4j
public class WastecchangeController {
private final WastecchangeService wastecchangeService;
@GetMapping
@Log("查询软废碳平衡修正维护")
@ApiOperation("查询软废碳平衡修正维护")
//@PreAuthorize("@el.check('wastecchange:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(wastecchangeService.queryAll(whereJson, page), HttpStatus.OK);
}
@PostMapping
@Log("新增软废碳平衡修正维护")
@ApiOperation("新增软废碳平衡修正维护")
//@PreAuthorize("@el.check('wastecchange:add')")
public ResponseEntity<Object> create(@Validated @RequestBody WastecchangeDto dto) {
wastecchangeService.create(dto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改软废碳平衡修正维护")
@ApiOperation("修改软废碳平衡修正维护")
//@PreAuthorize("@el.check('wastecchange:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody WastecchangeDto dto) {
wastecchangeService.update(dto);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除软废碳平衡修正维护")
@ApiOperation("删除软废碳平衡修正维护")
//@PreAuthorize("@el.check('wastecchange:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
wastecchangeService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@Log("确认")
@ApiOperation("确认")
@PostMapping("/confirm")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
wastecchangeService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,81 @@
package org.nl.wms.basedata.pdm.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author liuxy
* @description 服务接口
* @date 2022-10-13
**/
public interface WastecchangeService {
/**
* 查询数据分页
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> queryAll(Map whereJson, Pageable page);
/**
* 查询所有数据不分页
*
* @param whereJson 条件参数
* @return List<WastecchangeDto>
*/
List<WastecchangeDto> queryAll(Map whereJson);
/**
* 根据ID查询
*
* @param change_id ID
* @return Wastecchange
*/
WastecchangeDto findById(Long change_id);
/**
* 根据编码查询
*
* @param code code
* @return Wastecchange
*/
WastecchangeDto findByCode(String code);
/**
* 创建
*
* @param dto /
*/
void create(WastecchangeDto dto);
/**
* 编辑
*
* @param dto /
*/
void update(WastecchangeDto dto);
/**
* 多选删除
*
* @param ids /
*/
void deleteAll(Long[] ids);
/**
* 确认
*
* @param whereJson /
*/
void confirm(JSONObject whereJson);
}

View File

@@ -0,0 +1,84 @@
package org.nl.wms.basedata.pdm.service.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.io.Serializable;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
/**
* @description /
* @author liuxy
* @date 2022-10-13
**/
@Data
public class WastecchangeDto implements Serializable {
/** 记录标识 */
/** 防止精度丢失 */
@JsonSerialize(using= ToStringSerializer.class)
private Long change_id;
/** 物料标识 */
private Long material_id;
/** 工艺类型 */
private String tech_type;
/** CF */
private BigDecimal cf_qty;
/** YZ */
private BigDecimal yz_qty;
/** CX */
private BigDecimal cx_qty;
/** YC */
private BigDecimal yc_qty;
/** JY */
private BigDecimal jy_qty;
/** LT */
private BigDecimal lt_qty;
/** SJ */
private BigDecimal sj_qty;
/** YS */
private BigDecimal ys_qty;
/** DS */
private BigDecimal ds_qty;
/** CQX */
private BigDecimal cqx_qty;
/** XQX */
private BigDecimal xqx_qty;
/** QX */
private BigDecimal qx_qty;
/** JCF */
private BigDecimal jcf_qty;
/** TB */
private BigDecimal tb_qty;
/** YCR */
private BigDecimal ycr_qty;
/** GZ */
private BigDecimal gz_qty;
/** 创建人 */
private Long create_id;
/** 创建人姓名 */
private String create_name;
/** 创建时间 */
private String create_time;
}

View File

@@ -0,0 +1,387 @@
package org.nl.wms.basedata.pdm.service.impl;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import org.apache.poi.util.StringUtil;
import org.nl.exception.BadRequestException;
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
import org.nl.wms.basedata.pdm.service.WastecchangeService;
import org.nl.wms.basedata.pdm.service.dto.WastecchangeDto;
import org.nl.wql.WQL;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Pageable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.utils.SecurityUtils;
import org.nl.wql.core.bean.ResultBean;
import org.nl.wql.core.bean.WQLObject;
import org.nl.wql.util.WqlUtil;
import lombok.extern.slf4j.Slf4j;
import cn.hutool.core.util.ObjectUtil;
/**
* @author liuxy
* @description 服务实现
* @date 2022-10-13
**/
@Service
@RequiredArgsConstructor
@Slf4j
public class WastecchangeServiceImpl implements WastecchangeService {
@Override
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
String material_code = MapUtil.getStr(whereJson, "material_code");
HashMap<String, String> map = new HashMap<>();
map.put("flag", "1");
if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", "%" + material_code + "%");
map.put("class_ids", MaterOptTypeEnum.THW.getClass_idStr());
JSONObject json = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mater.material_code ASC");
return json;
}
@Override
public List<WastecchangeDto> queryAll(Map whereJson) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_wastecchange");
JSONArray arr = wo.query().getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WastecchangeDto.class);
return null;
}
@Override
public WastecchangeDto findById(Long change_id) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_wastecchange");
JSONObject json = wo.query("change_id = '" + change_id + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(json)) {
return json.toJavaObject(WastecchangeDto.class);
}
return null;
}
@Override
public WastecchangeDto findByCode(String code) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_wastecchange");
JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(json)) {
return json.toJavaObject(WastecchangeDto.class);
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(WastecchangeDto dto) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getNickName();
String now = DateUtil.now();
dto.setChange_id(IdUtil.getSnowflake(1, 1).nextId());
dto.setCreate_id(currentUserId);
dto.setCreate_name(nickName);
dto.setCreate_time(now);
WQLObject wo = WQLObject.getWQLObject("pdm_bi_wastecchange");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.insert(json);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(WastecchangeDto dto) {
WastecchangeDto entity = this.findById(dto.getChange_id());
if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getNickName();
String now = DateUtil.now();
WQLObject wo = WQLObject.getWQLObject("pdm_bi_wastecchange");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.update(json);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Long[] ids) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getNickName();
String now = DateUtil.now();
WQLObject wo = WQLObject.getWQLObject("pdm_bi_wastecchange");
for (Long change_id : ids) {
JSONObject param = new JSONObject();
param.put("change_id", String.valueOf(change_id));
param.put("is_delete", "1");
param.put("update_optid", currentUserId);
param.put("update_optname", nickName);
param.put("update_time", now);
wo.update(param);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void confirm(JSONObject whereJson) {
/*
* 修改软废碳平衡
* 1找软废软废类型为负压脱蜡 则根据条件:
* a.粉料牌号包含 "新"、 软废编码包含软废类型后缀 例如:软废编码 like "-F"、 未删除且启用
* b.查询此软废的产品bom表的明细中是否包含此碳化钨
* 2.找软废对应的PG粉
* a.软废编码去掉 "-CF"
* 3.修改软废碳平衡:
* a.软废碳平衡=PG粉碳平衡+CF软废修正值
* 4.若工艺为氢气脱蜡:软废粉料牌号为不包含"新",其它都一样
*/
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase");
WQLObject extTab = WQLObject.getWQLObject("MD_ME_ProducMaterialExt");
WQLObject wasTab = WQLObject.getWQLObject("PDM_BI_WasteCChange");
// 1.将16中软废类型 放到一个数组当中
JSONArray rf_arr = this.contentShift(whereJson);
// 2.找软废
String tech_type = whereJson.getString("tech_type");
for (int i = 0; i < rf_arr.size(); i++) {
JSONObject json_rf_type = rf_arr.getJSONObject(i);
HashMap<String, String> map = new HashMap<>();
map.put("flag", "2");
map.put("material_id", whereJson.getString("material_id"));
map.put("code", "%-" + json_rf_type.getString("name"));
JSONArray jsonRfArr = new JSONArray();
if (StrUtil.equals(tech_type, "01")) {
// 负压脱蜡
jsonRfArr = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).process().getResultJSONArray(0);
} else {
// 氢气脱蜡
map.put("flag", "3");
jsonRfArr = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).process().getResultJSONArray(0);
}
// 根据软废找到PG粉
for (int j = 0; j < jsonRfArr.size(); j++) {
JSONObject json = jsonRfArr.getJSONObject(j);
String materiai_code = json.getString("material_code");
String pg_code = materiai_code.substring(0, materiai_code.indexOf("-" + json_rf_type.getString("name")));
JSONObject jsonMater_cp = materTab.query("material_code = '" + pg_code + "'").uniqueResult(0);
JSONObject jsonExt_cp = extTab.query("material_id = '" + jsonMater_cp.getString("material_id") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonExt_cp)) throw new BadRequestException("PG粉扩展属性不存在" + pg_code);
// 修改软废碳平衡:软废碳平衡=PG粉碳平衡+CF软废修正值
double rf_c_balance = NumberUtil.add(jsonExt_cp.getDoubleValue("c_balance"), json_rf_type.getDoubleValue("value"));
JSONObject jsonExt_rf = extTab.query("material_id = '" + json.getString("material_id") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonExt_rf))
throw new BadRequestException("软废扩展属性不存在" + jsonExt_rf.getString("material_code"));
jsonExt_rf.put("c_balance", rf_c_balance);
extTab.update(jsonExt_rf);
}
}
// 3.插入软废碳平衡修正表
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getNickName();
// 先删除在插入
JSONObject jsonObject = wasTab.query("material_id = '" + whereJson.getString("material_id") + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject)) wasTab.delete("material_id = '"+whereJson.getString("material_id")+"'");
JSONObject jsonWas = new JSONObject();
jsonWas.put("change_id", IdUtil.getSnowflake(1,1).nextId());
jsonWas.put("material_id", whereJson.getString("material_id"));
jsonWas.put("tech_type", whereJson.getString("tech_type"));
jsonWas.put("cf_qty", whereJson.getDoubleValue("cf_qty"));
jsonWas.put("yz_qty", whereJson.getDoubleValue("yz_qty"));
jsonWas.put("cx_qty", whereJson.getDoubleValue("cx_qty"));
jsonWas.put("yc_qty", whereJson.getDoubleValue("yc_qty"));
jsonWas.put("jy_qty", whereJson.getDoubleValue("jy_qty"));
jsonWas.put("lt_qty", whereJson.getDoubleValue("lt_qty"));
jsonWas.put("sj_qty", whereJson.getDoubleValue("sj_qty"));
jsonWas.put("ys_qty", whereJson.getDoubleValue("ys_qty"));
jsonWas.put("ds_qty", whereJson.getDoubleValue("ds_qty"));
jsonWas.put("cqx_qty", whereJson.getDoubleValue("cqx_qty"));
jsonWas.put("xqx_qty", whereJson.getDoubleValue("xqx_qty"));
jsonWas.put("qx_qty", whereJson.getDoubleValue("qx_qty"));
jsonWas.put("jcf_qty", whereJson.getDoubleValue("jcf_qty"));
jsonWas.put("tb_qty", whereJson.getDoubleValue("tb_qty"));
jsonWas.put("ycr_qty", whereJson.getDoubleValue("ycr_qty"));
jsonWas.put("gz_qty", whereJson.getDoubleValue("gz_qty"));
jsonWas.put("create_id", currentUserId);
jsonWas.put("create_name", nickName);
jsonWas.put("create_time", DateUtil.now());
wasTab.insert(jsonWas);
}
@Transactional(rollbackFor = Exception.class)
public JSONArray contentShift(JSONObject json) {
JSONArray array = new JSONArray();
JSONObject json_CF = new JSONObject();
json_CF.put("name", "CF");
if (ObjectUtil.isEmpty(json.getString("cf_qty"))) {
json_CF.put("value", "0");
} else {
json_CF.put("value", json.getString("cf_qty"));
}
array.add(json_CF);
JSONObject json_YZ = new JSONObject();
json_YZ.put("name", "YZ");
if (ObjectUtil.isEmpty(json.getString("yz_qty"))) {
json_YZ.put("value", "0");
} else {
json_YZ.put("value", json.getString("yz_qty"));
}
array.add(json_YZ);
JSONObject json_CX = new JSONObject();
json_CX.put("name", "CX");
if (ObjectUtil.isEmpty(json.getString("cx_qty"))) {
json_CX.put("value", "0");
} else {
json_CX.put("value", json.getString("cx_qty"));
}
array.add(json_CX);
JSONObject json_YC = new JSONObject();
json_YC.put("name", "YC");
if (ObjectUtil.isEmpty(json.getString("yc_qty"))) {
json_YC.put("value", "0");
} else {
json_YC.put("value", json.getString("yc_qty"));
}
array.add(json_YC);
JSONObject json_JY = new JSONObject();
json_JY.put("name", "JY");
if (ObjectUtil.isEmpty(json.getString("jy_qty"))) {
json_JY.put("value", "0");
} else {
json_JY.put("value", json.getString("jy_qty"));
}
array.add(json_JY);
JSONObject json_LT = new JSONObject();
json_LT.put("name", "LT");
if (ObjectUtil.isEmpty(json.getString("lt_qty"))) {
json_LT.put("value", "0");
} else {
json_LT.put("value", json.getString("lt_qty"));
}
array.add(json_LT);
JSONObject json_SJ = new JSONObject();
json_SJ.put("name", "SJ");
if (ObjectUtil.isEmpty(json.getString("sj_qty"))) {
json_SJ.put("value", "0");
} else {
json_SJ.put("value", json.getString("sj_qty"));
}
array.add(json_SJ);
JSONObject json_YS = new JSONObject();
json_YS.put("name", "YS");
if (ObjectUtil.isEmpty(json.getString("ys_qty"))) {
json_YS.put("value", "0");
} else {
json_YS.put("value", json.getString("ys_qty"));
}
array.add(json_YS);
JSONObject json_DS = new JSONObject();
json_DS.put("name", "DS");
if (ObjectUtil.isEmpty(json.getString("ds_qty"))) {
json_DS.put("value", "0");
} else {
json_DS.put("value", json.getString("ds_qty"));
}
array.add(json_DS);
JSONObject json_CQX = new JSONObject();
json_CQX.put("name", "CQX");
if (ObjectUtil.isEmpty(json.getString("cqx_qty"))) {
json_CQX.put("value", "0");
} else {
json_CQX.put("value", json.getString("cqx_qty"));
}
array.add(json_CQX);
JSONObject json_XQX = new JSONObject();
json_XQX.put("name", "XQX");
if (ObjectUtil.isEmpty(json.getString("xqx_qty"))) {
json_XQX.put("value", "0");
} else {
json_XQX.put("value", json.getString("xqx_qty"));
}
array.add(json_XQX);
JSONObject json_QX = new JSONObject();
json_QX.put("name", "QX");
if (ObjectUtil.isEmpty(json.getString("qx_qty"))) {
json_QX.put("value", "0");
} else {
json_QX.put("value", json.getString("qx_qty"));
}
array.add(json_QX);
JSONObject json_JCF = new JSONObject();
json_JCF.put("name", "JCF");
if (ObjectUtil.isEmpty(json.getString("jcf_qty"))) {
json_JCF.put("value", "0");
} else {
json_JCF.put("value", json.getString("jcf_qty"));
}
array.add(json_JCF);
JSONObject json_TB = new JSONObject();
json_TB.put("name", "TB");
if (ObjectUtil.isEmpty(json.getString("tb_qty"))) {
json_TB.put("value", "0");
} else {
json_TB.put("value", json.getString("tb_qty"));
}
array.add(json_TB);
JSONObject json_YCR = new JSONObject();
json_YCR.put("name", "YCR");
if (ObjectUtil.isEmpty(json.getString("ycr_qty"))) {
json_YCR.put("value", "0");
} else {
json_YCR.put("value", json.getString("ycr_qty"));
}
array.add(json_YCR);
JSONObject json_GZ = new JSONObject();
json_GZ.put("name", "GZ");
if (ObjectUtil.isEmpty(json.getString("gz_qty"))) {
json_GZ.put("value", "0");
} else {
json_GZ.put("value", json.getString("gz_qty"));
}
array.add(json_GZ);
return array;
}
}

View File

@@ -0,0 +1,159 @@
[交易说明]
交易名: 软废碳平衡修正维护分页查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.material_code TYPEAS s_string
输入.class_ids TYPEAS f_string
输入.material_id TYPEAS s_string
输入.code TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
PAGEQUERY
SELECT
mater.material_code,
mater.material_id,
mater.material_name,
mater.material_model,
chan.change_id,
chan.tech_type,
chan.cf_qty,
chan.yz_qty,
chan.cx_qty,
chan.yc_qty,
chan.jy_qty,
chan.lt_qty,
chan.sj_qty,
chan.ys_qty,
chan.ds_qty,
chan.cqx_qty,
chan.xqx_qty,
chan.qx_qty,
chan.jcf_qty,
chan.tb_qty,
chan.ycr_qty,
chan.gz_qty,
chan.create_id,
chan.create_name,
chan.create_time
FROM
md_me_materialbase mater
LEFT JOIN PDM_BI_WasteCChange chan ON mater.material_id = chan.material_id
WHERE
mater.is_delete = '0'
AND mater.is_used = '1'
OPTION 输入.class_ids <> ""
mater.material_type_id = 输入.class_ids
ENDOPTION
OPTION 输入.material_code <> ""
(mater.material_code like 输入.material_code or
mater.material_name like 输入.material_code)
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
mater.*,
ext.old_mark
FROM
(
SELECT
b.bom_id,
a.bom_code,
a.material_code,
a.material_id
FROM
MD_PD_ProductBOMDtl b
LEFT JOIN MD_PD_ProductBOM a ON a.bom_id = b.bom_id
WHERE
a.is_used = "1"
AND a.is_delete = '0'
AND b.material_id = 输入.material_id
GROUP BY b.bom_id
) AS bomDtl
LEFT JOIN md_me_materialbase mater on mater.material_id = bomDtl.material_id
LEFT JOIN MD_ME_ProducMaterialExt ext ON mater.material_id = ext.material_id
WHERE
mater.is_delete = '0'
AND mater.is_used = '1'
AND ext.old_mark like "%新%"
AND mater.material_code like 输入.code
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
mater.*,
ext.old_mark
FROM
(
SELECT
b.bom_id,
a.bom_code,
a.material_code,
a.material_id
FROM
MD_PD_ProductBOMDtl b
LEFT JOIN MD_PD_ProductBOM a ON a.bom_id = b.bom_id
WHERE
a.is_used = "1"
AND a.is_delete = '0'
AND b.material_id = 输入.material_id
GROUP BY b.bom_id
) AS bomDtl
LEFT JOIN md_me_materialbase mater on mater.material_id = bomDtl.material_id
LEFT JOIN MD_ME_ProducMaterialExt ext ON mater.material_id = ext.material_id
WHERE
mater.is_delete = '0'
AND mater.is_used = '1'
AND ext.old_mark not like "%新%"
AND mater.material_code like 输入.code
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -77,6 +77,9 @@
(device.device_code like 输入.device_code or
device.device_name like 输入.device_code)
ENDOPTION
OPTION 输入.device_id <> ""
device.device_id = 输入.device_id
ENDOPTION
OPTION 输入.pcsn <> ""
WorkOrder.pcsn like 输入.pcsn
ENDOPTION

View File

@@ -15,6 +15,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/**
@@ -117,4 +119,12 @@ public class AcceptFormulaController {
public ResponseEntity<Object> autoCalculation(@RequestParam Map whereJson) {
return new ResponseEntity<>(acceptFormulaService.autoCalculation(whereJson),HttpStatus.OK);
}
@Log("打印excel")
@ApiOperation("打印excel")
@GetMapping(value = "/print")
public ResponseEntity<Object> preview(HttpServletResponse response, @RequestParam Map whereJson) throws IOException {
acceptFormulaService.preview(response,whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pf.service.dto.ProductbomDto;
import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -103,4 +105,7 @@ public interface AcceptFormulaService {
* 提交
*/
JSONArray autoCalculation(Map whereJson);
void preview(HttpServletResponse response, Map whereJson) throws IOException;
}

View File

@@ -3,23 +3,32 @@ package org.nl.wms.pf.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.spire.xls.Workbook;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.exception.BadRequestException;
import org.nl.modules.security.service.dto.JwtUserDto;
import org.nl.modules.system.service.impl.ParamServiceImpl;
import org.nl.modules.system.util.CodeUtil;
import org.nl.utils.SecurityUtils;
import org.nl.utils.SpringContextHolder;
import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
import org.nl.wms.pf.service.AcceptFormulaService;
import org.nl.wms.pf.service.AcceptMarkService;
import org.nl.wms.pf.service.dto.ProductbomDto;
import org.nl.wms.test.service.dto.DataDto;
import org.nl.wql.WQL;
import org.nl.wql.core.bean.WQLObject;
import org.nl.wql.util.WqlUtil;
@@ -27,10 +36,11 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/**
@@ -354,6 +364,118 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void preview(HttpServletResponse response, Map whereJson) throws IOException {
WQLObject formMstTab = WQLObject.getWQLObject("QL_TEST_AcceptFormula"); // 小线试验配方主表
WQLObject formDtlTab = WQLObject.getWQLObject("QL_TEST_AcceptFormulaDtl"); // 小线试验配方明细表
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表
WQLObject factMstTab = WQLObject.getWQLObject("QL_TEST_FactoryWarrantyMst"); // 厂家质保书主表
WQLObject factDtlTab = WQLObject.getWQLObject("QL_TEST_FactoryWarrantyDtl"); // 厂家质保书明细表
WQLObject markTab = WQLObject.getWQLObject("QL_TEST_AcceptMark"); // 验收牌号表
WQLObject classTab = WQLObject.getWQLObject("md_pb_classstandard"); // 基本分类表表
String formula_id = MapUtil.getStr(whereJson, "formula_id");
JSONObject jsonFormMst = formMstTab.query("formula_id = '" + formula_id + "'").uniqueResult(0);
JSONObject jsonMater = materTab.query("material_id = '" + jsonFormMst.getString("material_id") + "'").uniqueResult(0);
// 创建workbook 并获取模板路径
Workbook workbook = new Workbook();
String template = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("ACCEPT_EXCEL_PATH").getValue();
workbook.loadFromFile(template);
// 设置文件名和防止乱码现象
String fileName = URLEncoder.encode(jsonMater.getString("material_code")+"-"+jsonFormMst.getString("material_pcsn"), "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename*=UTf-8''"+fileName+".xlsx");
// 获取输出流
ServletOutputStream outputStream = response.getOutputStream();
// 创建模板工作簿
ExcelWriter workBook = EasyExcel.write(outputStream, DataDto.class).withTemplate(template).build();
// 获取第一个sheet
WriteSheet sheet = EasyExcel.writerSheet().build();
/*
* 单组填充
*/
HashMap<String, Object> oneMap = new HashMap<>();
//型号
oneMap.put("material_name", jsonMater.getString("material_name"));
// 厂家
JSONObject jsonFactMst = factMstTab.query("material_id = '" + jsonFormMst.getString("material_id") + "' and pcsn = '" + jsonFormMst.getString("material_pcsn") + "' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonFactMst)) oneMap.put("manufactor", jsonFactMst.getString("manufactor"));
// 实验牌号
JSONObject jsonMark= markTab.query("mark_id = '" + jsonFormMst.getString("mark_id") + "' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonMark)) {
oneMap.put("mark_code", jsonMark.getString("mark_code"));
// 酒精体积:液料比*开单总重
double bar_bulk = NumberUtil.mul(jsonFormMst.getDoubleValue("confirm_qty"), jsonMark.getDoubleValue("liquid_rate"));
oneMap.put("bar_bulk", NumberUtil.round(bar_bulk, 3).toString());
// 合金球重量:球料比*开单总重
double ball_rate_2 = NumberUtil.mul(jsonFormMst.getDoubleValue("confirm_qty"), jsonMark.getDoubleValue("ball_rate"));
double ball_weight = NumberUtil.div(ball_rate_2, 1000);
oneMap.put("ball_weight", NumberUtil.round(ball_weight, 3).toString());
// 球磨时间
oneMap.put("ball_time", jsonMark.getString("ball_time"));
// 转速
oneMap.put("ball_speed", jsonMark.getString("ball_speed"));
// 原料总碳
oneMap.put("c_balance", jsonMark.getString("c_balance"));
}
// 实验批号
oneMap.put("accept_pcsn", jsonFormMst.getString("accept_pcsn"));
// 碳平衡:厂家质保书明细对应
String inspection_item_id = "1510155749437870083"; // ct项点标识
JSONObject jsonFactDtl = factDtlTab.query("inspection_id = '" + jsonFactMst.getString("inspection_id") + "' and inspection_item_id = '" + inspection_item_id + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonFactDtl)) {
oneMap.put("ct_value", NumberUtil.round(jsonFactDtl.getString("value"), 2).toString());
}
// 开单日期
oneMap.put("create_time", jsonFormMst.getString("create_time").substring(0,10));
/*
* 多组填充
*/
ArrayList<HashMap<String,Object>> flData = new ArrayList<>();
// 查询小线实验配方明细表
JSONArray formDtlArr = formDtlTab.query("formula_id = '" + jsonFormMst.getString("formula_id") + "'").getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(formDtlArr)) {
for (int i = 0; i < formDtlArr.size(); i++) {
JSONObject json = formDtlArr.getJSONObject(i);
HashMap<String, Object> mapFL = new HashMap<>();
// 判断物料物料类别是 物料还是物料分类
String class_name = "";
if (StrUtil.equals(json.getString("material_type"), "01")) {
// 物料:查物料表关联分类表
JSONObject jsonDtlMater = materTab.query("material_id = '" + json.getString("material_id") + "'").uniqueResult(0);
JSONObject jsonDtlClass = classTab.query("class_id = '" + jsonDtlMater.getString("material_type_id") + "'").uniqueResult(0);
class_name = jsonDtlClass.getString("class_name");
} else {
// 分类:直接用明细表的物料标识查基础分类表
JSONObject jsonDtlClass = classTab.query("class_id = '" + json.getString("material_id") + "'").uniqueResult(0);
class_name = jsonDtlClass.getString("class_name");
}
mapFL.put("class_name", class_name);
mapFL.put("dtl_pcsn", json.getString("dtl_pcsn"));
mapFL.put("formula_qty", NumberUtil.round(json.getString("formula_qty"), 3).toString());
flData.add(mapFL);
}
}
workBook.fill(oneMap, sheet);
workBook.fill(new FillWrapper("data", flData), sheet);
workBook.finish();
}
/**
* 新料模式开单
* @param json
@@ -700,29 +822,51 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
//该批次配粉重量
double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty");
AtomicReference<Double> Z_sum = new AtomicReference<>(0.0);
AtomicReference<Double> Z_sum_per = new AtomicReference<>(0.0);
//计算不需要移库的添加剂(抑制剂)
yzj_map.forEach((key,tjj_map_jo)->{
//获取添加剂id
String tjj_material_id = tjj_map_jo.getString("material_id");
JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA02")
.addParam("material_id",bomdlt_Cr3C2.getString("material_id"))
.addParam("pcsn",bomdlt_Cr3C2.getString("pcsn"))
.addParam("item_material_id",tjj_material_id)
.addParam("flag","5")
.process()
.uniqueResult(0);
if(tjj_finished!=null){
//质保书含量比
double value = tjj_finished.getDouble("value");
//当前含量重量
double finished = X22p*value/100.0;
//累计各碳化钨中已含添加剂重量百分比
Z_sum_per.set(Z_sum_per.get() + value/100.0);
//累计各碳化钨中已含添加剂重量
Z_sum.set(Z_sum.get() + finished);
}
});
//获取碳含量
JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("material_id"));
//该批次含碳比
double X22 = FactoryWarranty.getDouble("is_tan");
// X1减=[产品碳平衡*X1- X1* X22碳含量]/(1- * X22含量)
//X22p减=产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已/1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量
double X22_jian = CT1_weight*(c_balance/100.0-X22/100.0)/(1-X22/100.0);
double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get());
//更新碳化钨配粉重量
double bom_ivt_qty = X22p-X22_jian;
if(bom_ivt_qty < 0){
throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!");
}
double C = X22_jian;
double C = X22_jian + Z_sum.get();
if(C < 0){
throw new BadRequestException("补碳结果为负数,当前配粉无解!");
}else if(C >= 0){
bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty);
bomdlts_plan_map.put(bomdlt_Cr3C2.getString("material_id"),bomdlt_Cr3C2);
//统计除钨以外其他总重
AtomicReference<Double> total_sum = new AtomicReference<>(0.0);
total_sum.set(total_sum.get() + bomdlt_Cr3C2.getDouble("bom_ivt_qty"));
//计算不需要移库的添加剂(抑制剂)
yzj_map.forEach((key,tjj_map_jo)->{
//获取添加剂id
@@ -763,7 +907,6 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
tjj_map_now.put("is_active","1");
tjj_map_now.put("quality_scode","01");
yzj_list.add(tjj_map_now);
total_sum.set(total_sum.get() + need_qty-finished_qty);
}
});
if(C>0){
@@ -782,24 +925,6 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
C_weight.put("is_active","1");
C_weight.put("quality_scode","01");
cw_list.add(C_weight);
total_sum.set(total_sum.get() + C);
}
double W = new_qty - total_sum.get();
if(W>0){
JSONObject W_weight = new JSONObject();
W_weight.put("formula_qty",W);
//钨分类id
W_weight.put("material_id","1503644362234531840");
W_weight.put("material_name","钨粉");
W_weight.put("material_code","09030103");
W_weight.put("material_type","02");
W_weight.put("is_need_move","0");
W_weight.put("is_need_manage","1");
W_weight.put("is_rf_xl","0");
W_weight.put("ivt_level","01");
W_weight.put("is_active","1");
W_weight.put("quality_scode","01");
cw_list.add(W_weight);
}
}
}
@@ -817,9 +942,31 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
//该批次配粉重量
double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty");
// X1减=[产品碳平衡*X1-(X1)* X1碳含量]/1-X1碳含量
AtomicReference<Double> Z_sum = new AtomicReference<>(0.0);
//计算不需要移库的添加剂(抑制剂)
yzj_map.forEach((key,tjj_map_jo)->{
//获取添加剂id
String tjj_material_id = tjj_map_jo.getString("material_id");
JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01")
.addParam("material_id",bomdlt_Cr3C2.getString("material_id"))
.addParam("pcsn",bomdlt_Cr3C2.getString("pcsn"))
.addParam("item_material_id",tjj_material_id)
.addParam("flag","5")
.process()
.uniqueResult(0);
if(tjj_finished!=null){
//质保书含量比
double value = tjj_finished.getDouble("value");
//当前含量重量
double finished = X22p*value/100.0;
//累计各碳化钨中已含添加剂重量
Z_sum.set(Z_sum.get() + finished);
}
});
// X21p减=[(X21p)* X21碳含量+软废含碳量-产品碳平衡*(X21p+软废碳化钨)]/X21碳含量
//解得钨粉重量
double X22_jian = CT1_weight*(c_balance/100.0-X22/100.0) / (1-X22/100.0);
double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight)) / (X22/100.0);
//更新碳化钨配粉重量
double bom_ivt_qty = X22p-X22_jian;
if(bom_ivt_qty<=0){
@@ -827,10 +974,6 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
}
bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty);
bomdlts_plan_map.put(bomdlt_Cr3C2.getString("material_id"),bomdlt_Cr3C2);
//统计除钨以外其他总重
AtomicReference<Double> total_sum = new AtomicReference<>(0.0);
total_sum.set(total_sum.get() + bomdlt_Cr3C2.getDouble("bom_ivt_qty"));
//计算不需要移库的添加剂
yzj_map.forEach((key,tjj_map_jo)->{
//获取添加剂id
@@ -871,10 +1014,9 @@ public class AcceptFormulaServiceImpl implements AcceptFormulaService {
tjj_map_now.put("is_active","1");
tjj_map_now.put("quality_scode","01");
yzj_list.add(tjj_map_now);
total_sum.set(total_sum.get() + need_qty-finished_qty);
}
});
double W = new_qty - total_sum.get();
double W = X22_jian + Z_sum.get();
if(W>0){
JSONObject W_weight = new JSONObject();
W_weight.put("formula_qty",W);

View File

@@ -47,6 +47,7 @@ import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
@@ -778,7 +779,7 @@ public class FormulaServiceImpl implements FormulaService {
}
// 球磨相关
oneMap.put("ball_rate",NumberUtil.mul(jsonWork.getDoubleValue("workorder_qty"),jsonMaterExt.getDoubleValue("ball_rate")));
oneMap.put("liquid_rate",NumberUtil.mul(jsonWork.getDoubleValue("workorder_qty"),jsonMaterExt.getDoubleValue("liquid_rate")));
// oneMap.put("liquid_rate",NumberUtil.mul(jsonWork.getDoubleValue("workorder_qty"),jsonMaterExt.getDoubleValue("liquid_rate")));
if (ObjectUtil.isNotEmpty(json98jj)) {
if (StrUtil.equals(json98jj.getString("value"), "1.00")) {
oneMap.put("para_name", json98jj.getString("para_name"));
@@ -799,21 +800,25 @@ public class FormulaServiceImpl implements FormulaService {
JSONObject jsonQM06 = paraTab.query("material_id = '" + material_id + "' and para_code = 'QM006'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonQM13)) oneMap.put("number_1", jsonQM13.getString("value"));
if (ObjectUtil.isNotEmpty(jsonQM14)) {
// String number_2 = NumberUtil.mul(masterbucket_qty, NumberUtil.div(jsonQM14.getString("value"), "100").toString()).toString();
// oneMap.put("number_2", NumberUtil.round(number_2, 2).toString());
oneMap.put("number_2", jsonQM14.getString("value")); // 待删除
String number_2 = NumberUtil.mul(masterbucket_qty, NumberUtil.div(jsonQM14.getString("value"), "100").toString()).toString();
oneMap.put("number_2", NumberUtil.round(number_2, 2).toString());
// oneMap.put("number_2", jsonQM14.getString("value")); // 待删除
}
// if (ObjectUtil.isNotEmpty(jsonQM04)) oneMap.put("pre_time", jsonQM04.getString("value"));
// if (ObjectUtil.isNotEmpty(jsonQM06)) {
// String pre_fas = NumberUtil.mul(masterbucket_qty, NumberUtil.div(jsonQM06.getString("value"), "100").toString()).toString();
// oneMap.put("pre_fas", NumberUtil.round(pre_fas, 2).toString());
//
// double liquid_rate = jsonMaterExt.getDoubleValue("liquid_rate");
// String put_fas = NumberUtil.mul(jsonMst.getDoubleValue("masterbucket_qty"), liquid_rate, NumberUtil.div(jsonQM06.getString("value"), "100")).toString();
// oneMap.put("put_fas", NumberUtil.round(put_fas, 2).toString());
//
// }
if (ObjectUtil.isNotEmpty(jsonQM04)) oneMap.put("pre_time", jsonQM04.getString("value"));
if (ObjectUtil.isNotEmpty(jsonQM06)) {
// 预磨酒精
String pre_fas = NumberUtil.mul(masterbucket_qty, NumberUtil.div(jsonQM06.getString("value"), "100").toString()).toString();
oneMap.put("pre_fas", NumberUtil.round(pre_fas, 2).toString());
// 投料酒精
double mul_1 = NumberUtil.mul(jsonMst.getDoubleValue("masterbucket_qty"), jsonMaterExt.getDoubleValue("liquid_rate"));
BigDecimal mul_2 = NumberUtil.mul(jsonMst.getDoubleValue("masterbucket_qty"), NumberUtil.div(jsonQM06.getString("value"), "100"));
String put_fas = NumberUtil.sub(mul_1, mul_2).toString();
oneMap.put("put_fas", NumberUtil.round(put_fas, 2).toString());
}
if (ObjectUtil.isNotEmpty(jsonPW02)) {
oneMap.put("number_8", jsonPW02.getString("value"));
}

View File

@@ -0,0 +1,35 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/wastecchange',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/wastecchange/',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/wastecchange',
method: 'put',
data
})
}
export function confirm(data) {
return request({
url: 'api/wastecchange/confirm',
method: 'post',
data
})
}
export default { add, edit, del, confirm }

View File

@@ -126,6 +126,21 @@
/>
</el-select>
</el-form-item>
<el-form-item label="设备等级" prop="device_level">
<el-select
v-model="form.device_level"
placeholder="设备等级"
style="width: 210px"
class="filter-item"
>
<el-option
v-for="item in dict.device_level"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="内部自编号" prop="extend_code">
<label slot="label">内部自编号:</label>
<el-input v-model="form.extend_code" clearable style="width: 210px" />
@@ -283,6 +298,7 @@ const defaultForm = {
setting_place: '',
device_bom_id: '',
theory_beat: '',
device_level: '',
oraginal_value: '',
net_amount: '',
remark: ''
@@ -297,7 +313,7 @@ export default {
default: false
}
},
dicts: ['device_type', 'workorder_type', 'is_produceuse', 'device_status'],
dicts: ['device_type', 'workorder_type', 'is_produceuse', 'device_status', 'device_level'],
data() {
return {
dialogVisible: false,

View File

@@ -111,6 +111,22 @@
/>
</el-select>
</el-form-item>
<el-form-item label="设备等级" prop="device_level">
<el-select
v-model="form.device_level"
placeholder="设备等级"
style="width: 210px"
disabled
class="filter-item"
>
<el-option
v-for="item in dict.device_level"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="内部自编号" prop="extend_code">
<label slot="label">内部自编号:</label>
<el-input v-model="form.extend_code" disabled style="width: 210px" />
@@ -233,7 +249,7 @@ export default {
type: Object
}
},
dicts: ['device_type', 'workorder_type', 'is_produceuse', 'device_status'],
dicts: ['device_type', 'workorder_type', 'is_produceuse', 'device_status', 'device_level'],
data() {
return {
dialogVisible: false,

View File

@@ -66,18 +66,6 @@
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="启用日期">
<el-date-picker
v-model="query.createTime"
type="daterange"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
@input="onInput()"
:default-time="['00:00:00', '23:59:59']"
@change="crud.toQuery"
/>
</el-form-item>
<el-form-item label="所属工序">
<el-select
v-model="query.workprocedure_id"
@@ -129,6 +117,35 @@
/>
</el-select>
</el-form-item>
<el-form-item label="设备等级">
<el-select
v-model="query.device_level"
clearable
style="width: 200px"
placeholder="设备等级"
class="filter-item"
@change="crud.toQuery"
>
<el-option
v-for="item in dict.device_level"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="启用日期">
<el-date-picker
v-model="query.createTime"
type="daterange"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
@input="onInput()"
@change="crud.toQuery"
/>
</el-form-item>
<rrOperation />
</el-form>
</div>
@@ -143,7 +160,7 @@
:disabled="sub_flag"
@click="submit('10')"
>
启用
启用
</el-button>
<el-button
slot="right"
@@ -165,7 +182,7 @@
size="mini"
@click="openWork"
>
档案维护
档案维护
</el-button>
<el-button
slot="right"
@@ -195,6 +212,7 @@
size="mini"
:data="crud.data"
style="width: 100%;"
:cell-style="cellstyle"
:highlight-current-row="true"
@selection-change="mySelectionChange"
>
@@ -219,30 +237,31 @@
<el-link type="warning" @click="toView(scope.$index, scope.row)">{{ scope.row.device_code }}</el-link>
</template>
</el-table-column>
<el-table-column prop="device_name" min-width="150" label="设备名称"/>
<el-table-column prop="extend_code" min-width="100" label="内部自编号"/>
<el-table-column prop="device_model" min-width="130" label="设备型号"/>
<el-table-column prop="device_spec" min-width="130" label="设备规格"/>
<el-table-column prop="device_name" min-width="150" label="设备名称" />
<el-table-column prop="extend_code" min-width="100" label="内部自编号" />
<el-table-column prop="device_model" min-width="130" label="设备型号" />
<el-table-column prop="device_spec" min-width="130" label="设备规格" />
<el-table-column prop="device_level" min-width="70" label="设备等级" :formatter="device_levelFormat" />
<el-table-column prop="material_type_name" min-width="150" label="设备类别" />
<el-table-column :formatter="is_produceuseFormat" min-width="70" prop="is_produceuse" label="生产用途" />
<el-table-column :formatter="stateFormat" min-width="70" prop="status" label="设备状态" />
<el-table-column prop="beginuse_date" min-width="90" label="启用日期"/>
<el-table-column prop="use_deptname" min-width="130" label="使用部门"/>
<el-table-column prop="use_groupname" min-width="130" label="使用班组"/>
<el-table-column prop="supplier_name" min-width="180" label="供应商" show-overflow-tooltip/>
<el-table-column prop="manufacturer" min-width="180" label="制造商" show-overflow-tooltip/>
<el-table-column prop="country_manufactur" min-width="90" label="制造国别"/>
<el-table-column prop="leavefactory_date" min-width="80" label="出厂日期" show-overflow-tooltip/>
<el-table-column prop="leavefactory_number" min-width="130" label="出厂编号" show-overflow-tooltip/>
<el-table-column prop="drawing_number" min-width="130" label="图号" show-overflow-tooltip/>
<el-table-column prop="device_type" min-width="70" label="设备属性" :formatter="device_typeFormat" show-overflow-tooltip/>
<el-table-column prop="workprocedure_id" min-width="70" label="工序" :formatter="seriesFormat2" show-overflow-tooltip/>
<el-table-column prop="assets_code" min-width="100" label="资产编码" show-overflow-tooltip/>
<el-table-column prop="assets_name" min-width="150" label="资产名称" show-overflow-tooltip/>
<el-table-column prop="create_name" min-width="90" label="生成人" show-overflow-tooltip/>
<el-table-column prop="create_time" min-width="140" label="生成时间" show-overflow-tooltip/>
<el-table-column prop="update_optname" min-width="90" label="修改人" show-overflow-tooltip/>
<el-table-column prop="update_time" min-width="140" label="修改时间" show-overflow-tooltip/>
<el-table-column :formatter="is_produceuseFormat" min-width="70" prop="is_produceuse" label="生产用途" />
<el-table-column :formatter="stateFormat" min-width="70" prop="status" label="设备状态" />
<el-table-column prop="beginuse_date" min-width="90" label="启用日期" />
<el-table-column prop="use_deptname" min-width="130" label="使用部门" />
<el-table-column prop="use_groupname" min-width="130" label="使用班组" />
<el-table-column prop="supplier_name" min-width="180" label="供应商" show-overflow-tooltip />
<el-table-column prop="manufacturer" min-width="180" label="制造商" show-overflow-tooltip />
<el-table-column prop="country_manufactur" min-width="90" label="制造国别" />
<el-table-column prop="leavefactory_date" min-width="80" label="出厂日期" show-overflow-tooltip />
<el-table-column prop="leavefactory_number" min-width="130" label="出厂编号" show-overflow-tooltip />
<el-table-column prop="drawing_number" min-width="130" label="图号" show-overflow-tooltip />
<el-table-column prop="device_type" min-width="70" label="设备属性" :formatter="device_typeFormat" show-overflow-tooltip />
<el-table-column prop="workprocedure_id" min-width="70" label="工序" :formatter="seriesFormat2" show-overflow-tooltip />
<el-table-column prop="assets_code" min-width="100" label="资产编码" show-overflow-tooltip />
<el-table-column prop="assets_name" min-width="150" label="资产名称" show-overflow-tooltip />
<el-table-column prop="create_name" min-width="90" label="生成人" show-overflow-tooltip />
<el-table-column prop="create_time" min-width="140" label="生成时间" show-overflow-tooltip />
<el-table-column prop="update_optname" min-width="90" label="修改人" show-overflow-tooltip />
<el-table-column prop="update_time" min-width="140" label="修改时间" show-overflow-tooltip />
</el-table>
<!--分页组件-->
<pagination />
@@ -275,7 +294,7 @@ import { download } from '@/api/data'
import { downloadFile } from '@/utils'
export default {
name: 'equipmentfile',
name: 'Equipmentfile',
components: { Treeselect, ChangeDialog, ViewDialog, AddDialog, crudOperation, rrOperation, udOperation, pagination },
cruds() {
return CRUD({ title: '设备档案', idField: 'devicerecord_id', url: 'api/equipmentfile', crudMethod: { ...equipmentfile },
@@ -290,7 +309,7 @@ export default {
},
mixins: [presenter(), header(), crud()],
// 数据字典
dicts: ['workorder_status', 'workorder_type', 'product_series', 'device_type', 'is_produceuse', 'device_status'],
dicts: ['device_level', 'workorder_status', 'workorder_type', 'product_series', 'device_type', 'is_produceuse', 'device_status'],
data() {
return {
height: document.documentElement.clientHeight - 180 + 'px;',
@@ -421,10 +440,13 @@ export default {
this.open_flag = true
}
}
}else{
} else {
this.handleCurrentChange()
}
},
device_levelFormat(row) {
return this.dict.label.device_level[row.device_level]
},
stateFormat(row) {
return this.dict.label.device_status[row.status]
},
@@ -449,18 +471,18 @@ export default {
},
submit(status) {
this.checkrows = this.$refs.table.selection
if(this.checkrows.length === 0 ){
if (this.checkrows.length === 0) {
this.crud.notify('请勾选需要操作的记录!')
return false
}
equipmentfile.submit({ 'status': status, rows: this.checkrows}).then(res => {
equipmentfile.submit({ 'status': status, rows: this.checkrows }).then(res => {
this.crud.notify('操作成功!')
this.querytable()
})
},
openWork(row) {
this.checkrows = this.$refs.table.selection
if(this.checkrows.length === 0 ){
if (this.checkrows.length === 0) {
this.crud.notify('请勾选一条需要操作的记录!')
return false
}
@@ -480,6 +502,22 @@ export default {
crud.downloadLoading = false
})
},
cellstyle({ row, column, rowIndex, columnIndex }) {
const stylejson = {}
if (column.label === '设备等级') {
if (row.device_level === 'A') {
stylejson.background = 'red'
stylejson.color = 'white'
} else if (row.device_level === 'B') {
stylejson.background = 'blue'
stylejson.color = 'white'
} else if (row.device_level === 'C') {
stylejson.background = 'green'
stylejson.color = 'white'
}
return stylejson
}
},
printCard() {
const _selectData = this.$refs.table.selection
if (_selectData.length > 1 || _selectData.length === 0) {
@@ -578,7 +616,6 @@ export default {
color: "#CCCFD6";
}
.vue-treeselect--has-value .vue-treeselect__input {

View File

@@ -0,0 +1,329 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="碳化钨">
<el-input
v-model="query.material_code"
clearable
size="mini"
placeholder="编码、名称"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="工艺">
<el-radio v-model="form.tech_type" label="01">负压脱蜡</el-radio>
<el-radio v-model="form.tech_type" label="02">氢气脱蜡</el-radio>
</el-form-item>
<rrOperation />
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column v-if="false" prop="change_id" label="记录标识" />
<el-table-column v-if="false" prop="material_id" label="物料标识" />
<el-table-column prop="material_code" label="物料编码" width="120px" show-overflow-tooltip />
<el-table-column prop="material_name" label="物料名称" width="120px" show-overflow-tooltip />
<el-table-column prop="" label="型号" />
<el-table-column prop="tech_type" label="工艺" :formatter="formName" />
<el-table-column prop="cf_qty" label="CF" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].cf_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="yz_qty" label="YZ" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].yz_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="cx_qty" label="CX" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].cx_qty"
size="small"
:controls="false"
style="width: 95px"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="yc_qty" label="YC" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].yc_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="jy_qty" label="JY" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].jy_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="lt_qty" label="LT" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].lt_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="sj_qty" label="SJ" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].sj_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="ys_qty" label="YS" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].ys_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="ds_qty" label="DS" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].ds_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="cqx_qty" label="CQX" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].cqx_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="xqx_qty" label="XQX" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].xqx_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="qx_qty" label="QX" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].qx_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="jcf_qty" label="JCF" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].jcf_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="tb_qty" label="TB" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].tb_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="ycr_qty" label="YCR" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].ycr_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="gz_qty" label="GZ" width="120">
<template slot-scope="scope">
<el-input-number
v-model="crud.data[scope.$index].gz_qty"
size="small"
style="width: 95px"
:controls="false"
controls-position="right"
:precision="2"
:min="-10000"
/>
</template>
</el-table-column>
<el-table-column prop="create_name" label="维护人" />
<el-table-column prop="create_time" label="维护时间" width="150px"/>
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope">
<el-button type="success" size="mini" :loading="confirm_flg" @click="confirm(scope.row)">确认</el-button>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudWastecchange from '@/api/wms/basedata/pdm/wastecchange'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
const defaultForm = { change_id: null, material_id: null, tech_type: '01', cf_qty: null, yz_qty: null, cx_qty: null, yc_qty: null, jy_qty: null, lt_qty: null, sj_qty: null, ys_qty: null, ds_qty: null, cqx_qty: null, xqx_qty: null, qx_qty: null, jcf_qty: null, tb_qty: null, ycr_qty: null, gz_qty: null, create_id: null, create_name: null, create_time: null }
export default {
name: 'Wastecchange',
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({
title: '软废碳平衡修正维护',
url: 'api/wastecchange',
idField: 'change_id',
sort: 'change_id,desc',
crudMethod: { ...crudWastecchange },
optShow: {
add: false,
edit: false,
del: false,
download: false,
reset: true
}})
},
data() {
return {
confirm_flg: false,
permission: {
},
rules: {
}}
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
formName(row) {
if (row.tech_type === '01') {
return '负压脱蜡'
} else if (row.tech_type === '02') {
return '氢气脱蜡'
}
},
confirm(row) {
row.tech_type = this.form.tech_type
this.confirm_flg = true
crudWastecchange.confirm(row).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
this.confirm_flg = false
}).catch(() => {
this.crud.toQuery()
this.confirm_flg = false
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -151,7 +151,7 @@
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column
v-permission="['admin','workorder:del','workorder:edit']"
min-width="130"
min-width="125"
label="操作"
align="center"
fixed="right"
@@ -165,26 +165,26 @@
/>
</template>
</el-table-column>
<el-table-column :selectable="checkboxT" type="selection" width="45" />
<el-table-column prop="plan_code" label="日计划编码" width="110" />
<el-table-column :formatter="seriesFormat" min-width="80" prop="product_series_id" label="系列产线" />
<el-table-column prop="device_name" label="关键设备" width="80" />
<el-table-column prop="planstart_date" label="计划开始日期" width="100" />
<el-table-column prop="plan_org_name" label="申报单位" width="100" />
<el-table-column prop="workorder_type" label="计划类型" :formatter="workorder_typeFormat" min-width="80" />
<el-table-column :selectable="checkboxT" type="selection" min-width="35" />
<el-table-column prop="plan_code" label="日计划编码" min-width="105" />
<el-table-column :formatter="seriesFormat" min-width="70" prop="product_series_id" label="系列产线" />
<el-table-column prop="device_name" label="关键设备" min-width="80" />
<el-table-column prop="planstart_date" label="计划开始日期" min-width="95" />
<el-table-column prop="plan_org_name" label="申报单位" min-width="105" />
<el-table-column prop="workorder_type" label="计划类型" :formatter="workorder_typeFormat" min-width="70" />
<el-table-column prop="material_code" label="物料编码" min-width="130"/>
<el-table-column prop="old_mark" label="牌号" min-width="100" />
<el-table-column :formatter="seriesFormat2" min-width="80" prop="mater_product_series" label="产品系列" />
<el-table-column prop="product_weight" label="生产重量(kg)" :formatter="crud.formatNum0" min-width="95" />
<el-table-column prop="product_num" label="批数" width="45" />
<el-table-column prop="planend_date" label="计划结束日期" width="100" />
<el-table-column prop="plan_finish_date" label="交货日期" width="90" />
<el-table-column prop="day_num" label="提前天数" width="70" :formatter="crud.formatNum0" />
<el-table-column prop="old_mark" label="牌号" min-width="80" />
<el-table-column :formatter="seriesFormat2" min-width="70" prop="mater_product_series" label="产品系列" />
<el-table-column prop="product_weight" label="计划重量(kg)" :formatter="crud.formatNum0" min-width="95" />
<el-table-column prop="product_num" label="批数" min-width="45" />
<el-table-column prop="planend_date" label="计划结束日期" min-width="95" />
<el-table-column prop="plan_finish_date" label="交货日期" min-width="85" />
<el-table-column prop="day_num" label="提前天数" min-width="70" :formatter="crud.formatNum0" />
<el-table-column :formatter="stateFormat" min-width="45" prop="status" label="状态" />
<el-table-column prop="task_code" label="生产任务号" width="110" />
<el-table-column prop="create_time" label="创建时间" width="135" />
<el-table-column prop="create_name" label="创建人" width="70" />
<el-table-column prop="remark" label="备注" />
<el-table-column prop="task_code" label="生产任务号" min-width="110" />
<el-table-column prop="create_time" label="创建时间" min-width="135" />
<el-table-column prop="create_name" label="创建人" min-width="60" />
<el-table-column prop="remark" label="备注" min-width="200" />
</el-table>
<!--分页组件-->
<pagination />
@@ -223,7 +223,7 @@ export default {
url: 'api/dailyplan',
idField: 'dailyplan_id',
sort: '',
query: { nowstart_date: new Date(),device_id: '' },
query: { nowstart_date: new Date(),device_id: '', status: '01' },
crudMethod: { ...dailyplan },
optShow: {
add: true,

View File

@@ -71,8 +71,8 @@
<label slot="label">生产批次:</label>
<el-input v-model="form.pcsn" style="width: 210px" disabled />
</el-form-item>
<el-form-item label="重量" prop="workorder_qty">
<label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-form-item label="计划重量" prop="workorder_qty">
<label slot="label">计划重:</label>
<el-input-number
v-model="form.workorder_qty"
:controls="false"
@@ -101,8 +101,8 @@
style="width: 210px"
/>
</el-form-item>
<el-form-item label="实际生产重量" prop="productin_qty">
<label slot="label">际生产重量:</label>
<el-form-item label="实投总重量" prop="productin_qty">
<label slot="label">投总重量:</label>
<el-input-number
v-model="form.productin_qty"
:controls="false"

View File

@@ -120,13 +120,23 @@
/>
</el-form-item>
<el-form-item label="关键设备">
<el-input
v-model="query.device_code"
size="mini"
<label slot="label">关键设备:</label>
<el-select
v-model="query.device_id"
clearable
placeholder="编码、名称"
@keyup.enter.native="crud.toQuery"
/>
size="mini"
placeholder="关键设备"
class="filter-item"
style="width: 200px"
@change="hand"
>
<el-option
v-for="item in Devices"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<rrOperation />
</el-form>
@@ -221,7 +231,7 @@
>
<el-table-column
v-permission="['admin','workorder:del','workorder:edit']"
min-width="130"
min-width="125"
label="操作"
align="center"
fixed="right"
@@ -235,9 +245,9 @@
/>
</template>
</el-table-column>
<el-table-column :selectable="checkboxT" type="selection" width="45" />
<el-table-column prop="workorder_date" min-width="85" label="工令日期" :formatter="workorder_dateFormat"/>
<el-table-column prop="workorder_code" width="130" label="工令号">
<el-table-column :selectable="checkboxT" type="selection" min-width="35" />
<el-table-column prop="workorder_date" min-width="83" label="工令日期" :formatter="workorder_dateFormat"/>
<el-table-column prop="workorder_code" min-width="125" label="工令号">
<template slot-scope="scope">
<el-link type="warning" @click="toView(scope.$index, scope.row)">{{ scope.row.workorder_code }}</el-link>
</template>
@@ -247,26 +257,25 @@
<el-table-column :formatter="stateFormat" min-width="70" prop="status" label="工令状态" />
<el-table-column prop="device_name" min-width="80" label="设备"/>
<el-table-column prop="material_code" min-width="130" label="物料编码"/>
<el-table-column prop="old_mark" min-width="110" label="牌号"/>
<el-table-column :formatter="seriesFormat" min-width="80" prop="product_series_id" label="系列" />
<el-table-column prop="pcsn" min-width="80" label="批次"/>
<el-table-column prop="workorder_qty" min-width="70" label="重量" :formatter="crud.formatNum0"/>
<el-table-column prop="bill_qty" min-width="90" label="开单总重量" :formatter="crud.formatNum3" />
<el-table-column prop="productin_qty" min-width="100" label="实际生产重量" :formatter="crud.formatNum3"/>
<el-table-column prop="qty_unit_name" min-width="80" label="单位"/>
<el-table-column prop="planstart_time" min-width="140" label="计划开始时间"/>
<el-table-column prop="planend_time" min-width="140" label="计划结束时间"/>
<el-table-column prop="realstart_time" min-width="140" label="实际开始时间"/>
<el-table-column prop="realend_time" min-width="140" label="实际结束时间"/>
<el-table-column min-width="100" prop="source_bill_type" :formatter="workorder_typeFormat2" label="源类型" />
<el-table-column prop="source_bill_code" label="来源单据编号" min-width="100" />
<el-table-column min-width="90" prop="workprocedure_id" label="当前工序" :formatter="seriesFormat2" />
<el-table-column :formatter="create_modeFormat" min-width="170" prop="create_mode" label="生成方式" />
<el-table-column prop="startwork_name" min-width="80" label="工人"/>
<el-table-column prop="endwork_name" min-width="80" label="完工人"/>
<el-table-column prop="create_name" min-width="80" label="创建人"/>
<el-table-column prop="update_optname" min-width="80" label="修改人"/>
<el-table-column prop="remark" min-width="120" label="备注"/>
<el-table-column prop="old_mark" min-width="80" label="牌号"/>
<el-table-column :formatter="seriesFormat" min-width="65" prop="product_series_id" label="系列" />
<el-table-column prop="pcsn" min-width="75" label="批次"/>
<el-table-column prop="workorder_qty" min-width="70" label="计划重量" :formatter="crud.formatNum0"/>
<el-table-column prop="bill_qty" min-width="85" label="开单总重量" :formatter="crud.formatNum3" />
<el-table-column prop="productin_qty" min-width="85" label="实投总重量" :formatter="crud.formatNum3"/>
<el-table-column prop="qty_unit_name" min-width="75" label="单位"/>
<el-table-column prop="planstart_time" min-width="100" label="计划开始时间" :formatter="workorder_dateFormat"/>
<el-table-column prop="planend_time" min-width="100" label="计划结束时间" :formatter="planend_timeFormat" />
<el-table-column prop="realstart_time" min-width="135" label="实际开始时间"/>
<el-table-column prop="realend_time" min-width="135" label="实际结束时间"/>
<el-table-column min-width="70" prop="source_bill_type" :formatter="workorder_typeFormat2" label="源类型" />
<el-table-column prop="source_bill_code" label="来源单据编号" min-width="105" />
<el-table-column min-width="70" prop="workprocedure_id" label="当前工序" :formatter="seriesFormat2" />
<el-table-column prop="startwork_name" min-width="60" label="开工人"/>
<el-table-column prop="endwork_name" min-width="60" label="工人"/>
<el-table-column prop="create_name" min-width="60" label="创建人"/>
<el-table-column prop="update_optname" min-width="60" label="修改人"/>
<el-table-column prop="remark" min-width="180" label="备注"/>
</el-table>
<!--分页组件-->
<pagination />
@@ -293,6 +302,7 @@ import Date from "@/utils/datetime";
import crudWorkProcedure from "@/api/wms/basedata/pdm/workProcedure";
import { download } from '@/api/data'
import { downloadFile } from '@/utils'
import producetask from '@/api/wms/pdm/producetask'
export default {
name: 'workorder',
@@ -327,6 +337,7 @@ export default {
mstrow: {},
XLList: [],
Depts: [],
Devices: [],
workProcedureList: [],
viewShow: false,
changeShow: false,
@@ -348,6 +359,9 @@ export default {
crudWorkProcedure.downSelect().then(res => {
this.workProcedureList = res
})
producetask.getDevices().then(res => {
this.Devices = res
})
workorder.getDepts().then(res => {
this.Depts = res
})
@@ -440,6 +454,9 @@ export default {
workorder_dateFormat(row) {
return row.planstart_time.substring(0, 10)
},
planend_timeFormat(row) {
return row.planend_time.substring(0, 10)
},
handleCurrentChange() {
this.checkrows = []
this.mstrow = {}
@@ -520,6 +537,9 @@ export default {
this.crud.toQuery()
this.handleCurrentChange()
},
hand(value) {
this.crud.toQuery()
},
printCard() {
const _selectData = this.$refs.table.selection
if (_selectData.length > 1 || _selectData.length === 0) {

View File

@@ -258,6 +258,8 @@
:data="tableData"
style="width: 100%;"
size="mini"
show-summary
:summary-method="getSummaries"
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
@@ -469,8 +471,8 @@ export default {
this.form.liquid_rate = res.liquid_rate
this.form.ball_time = res.ball_time
this.form.ball_speed = res.ball_speed
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty / 100.0
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty / 100.0
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty
})
}
},
@@ -506,13 +508,13 @@ export default {
this.form.liquid_rate = res.liquid_rate
this.form.ball_time = res.ball_time
this.form.ball_speed = res.ball_speed
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty / 100.0
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty / 100.0
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty
})
},
storChange4(row) {
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty / 100.0
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty / 100.0
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty
},
handleClose(done) {
this.$confirm('确认关闭?')
@@ -533,6 +535,29 @@ export default {
this.form.accept_pcsn = res.accept_pcsn
})
},
getSummaries(param) {
const { columns, data } = param
const sums = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
return
}
const values = data.map(item => Number(item[column.property]))
if (column.property === 'formula_qty') {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
sums[index]
}
})
return sums
},
autoCalculation() {
this.fullscreenLoading = true
crudacceptformula.autoCalculation(this.form).then(res => {

View File

@@ -228,6 +228,8 @@
:data="tableData"
style="width: 100%;"
size="mini"
show-summary
:summary-method="getSummaries"
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
@@ -358,10 +360,33 @@ export default {
this.form.liquid_rate = res.liquid_rate
this.form.ball_time = res.ball_time
this.form.ball_speed = res.ball_speed
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty / 100.0
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty / 100.0
this.form.ball_qty = this.form.ball_rate * this.form.accept_qty
this.form.liquid_qty = this.form.liquid_rate * this.form.accept_qty
})
},
getSummaries(param) {
const { columns, data } = param
const sums = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
return
}
const values = data.map(item => Number(item[column.property]))
if (column.property === 'formula_qty') {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
sums[index]
}
})
return sums
},
close() {
this.$emit('update:dialogShow', false)
this.form = {}

View File

@@ -98,6 +98,8 @@
type="warning"
icon="el-icon-check"
size="mini"
:disabled="crud.selections.length !== 1"
@click="printExcel"
>
打印
</el-button>
@@ -147,6 +149,8 @@ import pagination from '@crud/Pagination'
import AddDialog from '@/views/wms/pf/acceptformula/AddDialog'
import ViewDialog from '@/views/wms/pf/acceptformula/ViewDialog'
import Date from '@/utils/datetime'
import {download} from "@/api/data";
import {downloadFile} from "@/utils";
export default {
name: 'Acceptformula',
@@ -229,6 +233,17 @@ export default {
},
querytable() {
this.crud.toQuery()
},
printExcel() {
const _selectData = this.$refs.table.selection
const data = _selectData[0]
download('/api/acceptformula/print', { 'formula_id': data.formula_id }).then(result => {
const name = data.material_code + data.accept_pcsn
downloadFile(result, name, 'xlsx')
crud.downloadLoading = false
}).catch(() => {
crud.downloadLoading = false
})
}
}
}

View File

@@ -156,7 +156,7 @@
<MaterDtl
:dialog-show.sync="dtlMaterShow"
:is-single="true"
:mater-opt-code="'04'"
:mater-opt-code="'27'"
@tableChanged2="tableChanged2"
/>
</el-dialog>