Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
5b1fc636dc

+ 36 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/controller/FabricLossController.java

@@ -16,13 +16,19 @@ import org.jeecg.modules.report.service.IFabricLossService;
 import org.jeecg.modules.report.service.IFabricOmOrderService;
 import org.jeecg.modules.report.service.IFabricPoOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import static sun.net.www.protocol.http.HttpURLConnection.userAgent;
+
 /**
  * <p>
  * 用户表 前端控制器
@@ -246,4 +252,34 @@ public class FabricLossController {
 		}
 		return result;
 	}
+
+	/**
+	 * 获取附件内容
+	 * @param fileId
+	 * @return
+	 */
+	@RequestMapping(value="/getFile", method = RequestMethod.GET)
+	public ResponseEntity<byte[]> getFile(@RequestParam(name="fileId",required=true) String fileId,
+	                                      @RequestParam(name="filename",required=true) String filename) throws IOException {
+		ResponseEntity.BodyBuilder builder = ResponseEntity.ok();
+		byte[] content = fabricLossService.getFileContent(fileId);
+		builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
+		filename = URLEncoder.encode(filename, "UTF-8");
+
+		if (content == null){
+			builder.contentLength(0);
+		}else{
+			builder.contentLength(content.length);
+		}
+		// 根据浏览器类型,决定"Content-Disposition"响应头的值
+		if(userAgent.indexOf("MSIE") > 0) {
+			builder.header("Content-Disposition",
+					"attachment;filename=" + filename);
+		} else {
+			builder.header("Content-Disposition",
+					"attacher;filename*=UTF-8''" + filename);
+		}
+		return builder.body(content);
+
+	}
 }

+ 34 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/AccessorItem.java

@@ -0,0 +1,34 @@
+package org.jeecg.modules.report.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @author fenghaifu
+ * @version V1.0
+ * @Copyright: 上海萃颠信息科技有限公司. All rights reserved.
+ * @Title:AccessorItem
+ * @projectName jeecg-boot-parent
+ * @Description:附件
+ * @date: 2022-10-24 11:18
+ * @updatehistory: 2022-10-24 11:18 新增
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="U8附件", description="U8附件")
+public class AccessorItem {
+	@ApiModelProperty(value = "计划号")
+	private  String cCode;
+	@ApiModelProperty(value = "文件ID")
+	private  String cFileId;
+	@ApiModelProperty(value = "文件名")
+	private  String Filename;
+	@ApiModelProperty(value = "文件路径")
+	private  String Fileurl;
+	@ApiModelProperty(value = "物料ID")
+	private  String cInvId; // 编号+颜色
+}

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/FabricLoss.java

@@ -59,6 +59,8 @@ public class FabricLoss {
     List<FabricCostAssist> fabricCostAssistList;
     // 开票成本-面料
     List<FabricCostCloth> fabricCostClothList;
+    // 销售订单附件
+    List<AccessorItem> accessorItemList;
 
     // 是否成功
     boolean success;

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/FabricOMOrder.java

@@ -65,4 +65,6 @@ public class FabricOMOrder {
     List<FabricMoOrderCK> fabricMoOrderCKList;
     // 委外订单入库详情
     List<FabricMoOrderRK> fabricMoOrderRKList;
+    // 附件
+    List<AccessorItem> accessorItemList;
 }

+ 9 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/FabricLossMapper.java

@@ -124,4 +124,13 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	// 根据形态转换物料获取采购入库信息
 	@DS("multi-three")
 	List<Map<String,Object>> getOmRowInListWithAV(@Param("code")String code);
+	// 销售订单附件
+	@DS("multi-three")
+	List<AccessorItem> getSoAccList(@Param("code")String code);
+	// 附件详情
+	@DS("multi-three")
+	List<Map<String,Object>> getAccDetail(@Param("fileId")String fileId);
+	// 委外订单附件
+	@DS("multi-three")
+	List<AccessorItem> getOmAccList(@Param("code")String code);
 }

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/xml/FabricLossMapper.xml

@@ -759,4 +759,21 @@
 		and e.iQuantity>0 and f.cbustype in ('其他入库','转换入库')
 	)
 	</select>
+	<!-- 获取销售订单附件 -->
+	<select id="getSoAccList" resultType="org.jeecg.modules.report.entity.AccessorItem">
+		select distinct cFileId,Filename from VIEW_ACC_LIST_SO where cCode like CONCAT(#{code},'%')
+	</select>
+	<!-- 获取附件详情 -->
+	<select id="getAccDetail" resultType="map">
+		select FileContent from VIEW_ACC_DETAIL_ALL where cFileId=#{fileId}
+	</select>
+	<!-- 获取委外订单附件-->
+	<select id="getOmAccList" resultType="org.jeecg.modules.report.entity.AccessorItem">
+		select  b.cInvCode+isnull(b.cFree1,'') as cInvId,
+			'103-'+convert(varchar(50),f.vouchertypeid)+'-'+convert(varchar(50),f.voucherid) as cFileId,f.Filename
+		from OM_MOMain a inner join om_modetails b on a.moid=b.moid
+			inner join VoucherAccessories f on f.voucherid=a.moid
+		where f.vouchertypeid='OM01'
+			and a.cCode like CONCAT(#{code},'%')
+	</select>
 </mapper>

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/service/IFabricLossService.java

@@ -31,5 +31,7 @@ public interface IFabricLossService extends IService<FabricLoss> {
 	//获取面料损耗数据
 	FabricLoss getFabricLossData(String code);
 
+	// 根据文件id,获取文件内容
+	byte[] getFileContent(String fileId);
 
 }

+ 46 - 10
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/service/impl/FabricLossServiceImpl.java

@@ -124,6 +124,14 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				dOutSum = ret.getNumber();
 			}
 			ret.setOutboundNumber(dOutSum);
+			// 销售订单附件
+			List<AccessorItem> accessorItemList = fabricLossMapper.getSoAccList(code);
+			accessorItemList.forEach(e->e.setFileurl("/report/FabricLoss/getFile?fileId="+e.getCFileId()+"&filename="+e.getFilename()));
+			ret.setAccessorItemList(accessorItemList);
+			// 委外订单附件
+			List<AccessorItem> omAccList = fabricLossMapper.getOmAccList(code);
+			omAccList.forEach(e->e.setFileurl("/report/FabricLoss/getFile?fileId="+e.getCFileId()+"&filename="+e.getFilename()));
+
 			// 采购入库数据
 			List<FabricPoOrder> fabricPoOrderListTmp = fabricLossMapper.getPurchaseList(code);
 			//采购数据把不同订单合并
@@ -314,6 +322,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			// 设置详情及成本
 			fabricOMOrderList1 = setFabricOMOrderOutDetail(fabricOMOrderList1, code);
 			fabricOMOrderList1 = setFabricOMOrderInDetail(fabricOMOrderList1, code);
+			// 设置附件
+			fabricOMOrderList1.forEach(e->{
+				List<AccessorItem> accessorItemList1 = omAccList.stream().filter(a->a.getCInvId().equals(e.getCInvCode()+e.getCColor())).collect(Collectors.toList());
+				e.setAccessorItemList(accessorItemList1);
+			});
 			// 委外订单国内
 			for (FabricOMOrder fabricOMOrder : fabricOMOrderList1){
 				double dLoss = 0;
@@ -365,15 +378,26 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 					newItem.setCVenName(fabricCostInvoice.getCVenName());
 					newItem.setCVenAbbName(fabricCostInvoice.getCVenAbbName());
 					newItem.setIUnitCost(fabricCostInvoice.getIUnitCost());
+					fabricCostInvoiceList.add(newItem);
+				}
+
+				Double money = newItem.getIMoney();
+				for (FabricOMOrder omOrder : fabricOMOrderList1){
+					List<FabricMoOrderCK> ckList = omOrder.getFabricMoOrderCKList();
+					if (ckList != null) {
+						List<FabricMoOrderCK> findList1 = ckList.stream().filter(e->
+								e.getCInvCodeOut().equals(fabricCostInvoice.getCInvCode()) &&
+										e.getCColorOut().equals(fabricCostInvoice.getCColor())).collect(Collectors.toList());
+
+						for (FabricMoOrderCK ckItem : findList1) {
+							money+=ckItem.getIMoney();
+						}
+					}
+
 				}
-				double outSum = fabricOMOrderList1.stream().filter(e->
-						e.getCVCName().equals(fabricCostInvoice.getCVCName()) &&
-						e.getCVenAbbName().equals(fabricCostInvoice.getCVenAbbName()) &&
-						e.getCInvCode().equals(fabricCostInvoice.getCInvCode())).mapToDouble(FabricOMOrder::getIQuantityOut).sum();
-				outSum *=newItem.getIUnitCost();
-				outSum += newItem.getIMoney();
+				BigDecimal bdValue = new BigDecimal(money);
+				newItem.setIMoney(bdValue.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 
-				newItem.setIMoney(outSum);
 			}
 
 			//获取委外订单发票金额
@@ -393,8 +417,10 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			if (fabricCostInvoiceListTmp.size()>0){
 				fabricCostInvoiceListOrder.addAll(fabricCostInvoiceListTmp);
 			}
-			fabricCostInvoiceListTmp = fabricCostInvoiceList.stream().filter(e->e.getCVCName().indexOf("织")!=0&&e.getCVCName().indexOf("染")!=0&&e.getCVCName().indexOf("印")!=0).collect(Collectors.toList());
-			if (fabricOMOrderListTmp.size()>0){
+			fabricCostInvoiceListTmp = fabricCostInvoiceList.stream().filter(e-> {
+				return fabricCostInvoiceListOrder.stream().filter(x->x.getCVCName().equals(e.getCVCName())).count()==0;
+			}).collect(Collectors.toList());
+			if (fabricCostInvoiceListTmp.size()>0){
 				fabricCostInvoiceListOrder.addAll(fabricCostInvoiceListTmp);
 			}
 			fabricCostInvoiceList = fabricCostInvoiceListOrder;
@@ -699,7 +725,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			// 根据委外订单子表id,找到入库物料
 			findInCanSetList = findInCanSetList.stream().filter(in->{
 				return findOutCanSetList.stream().filter(out->
-						oConvertUtils.getInt(in.get("MODetailsID")).equals(out.getMODetailsID())).count()>0;
+						out.getMODetailsID() == oConvertUtils.getInt(in.get("MODetailsID"),0)).count()>0;
 			}).collect(Collectors.toList());
 			// 设置入库单金额
 			for (Map<String,Object> item : findInCanSetList){
@@ -897,4 +923,14 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 
 		return ret;
 	}
+
+	// 根据文件id,获取文件内容
+	@Override
+	public byte[] getFileContent(String fileId){
+		List<Map<String,Object>> fileContentList = fabricLossMapper.getAccDetail(fileId);
+		if (fileContentList.size()>0){
+			return (byte[])fileContentList.get(0).get("FileContent");
+		}
+		return null;
+	}
 }