|
@@ -69,6 +69,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
|
|
|
public FabricLoss getFabricLossData(String code) {
|
|
|
if (oConvertUtils.isNotEmpty(code)){
|
|
|
FabricLoss ret = new FabricLoss();
|
|
|
+ ret.setSuccess(true);
|
|
|
ret.setCCode(code);
|
|
|
|
|
|
List<String> lstContractNo = new ArrayList<>(); // 成衣合同号
|
|
@@ -259,6 +260,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
|
|
|
ret.setFabricPoOrderList(fabricPoOrderList);
|
|
|
// 委外订单所有
|
|
|
List<FabricOMOrder> fabricOMOrderListAll = fabricLossMapper.getOmOrderListAll(code);
|
|
|
+ if (fabricOMOrderListAll.size() == 0){
|
|
|
+ ret.setSuccess(false);
|
|
|
+ ret.setMessage("本计划没有面料委外,无面损表");
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
// 织、染、印,其他排序
|
|
|
List<FabricOMOrder> fabricOMOrderList1 = new ArrayList<>();
|
|
|
List<FabricOMOrder> fabricOMOrderListTmp = fabricOMOrderListAll.stream().filter(e->e.getCVCName().indexOf("织")==0).collect(Collectors.toList());
|
|
@@ -277,6 +283,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
|
|
|
if (fabricOMOrderListTmp.size()>0){
|
|
|
fabricOMOrderList1.addAll(fabricOMOrderListTmp);
|
|
|
}
|
|
|
+ // 设置详情及成本
|
|
|
+ fabricOMOrderList1 = setFabricOMOrderOutDetail(fabricOMOrderList1, code);
|
|
|
+ fabricOMOrderList1 = setFabricOMOrderInDetail(fabricOMOrderList1, code);
|
|
|
// 委外订单国内
|
|
|
for (FabricOMOrder fabricOMOrder : fabricOMOrderList1){
|
|
|
double dLoss = 0;
|
|
@@ -454,15 +463,147 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public Map<String, Object> getFabricLossDatas(String code) {
|
|
|
- Map<String,Object>map=new HashMap<>();
|
|
|
- if (oConvertUtils.isNotEmpty(code)){
|
|
|
- List<FabricPoOrder> poOrderData = fabricPoOrderService.getPoOrderData(code);
|
|
|
- List<FabricOMOrder> fabricOMOrderData = fabricOmOrderService.getFabricOMOrderData(code);
|
|
|
- map.put("poOrder",poOrderData);
|
|
|
- map.put("omOrder",fabricOMOrderData);
|
|
|
+ /**
|
|
|
+ * 设置委外订单材料出库详情
|
|
|
+ * @param fabricOMOrderList - 委外订单列表
|
|
|
+ * @param code - 计划号
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ List<FabricOMOrder> setFabricOMOrderOutDetail(List<FabricOMOrder> fabricOMOrderList, String code){
|
|
|
+ List<FabricMoOrderCK> fabricMoOrderCKList = fabricLossMapper.getOmOutDetailList(code);
|
|
|
+
|
|
|
+ for (FabricOMOrder fabricOMOrder : fabricOMOrderList){
|
|
|
+ List<FabricMoOrderCK> findList = fabricMoOrderCKList.stream().filter(e->
|
|
|
+ e.getCInvCodeIn().equals(fabricOMOrder.getCInvCode()) &&
|
|
|
+ oConvertUtils.getString(e.getCColorIn()).equals(fabricOMOrder.getCColor())).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 设置成本,循环查找上一级
|
|
|
+ if (findList.size() == 0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ FabricMoOrderCK preItem = findList.get(0);
|
|
|
+ double preMoney = 0;
|
|
|
+ boolean abnormal = false;
|
|
|
+ while (true){
|
|
|
+ FabricMoOrderCK tempItem = preItem;
|
|
|
+ List<FabricMoOrderCK> preList = fabricMoOrderCKList.stream().filter(e->
|
|
|
+ e.getCInvCodeIn().equals(tempItem.getCInvCodeOut()) &&
|
|
|
+ oConvertUtils.getString(e.getCColorIn()).equals(tempItem.getCColorOut()) &&
|
|
|
+ oConvertUtils.getString(e.getCBatchIn()).equals(tempItem.getCBatchOut())).collect(Collectors.toList());
|
|
|
+ if (preList.size() == 0){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 有两行单价不一样的,报异常。委外取加工单价,采购取采购单价
|
|
|
+ double price = 0;
|
|
|
+ for (FabricMoOrderCK ckItem : preList){
|
|
|
+ double tmpPrice = 0;
|
|
|
+ if ("委外加工".equals(ckItem.getCBusType())){
|
|
|
+ tmpPrice = ckItem.getIProcessPrice();
|
|
|
+ }else if ("普通采购".equals(ckItem.getCBusType())){
|
|
|
+ tmpPrice = ckItem.getIPurchusePrice();
|
|
|
+ }
|
|
|
+ if (price == 0){
|
|
|
+ price = tmpPrice;
|
|
|
+ }else{
|
|
|
+ if (price != tmpPrice){
|
|
|
+ abnormal = true;
|
|
|
+ preMoney = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (price == 0){
|
|
|
+ abnormal = true;
|
|
|
+ }
|
|
|
+ if (abnormal){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ preMoney += preItem.getIQuantityIn()*price;
|
|
|
+ preItem = preList.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置出库数量
|
|
|
+ //double shouldOutSum = fabricOMOrder.getIQuantityOut();
|
|
|
+ for (FabricMoOrderCK ckItem : findList){
|
|
|
+ //double curInSum = ckItem.getIQuantityIn();
|
|
|
+ double curOut = ckItem.getIQuantityOut();
|
|
|
+// if (shouldOutSum>curInSum){
|
|
|
+// curOut = curInSum;
|
|
|
+// }else{
|
|
|
+// curOut = shouldOutSum;
|
|
|
+// }
|
|
|
+ BigDecimal bdVal = new BigDecimal(curOut);
|
|
|
+ ckItem.setIQuantity(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+ double tmpPrice = 0;
|
|
|
+ double tmpMoney = preMoney;
|
|
|
+ if (!abnormal){
|
|
|
+
|
|
|
+
|
|
|
+ if ("委外加工".equals(ckItem.getCBusType())){
|
|
|
+ tmpPrice = ckItem.getIProcessPrice();
|
|
|
+ }else if ("普通采购".equals(ckItem.getCBusType())){
|
|
|
+ tmpPrice = ckItem.getIPurchusePrice();
|
|
|
+ }
|
|
|
+ tmpMoney += ckItem.getIQuantityIn()*tmpPrice;
|
|
|
+
|
|
|
+ if (ckItem.getIQuantity()>0) {
|
|
|
+ bdVal = new BigDecimal(tmpMoney);
|
|
|
+ ckItem.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+
|
|
|
+ bdVal = new BigDecimal(tmpMoney / ckItem.getIQuantity());
|
|
|
+ ckItem.setIPrice(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// shouldOutSum-=curOut;
|
|
|
+// if (shouldOutSum<=0){
|
|
|
+// break;
|
|
|
+// }
|
|
|
+ }
|
|
|
+ fabricOMOrder.setFabricMoOrderCKList(findList);
|
|
|
}
|
|
|
- return map;
|
|
|
+
|
|
|
+ return fabricOMOrderList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置委外订单入库详情
|
|
|
+ * @param fabricOMOrderList - 委外订单列表
|
|
|
+ * @param code - 计划号
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ List<FabricOMOrder> setFabricOMOrderInDetail(List<FabricOMOrder> fabricOMOrderList, String code){
|
|
|
+ List<FabricMoOrderRK> fabricMoOrderRKList = fabricLossMapper.getOmInDetailList(code);
|
|
|
+
|
|
|
+ for (FabricOMOrder fabricOMOrder : fabricOMOrderList){
|
|
|
+ List<FabricMoOrderRK> findList = fabricMoOrderRKList.stream().filter(e->
|
|
|
+ e.getCInvCode().equals(fabricOMOrder.getCInvCode()) &&
|
|
|
+ oConvertUtils.getString(e.getCColor()).equals(fabricOMOrder.getCColor())).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ if (findList.size() == 0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 取材料出库成本+本次委外成本=成本
|
|
|
+ fabricOMOrder.setFabricMoOrderRKList(findList);
|
|
|
+ List<FabricMoOrderCK> ckList = fabricOMOrder.getFabricMoOrderCKList();
|
|
|
+ FabricMoOrderCK ckItem = null;
|
|
|
+ if (ckList != null && ckList.size() > 0){
|
|
|
+ ckItem = ckList.get(0);
|
|
|
+ }
|
|
|
+ for (FabricMoOrderRK fabricMoOrderRK : findList){
|
|
|
+ BigDecimal bdVal = new BigDecimal(fabricMoOrderRK.getIQuantityIn()-fabricMoOrderRK.getISumBillQuantity());
|
|
|
+ fabricMoOrderRK.setISumBillQuantityN(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+ bdVal = new BigDecimal(fabricMoOrderRK.getIQuantityIn()-fabricMoOrderRK.getISQuantity());
|
|
|
+ fabricMoOrderRK.setISQuantityN(bdVal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+ if (ckItem != null && ckItem.getIPrice() != null && ckItem.getIPrice()>0){
|
|
|
+ bdVal = new BigDecimal(fabricMoOrderRK.getIProcessFee()+ckItem.getIPrice()*fabricMoOrderRK.getIQuantityOut());
|
|
|
+ fabricMoOrderRK.setIPrice(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return fabricOMOrderList;
|
|
|
}
|
|
|
}
|