import { default as BaseController } from "../baseController";
|
import { Post } from "egg-shell-decorators";
|
import * as sql from "mssql";
|
import { BaseProductPosition } from "../../entity/storage/product/baseProductPosition";
|
import { LogStorageStatusChange } from "../../entity/storage/log/logStorageStatusChange";
|
import { MoreThan } from "typeorm";
|
import { In } from "typeorm";
|
import { SysUserLog } from "../../entity/sys/core/sysUserLog";
|
import { BaseProductInfo } from "../../entity/basicInfo/base/baseProductInfo";
|
//import { BasePosition } from "../../entity/basicInfo/base/basePosition";
|
/**
|
* 收货 - 收货计划单
|
*/
|
export default class PositionNameController extends BaseController {
|
// #region 锁定
|
/// <summary>
|
/// 锁定
|
/// </summary>
|
/// <param name="ids">视图[vBase_ProductPositionGroup]的ProductPosition_Id</param>
|
/// <returns></returns>
|
@Post()
|
public async lock() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
if (!body.selectedIds) {
|
this.info.result = false;
|
this.info.msg = "请选择锁定";
|
} else {
|
this.info = await this.lockAndUnlock(body.selectedIds, "锁定");
|
}
|
ctx.body = this.info;
|
}
|
// #endregion
|
|
// #region 解锁
|
/// <summary>
|
/// 锁定
|
/// </summary>
|
/// <param name="ids">视图[vBase_ProductPositionGroup]的ProductPosition_Id</param>
|
/// <returns></returns>
|
@Post()
|
public async Unlock() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
if (!body.selectedIds) {
|
this.info.result = false;
|
this.info.msg = "请选择锁定";
|
} else {
|
this.info = await this.lockAndUnlock(body.selectedIds, "正常");
|
}
|
ctx.body = this.info;
|
}
|
// #endregion
|
|
// #region 锁定、解锁
|
public async lockAndUnlock(ids, toStatus) {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
let OperationType = body.toStatus == "正常" ? "解锁" : "锁定";
|
|
//#region New
|
const connection: any = await this.dbWrite.connection;
|
let request = new sql.Request(connection.driver.master);
|
request.input("Ids", ids);
|
request.input("toStatus", toStatus);
|
request.input("User_Id", userInfo.user_Id);
|
request.input("UserTrueName", userInfo.userTrueName);
|
request.output("outMsg", sql.NVarChar(2000));
|
let result = await request.execute("sp_Storage_lockAndUnlock");
|
let outMsg = result.output.outMsg;
|
|
if (outMsg) {
|
this.info.result = false;
|
this.info.msg = OperationType + "失败";
|
} else {
|
this.info.result = true;
|
this.info.msg = OperationType + "成功";
|
}
|
//#endregion
|
return this.info;
|
}
|
// #endregion
|
|
// #region 属性转换
|
/// <summary>
|
/// 锁定
|
/// </summary>
|
/// <param name="ids">视图[vBase_ProductPositionGroup]的ProductPosition_Id</param>
|
/// <returns></returns>
|
@Post()
|
public async ChangeAttr() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
let productStorage = body.productStorage;
|
let selectedItem = body.selectedItem;
|
|
try {
|
if (!productStorage) {
|
//#region 批量处理
|
for (let item of selectedItem) {
|
let storageStatus = item.storageStatus;
|
let productAttribute = item.productAttribute;
|
|
let where: any = {
|
storage_Id: item.storage_Id,
|
positionName: item.positionName,
|
product_Id: item.product_Id
|
};
|
if (storageStatus) {
|
where.storageStatus = item.storageStatus;
|
} else {
|
where.storageStatus = null;
|
}
|
if (productAttribute) {
|
where.productAttribute = item.productAttribute;
|
} else {
|
where.productAttribute = null;
|
}
|
let ppList = await this.dbRead.find(BaseProductPosition, where);
|
for (let item of ppList) {
|
let statusInfo = new LogStorageStatusChange();
|
statusInfo.result = body.toAttr;
|
statusInfo.operationType = "属性转换";
|
statusInfo.productPosition_Id = item.productPosition_Id;
|
statusInfo.class_Id = item.class_Id;
|
statusInfo.mainID = item.mainID;
|
statusInfo.detailID = item.detailID;
|
statusInfo.storage_Id = item.productPosition_Id;
|
statusInfo.storageName = item.storageName;
|
statusInfo.positionName = item.positionName;
|
statusInfo.product_Id = item.product_Id;
|
statusInfo.productCode = item.productCode;
|
statusInfo.productName = item.productName;
|
statusInfo.productModel = item.productModel;
|
statusInfo.productSpec = item.productSpec;
|
statusInfo.singleSignCode = item.singleSignCode;
|
statusInfo.inStorageDate = item.inStorageDate;
|
statusInfo.provider_Id = item.provider_Id;
|
statusInfo.providerCode = item.providerCode;
|
statusInfo.providerShortName = item.providerShortName;
|
statusInfo.productStorage = item.productStorage;
|
statusInfo.orignStorage = item.orignStorage;
|
statusInfo.purchasePrice = item.purchasePrice;
|
statusInfo.purchaseMoney = item.purchaseMoney;
|
statusInfo.productModel = item.productModel;
|
statusInfo.rate = item.rate;
|
statusInfo.ratePrice = item.ratePrice;
|
statusInfo.rateMoney = item.rateMoney;
|
statusInfo.avgPrice = item.avgPrice;
|
statusInfo.remark = item.remark;
|
statusInfo.billCode = item.billCode;
|
statusInfo.enterCode = item.enterCode;
|
statusInfo.orderCode = item.orderCode;
|
statusInfo.consignor_Id = item.consignor_Id;
|
statusInfo.consignorCode = item.consignorCode;
|
statusInfo.consignorName = item.consignorName;
|
statusInfo.batchNumber = item.batchNumber;
|
statusInfo.produceDate = item.produceDate;
|
statusInfo.plateCode = item.plateCode;
|
statusInfo.relationCode = item.relationCode;
|
statusInfo.shelfLifeDay = item.shelfLifeDay;
|
statusInfo.shelfLifeDate = item.shelfLifeDate;
|
statusInfo.validShelfLifeDay = item.validShelfLifeDay;
|
statusInfo.productAttribute = item.productAttribute;
|
statusInfo.createID = userInfo.user_Id;
|
statusInfo.creator = userInfo.userTrueName;
|
statusInfo.createDate = new Date();
|
await this.dbWrite.insert(LogStorageStatusChange, statusInfo);
|
}
|
}
|
this.info.result = true;
|
this.info.msg = "转换完成";
|
ctx.body = this.info;
|
// #endregion
|
} else {
|
//#region 单个转换
|
let storageStatus = selectedItem[0].storageStatus;
|
let productAttribute = selectedItem[0].productAttribute;
|
|
let where: any = {
|
storage_Id: selectedItem[0].storage_Id,
|
positionName: selectedItem[0].positionName,
|
product_Id: selectedItem[0].product_Id,
|
productStorage: MoreThan(0)
|
};
|
if (storageStatus) {
|
where.storageStatus = storageStatus;
|
} else {
|
where.storageStatus = null;
|
}
|
if (productAttribute) {
|
where.productAttribute = productAttribute;
|
} else {
|
where.productAttribute = null;
|
}
|
let ppList = await this.dbRead.find(BaseProductPosition, where);
|
// 库存量求和字段计算
|
var sumStorage: any = ppList.reduce(
|
(totalItem: any, currItem) => {
|
totalItem.productStorage += currItem.productStorage;
|
return totalItem;
|
},
|
{ productStorage: 0 }
|
);
|
if (sumStorage.productStorage < productStorage) {
|
this.info.result = false;
|
this.info.msg = "转换失败,当前最大可转换数量为" + sumStorage.productStorage;
|
ctx.body = this.info;
|
return;
|
}
|
for (let pp of ppList) {
|
// foreach (var pp in ppList)
|
// {
|
if (!productStorage) {
|
break;
|
}
|
let reduceQty = productStorage;
|
if (reduceQty > pp.productStorage) {
|
reduceQty = pp.productStorage ? pp.productStorage : 0;
|
}
|
productStorage -= reduceQty;
|
|
//消减库存
|
pp.productStorage -= reduceQty;
|
await this.dbWrite.update(BaseProductPosition, pp.productPosition_Id, {
|
productStorage: pp.productStorage
|
});
|
//新增库存
|
let newpp = new BaseProductPosition();
|
newpp = { ...pp };
|
newpp.className = "属性转换";
|
newpp.productStorage = reduceQty;
|
newpp.productAttribute = body.toAttr;
|
delete newpp.productPosition_Id;
|
delete newpp.createDate;
|
|
await this.dbWrite.insert(BaseProductPosition, newpp);
|
let where: any = { productPosition_Id: pp.productPosition_Id };
|
let ppList = await this.dbRead.find(BaseProductPosition, where);
|
for (let item of ppList) {
|
let statusInfo = new LogStorageStatusChange();
|
statusInfo.result = body.toAttr;
|
statusInfo.operationType = "属性转换";
|
statusInfo.productPosition_Id = item.productPosition_Id;
|
statusInfo.class_Id = item.class_Id;
|
statusInfo.className = "属性转换";
|
statusInfo.mainID = item.mainID;
|
statusInfo.detailID = item.detailID;
|
statusInfo.storage_Id = item.storage_Id;
|
statusInfo.storageName = item.storageName;
|
statusInfo.positionName = item.positionName;
|
statusInfo.product_Id = item.product_Id;
|
statusInfo.productCode = item.productCode;
|
statusInfo.productName = item.productName;
|
statusInfo.productModel = item.productModel;
|
statusInfo.productSpec = item.productSpec;
|
statusInfo.singleSignCode = item.singleSignCode;
|
statusInfo.inStorageDate = item.inStorageDate;
|
statusInfo.provider_Id = item.provider_Id;
|
statusInfo.providerCode = item.providerCode;
|
statusInfo.providerShortName = item.providerShortName;
|
statusInfo.productStorage = body.reduceQty;
|
statusInfo.orignStorage = body.reduceQty;
|
statusInfo.purchasePrice = item.purchasePrice;
|
statusInfo.purchaseMoney = item.purchaseMoney;
|
statusInfo.productModel = item.productModel;
|
statusInfo.rate = item.rate;
|
statusInfo.ratePrice = item.ratePrice;
|
statusInfo.rateMoney = item.rateMoney;
|
statusInfo.avgPrice = item.avgPrice;
|
statusInfo.remark = item.remark;
|
statusInfo.billCode = item.billCode;
|
statusInfo.enterCode = item.enterCode;
|
statusInfo.orderCode = item.orderCode;
|
statusInfo.consignor_Id = item.consignor_Id;
|
statusInfo.consignorCode = item.consignorCode;
|
statusInfo.consignorName = item.consignorName;
|
statusInfo.batchNumber = item.batchNumber;
|
statusInfo.produceDate = item.produceDate;
|
statusInfo.plateCode = item.plateCode;
|
statusInfo.relationCode = item.relationCode;
|
statusInfo.shelfLifeDay = item.shelfLifeDay;
|
statusInfo.shelfLifeDate = item.shelfLifeDate;
|
statusInfo.validShelfLifeDay = item.validShelfLifeDay;
|
statusInfo.productAttribute = item.productAttribute;
|
statusInfo.createID = userInfo.user_Id;
|
statusInfo.creator = userInfo.userTrueName;
|
statusInfo.createDate = new Date();
|
await this.dbWrite.insert(LogStorageStatusChange, statusInfo);
|
}
|
}
|
|
this.info.result = true;
|
this.info.msg = "转换完成";
|
ctx.body = this.info;
|
//#endregion
|
}
|
} catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误" + error.message;
|
ctx.body = this.info;
|
}
|
}
|
|
// #endregion
|
//#region 删除库存信息
|
@Post()
|
public async deletePosition() {
|
try {
|
let userInfo = await this.userInfo;
|
// 清除该单据所有占位
|
var positionList = await this.dbRead.find(BaseProductPosition, {
|
productPosition_Id: In(this.body.ids)
|
});
|
// 添加日志
|
for (var item of positionList) {
|
let userLog = new SysUserLog();
|
userLog.operateType = "库存明细";
|
userLog.action = "删除物料-" + item.productCode + ",库存量:" + item.productStorage + "货位是:" + item.positionName;
|
userLog.iP = this.ctx.request.ip;
|
userLog.userTrueName = userInfo.userTrueName;
|
await this.setAccountInfo(userLog);
|
await this.dbWrite.save(userLog);
|
// if (item.positionName) {
|
// // 更新启用为1
|
// await this.dbWrite.update(
|
// BasePosition,
|
// {
|
// positionName: item.positionName
|
// },
|
// {
|
// isFreeze: 0,
|
// isLocked: 0,
|
// positionLength: 0
|
// }
|
// );
|
// }
|
}
|
// 根据id删除
|
await this.dbWrite.delete(BaseProductPosition, {
|
productPosition_Id: In(this.body.ids)
|
});
|
this.info.result = true;
|
this.info.msg = "删除成功!";
|
} catch (ex) {
|
this.info.result = false;
|
this.info.msg = "错误消息:" + ex.message;
|
}
|
this.ctx.body = this.info;
|
}
|
//#endregion
|
//#region 修改库存信息
|
@Post()
|
public async updateProductPosition() {
|
try {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let taskForm = body.taskForm;
|
// 查询要修改的库存
|
// var positionList = await this.dbRead.findOne(vBaseProductPosition, {
|
// productPosition_Id: this.body.ids
|
// });
|
if (taskForm.productCode) {
|
var productList = await this.dbRead.findOne(BaseProductInfo, {
|
productCode: taskForm.productCode
|
});
|
}
|
|
// 更新启用为1
|
await this.dbWrite.update(
|
BaseProductPosition,
|
{
|
productPosition_Id: body.ids
|
},
|
{
|
extendField04: taskForm.extendField04,
|
productCode: productList.productCode,
|
productName: productList.productName,
|
product_Id: productList.product_Id,
|
saleCode: taskForm.saleCode,
|
extendField08: taskForm.extendField08,
|
productStorage: taskForm.productStorage
|
}
|
);
|
// 添加日志
|
// let userLog = new SysUserLog();
|
// userLog.operateType = "库存明细";
|
// userLog.action = "修改物料-" + taskForm.productCode + ",库存量:" + taskForm.productStorage + "货位是:" + taskForm.positionName;
|
// userLog.iP = this.ctx.request.ip;
|
// userLog.userTrueName = userInfo.userTrueName;
|
|
// await this.setAccountInfo(userLog);
|
// await this.dbWrite.save(userLog);
|
this.info.result = true;
|
this.info.msg = "操作完成!";
|
} catch (ex) {
|
this.info.result = false;
|
this.info.msg = "错误消息:" + ex.message;
|
}
|
this.ctx.body = this.info;
|
}
|
//#endregion
|
}
|