You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

466 lines
20 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package jnpf.controller;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jnpf.base.ActionResult;
import jnpf.base.UserInfo;
import jnpf.exception.DataException;
import jnpf.permission.entity.UserEntity;
import jnpf.service.*;
import jnpf.entity.*;
import jnpf.util.*;
import jnpf.model.yysmaterialprocurementorder.*;
import lombok.extern.slf4j.Slf4j;
import oracle.jdbc.proxy.annotation.Post;
import org.apache.ibatis.type.NStringTypeHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;
import jnpf.annotation.JnpfField;
import jnpf.base.vo.PageListVO;
import jnpf.base.vo.PaginationVO;
import jnpf.base.vo.DownloadVO;
import jnpf.config.ConfigValueUtil;
import jnpf.base.entity.ProvinceEntity;
import java.io.IOException;
import java.util.stream.Collectors;
import jnpf.engine.entity.FlowTaskEntity;
import jnpf.exception.WorkFlowException;
import org.springframework.web.multipart.MultipartFile;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.File;
import jnpf.onlinedev.model.ExcelImFieldModel;
import jnpf.onlinedev.model.OnlineImport.ImportDataModel;
import jnpf.onlinedev.model.OnlineImport.ImportFormCheckUniqueModel;
import jnpf.onlinedev.model.OnlineImport.ExcelImportModel;
import jnpf.onlinedev.model.OnlineImport.VisualImportModel;
import cn.xuyanwu.spring.file.storage.FileInfo;
import lombok.Cleanup;
import jnpf.model.visualJson.config.HeaderModel;
import jnpf.base.model.ColumnDataModel;
import jnpf.base.util.VisualUtils;
import org.springframework.transaction.annotation.Transactional;
/**
* YysMaterialProcurementOrder
*
* @版本: V3.5
* @版权: 引迈信息技术有限公司https://www.jnpfsoft.com
* @作者: JNPF开发平台组
* @日期: 2024-08-08
*/
@Slf4j
@RestController
@Tag(name = "YysMaterialProcurementOrder", description = "example")
@RequestMapping("/api/example/YysMaterialProcurementOrder")
public class YysMaterialProcurementOrderController {
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@Autowired
private UserProvider userProvider;
@Autowired
private YysMaterialProcurementOrderService yysMaterialProcurementOrderService;
@Autowired
private ConfigValueUtil configValueUtil;
@Resource
private YysSupplierInformationService yysSupplierInformationService;
/**
* 列表
*
* @param yysMaterialProcurementOrderPagination
* @return
*/
@Operation(summary = "获取列表")
@PostMapping("/getList")
public ActionResult list(@RequestBody YysMaterialProcurementOrderPagination yysMaterialProcurementOrderPagination) throws IOException {
List<YysMaterialProcurementOrderEntity> list = yysMaterialProcurementOrderService.getList(yysMaterialProcurementOrderPagination);
List<Map<String, Object>> realList = new ArrayList<>();
Map<String, String> collect = yysSupplierInformationService.list().stream().collect(Collectors.toMap(YysSupplierInformationEntity::getSupplierId, YysSupplierInformationEntity::getSupplierCname));
for (YysMaterialProcurementOrderEntity entity : list) {
Map<String, Object> yysMaterialProcurementOrderMap = JsonUtil.entityToMap(entity);
yysMaterialProcurementOrderMap.put("id", yysMaterialProcurementOrderMap.get("id"));
if (collect.containsKey(yysMaterialProcurementOrderMap.get("supplier").toString())) {
yysMaterialProcurementOrderMap.put("supplier", collect.get(yysMaterialProcurementOrderMap.get("supplier").toString()));
}
//副表数据
//子表数据
realList.add(yysMaterialProcurementOrderMap);
}
//数据转换
realList = generaterSwapUtil.swapDataList(realList, YysMaterialProcurementOrderConstant.getFormData(), YysMaterialProcurementOrderConstant.getColumnData(), yysMaterialProcurementOrderPagination.getModuleId(), false);
//返回对象
PageListVO vo = new PageListVO();
vo.setList(realList);
PaginationVO page = JsonUtil.getJsonToBean(yysMaterialProcurementOrderPagination, PaginationVO.class);
vo.setPagination(page);
return ActionResult.success(vo);
}
/**
* 创建
*
* @param yysMaterialProcurementOrderForm
* @return
*/
@PostMapping()
@Operation(summary = "创建")
public ActionResult create(@RequestBody @Valid YysMaterialProcurementOrderForm yysMaterialProcurementOrderForm) {
String b = yysMaterialProcurementOrderService.checkForm(yysMaterialProcurementOrderForm, 0);
if (StringUtil.isNotEmpty(b)) {
return ActionResult.fail(b);
}
try {
yysMaterialProcurementOrderService.saveOrUpdate(yysMaterialProcurementOrderForm, null, true);
} catch (Exception e) {
return ActionResult.fail("新增数据失败");
}
return ActionResult.success("创建成功");
}
/**
* 导出Excel
*
* @return
*/
@Operation(summary = "导出Excel")
@PostMapping("/Actions/Export")
public ActionResult Export(@RequestBody YysMaterialProcurementOrderPagination yysMaterialProcurementOrderPagination) throws IOException {
if (StringUtil.isEmpty(yysMaterialProcurementOrderPagination.getSelectKey())) {
return ActionResult.fail("请选择导出字段");
}
List<YysMaterialProcurementOrderEntity> list = yysMaterialProcurementOrderService.getList(yysMaterialProcurementOrderPagination);
List<Map<String, Object>> realList = new ArrayList<>();
for (YysMaterialProcurementOrderEntity entity : list) {
Map<String, Object> yysMaterialProcurementOrderMap = JsonUtil.entityToMap(entity);
yysMaterialProcurementOrderMap.put("id", yysMaterialProcurementOrderMap.get("id"));
//副表数据
//子表数据
realList.add(yysMaterialProcurementOrderMap);
}
//数据转换
realList = generaterSwapUtil.swapDataList(realList, YysMaterialProcurementOrderConstant.getFormData(), YysMaterialProcurementOrderConstant.getColumnData(), yysMaterialProcurementOrderPagination.getModuleId(), false);
String[] keys = !StringUtil.isEmpty(yysMaterialProcurementOrderPagination.getSelectKey()) ? yysMaterialProcurementOrderPagination.getSelectKey() : new String[0];
UserInfo userInfo = userProvider.get();
DownloadVO vo = this.creatModelExcel(configValueUtil.getTemporaryFilePath(), realList, keys, userInfo);
return ActionResult.success(vo);
}
/**
* 导出表格方法
*/
public DownloadVO creatModelExcel(String path, List<Map<String, Object>> list, String[] keys, UserInfo userInfo) {
DownloadVO vo = DownloadVO.builder().build();
List<ExcelExportEntity> entitys = new ArrayList<>();
if (keys.length > 0) {
for (String key : keys) {
switch (key) {
case "orderNumber":
entitys.add(new ExcelExportEntity("采购单号", "orderNumber"));
break;
case "orderDate":
entitys.add(new ExcelExportEntity("单据日期", "orderDate"));
break;
case "procurementNumber":
entitys.add(new ExcelExportEntity("采购计划单号", "procurementNumber"));
break;
case "supplier":
entitys.add(new ExcelExportEntity("供应商", "supplier"));
break;
case "materialCode":
entitys.add(new ExcelExportEntity("物料编码", "materialCode"));
break;
case "materialName":
entitys.add(new ExcelExportEntity("物料名称", "materialName"));
break;
case "specification":
entitys.add(new ExcelExportEntity("规格型号", "specification"));
break;
case "orderQuantity":
entitys.add(new ExcelExportEntity("下单数量", "orderQuantity"));
break;
case "unit":
entitys.add(new ExcelExportEntity("计量单位", "unit"));
break;
case "totalProductionQuantity":
entitys.add(new ExcelExportEntity("总投产数量", "totalProductionQuantity"));
break;
case "totalSendQuantity":
entitys.add(new ExcelExportEntity("总发货数量", "totalSendQuantity"));
break;
case "requestDeliveryDate":
entitys.add(new ExcelExportEntity("要求到货日期", "requestDeliveryDate"));
break;
case "delayReason":
entitys.add(new ExcelExportEntity("延期原因", "delayReason"));
break;
case "delayedDeliveryDate":
entitys.add(new ExcelExportEntity("延期交货日期", "delayedDeliveryDate"));
break;
case "batchDeliveryDate":
entitys.add(new ExcelExportEntity("分批发货日期", "batchDeliveryDate"));
break;
case "batchShipmentQuantity":
entitys.add(new ExcelExportEntity("分批发货数量", "batchShipmentQuantity"));
break;
case "confirmQuantityReceived":
entitys.add(new ExcelExportEntity("确认到货数量", "confirmQuantityReceived"));
break;
case "orderStatus":
entitys.add(new ExcelExportEntity("单据状态", "orderStatus"));
break;
case "orderFiles":
entitys.add(new ExcelExportEntity("订单附件", "orderFiles"));
break;
default:
break;
}
}
}
ExportParams exportParams = new ExportParams(null, "表单信息");
exportParams.setType(ExcelType.XSSF);
try {
@Cleanup Workbook workbook = new HSSFWorkbook();
if (entitys.size() > 0) {
if (list.size() == 0) {
list.add(new HashMap<>());
}
//去除空数据
List<Map<String, Object>> dataList = new ArrayList<>();
for (Map<String, Object> map : list) {
int i = 0;
for (String key : keys) {
//子表
if (key.toLowerCase().startsWith("tablefield")) {
String tableField = key.substring(0, key.indexOf("-"));
String field = key.substring(key.indexOf("-") + 1);
Object o = map.get(tableField);
if (o != null) {
List<Map<String, Object>> childList = (List<Map<String, Object>>) o;
for (Map<String, Object> childMap : childList) {
if (childMap.get(field) != null) {
i++;
}
}
}
} else {
Object o = map.get(key);
if (o != null) {
i++;
}
}
}
if (i > 0) {
dataList.add(map);
}
}
//复杂表头-表头和数据处理
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(YysMaterialProcurementOrderConstant.getColumnData(), ColumnDataModel.class);
List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList);
dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList);
}
workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList);
}
String fileName = "表单信息" + DateUtil.dateNow("yyyyMMdd") + "_" + RandomUtil.uuId() + ".xlsx";
MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
String temporaryFilePath = configValueUtil.getTemporaryFilePath();
FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
vo.setName(fileInfo.getFilename());
vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
} catch (Exception e) {
log.error("信息导出Excel错误:{}", e.getMessage());
e.printStackTrace();
}
return vo;
}
/**
* 编辑
*
* @param id
* @param yysMaterialProcurementOrderForm
* @return
*/
@PutMapping("/{id}")
@Operation(summary = "更新")
public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid YysMaterialProcurementOrderForm yysMaterialProcurementOrderForm,
@RequestParam(value = "isImport", required = false) boolean isImport) {
yysMaterialProcurementOrderForm.setId(id);
if (!isImport) {
String b = yysMaterialProcurementOrderService.checkForm(yysMaterialProcurementOrderForm, 1);
if (StringUtil.isNotEmpty(b)) {
return ActionResult.fail(b);
}
}
YysMaterialProcurementOrderEntity entity = yysMaterialProcurementOrderService.getInfo(id);
if (entity != null) {
try {
yysMaterialProcurementOrderService.saveOrUpdate(yysMaterialProcurementOrderForm, id, false);
} catch (Exception e) {
return ActionResult.fail("修改数据失败");
}
return ActionResult.success("更新成功");
} else {
return ActionResult.fail("更新失败,数据不存在");
}
}
/**
* 删除
*
* @param id
* @return
*/
@Operation(summary = "删除")
@DeleteMapping("/{id}")
@Transactional
public ActionResult delete(@PathVariable("id") String id) {
YysMaterialProcurementOrderEntity entity = yysMaterialProcurementOrderService.getInfo(id);
if (entity != null) {
//假删除
entity.setDeleteMark(1);
yysMaterialProcurementOrderService.update(id, entity);
}
return ActionResult.success("删除成功");
}
/**
* 表单信息(详情页)
* 详情页面使用-转换数据
*
* @param id
* @return
*/
@Operation(summary = "表单信息(详情页)")
@GetMapping("/detail/{id}")
public ActionResult detailInfo(@PathVariable("id") String id) {
YysMaterialProcurementOrderEntity entity = yysMaterialProcurementOrderService.getInfo(id);
if (entity == null) {
return ActionResult.fail("表单数据不存在!");
}
Map<String, Object> yysMaterialProcurementOrderMap = JsonUtil.entityToMap(entity);
yysMaterialProcurementOrderMap.put("id", yysMaterialProcurementOrderMap.get("id"));
//副表数据
//子表数据
yysMaterialProcurementOrderMap = generaterSwapUtil.swapDataDetail(yysMaterialProcurementOrderMap, YysMaterialProcurementOrderConstant.getFormData(), "591255416864768197", false);
return ActionResult.success(yysMaterialProcurementOrderMap);
}
/**
* 获取详情(编辑页)
* 编辑页面使用-不转换数据
*
* @param id
* @return
*/
@Operation(summary = "信息")
@GetMapping("/{id}")
public ActionResult info(@PathVariable("id") String id) {
YysMaterialProcurementOrderEntity entity = yysMaterialProcurementOrderService.getInfo(id);
if (entity == null) {
return ActionResult.fail("表单数据不存在!");
}
Map<String, Object> yysMaterialProcurementOrderMap = JsonUtil.entityToMap(entity);
yysMaterialProcurementOrderMap.put("id", yysMaterialProcurementOrderMap.get("id"));
//副表数据
//子表数据
yysMaterialProcurementOrderMap = generaterSwapUtil.swapDataForm(yysMaterialProcurementOrderMap, YysMaterialProcurementOrderConstant.getFormData(), YysMaterialProcurementOrderConstant.TABLEFIELDKEY, YysMaterialProcurementOrderConstant.TABLERENAMES);
return ActionResult.success(yysMaterialProcurementOrderMap);
}
@Operation(summary = "生成采购订单")
@PostMapping("/initOrder")
public ActionResult initOrder(@RequestBody YysMaterialProcurementOrderForm form) {
String result = yysMaterialProcurementOrderService.initOrder(form);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "投产-App")
@PostMapping("/toProd")
public ActionResult toProd(@RequestBody YysMaterialProcurementOrderRequest request) {
String result = yysMaterialProcurementOrderService.toProd(request);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "发货-App")
@PostMapping("/shipments")
public ActionResult shipments(@RequestBody YysMaterialProcurementOrderRequest request) {
String result = yysMaterialProcurementOrderService.shipments(request);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "点击延期发货-App")
@PostMapping("/delay")
public ActionResult delay(@RequestBody YysMaterialProcurementOrderRequest request) {
yysMaterialProcurementOrderService.delay(request);
return ActionResult.success();
}
@Operation(summary = "缺货结单-App")
@PostMapping("/finish")
public ActionResult finish(@RequestBody YysMaterialProcurementOrderRequest request) {
yysMaterialProcurementOrderService.finish(request);
return ActionResult.success();
}
@Operation(summary = "接单-App")
@GetMapping("/takeOrder/{orderNumber}")
public ActionResult takeOrder(@PathVariable String orderNumber) {
yysMaterialProcurementOrderService.takeOrder(orderNumber);
return ActionResult.success();
}
@Operation(summary = "确认到货")
@PostMapping("/confirmQuantity")
public ActionResult confirmQuantity(@RequestBody YysMaterialProcurementOrderRequest request) {
String result = yysMaterialProcurementOrderService.confirmQuantity(request);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "采购协同列表-App")
@PostMapping("/list")
public ActionResult queryList(@RequestBody YysMaterialProcurementOrderPagination queryBody) {
return ActionResult.success(yysMaterialProcurementOrderService.queryList(queryBody));
}
}